DocumentDB为什么无法从Azure门户触发触发器?

时间:2016-08-05 19:18:22

标签: triggers azure-cosmosdb azureportal

我有一个关于替换动作的预触发器。我意识到,与SQL Server触发器不同,当您更新Azure门户中的文档时,不会触发DocumentDB触发器。我是否错过了门户网站的任何设置?或者这是DocumentDB触发器的工作方式?只能从应用程序代码触发?

谢谢!

2 个答案:

答案 0 :(得分:2)

您的理解是正确的。没有技术拦截器允许来自门户网站的此功能,只是它目前缺少。

这肯定是一个有效的请求@ https://feedback.azure.com/forums/263030-documentdb

答案 1 :(得分:0)

DocumentDb数据库触发器不会通过DML自动引发,例如create&删除操作,这在其他数据库中很常见。

也就是说,必须为在应用程序代码中进行的每个数据库操作指定触发器。此外,触发器应该是相同的类型,也就是说,插入操作只能采用创建触发器类型,而不是替换类型。

因为,我有azure函数documentdb输出绑定,而不是自己做DML操作。在浪费了大量时间调试之后,继续在数据库集合下创建存储过程,然后使用以下类型的代码通过Azure功能代码调用它。

这非常有效:

// call stored procedure, nodejs, azure

'use strict';

var DocumentClient = require('documentdb').DocumentClient;
var client = new DocumentClient(process.env.DB_HOST, {masterKey: process.env.DB_M_KEY});

var sprocLink =
    'dbs/' + sprocDbName1 +
    '/colls/' + sprocCollName1 +
    '/sprocs/' + sprocName1;

var sprocParams = {
    key1: "val1",
    key2: "val2"
};

client
        .executeStoredProcedure(
                sprocLink,
                sprocParams1,
                function (err, results) {

                    if (err) {

                        context.log.error('err');
                        context.log.error(err);

                        return;
                    }

                    context.log.verbose('results');
                    context.log.verbose(results);

                    return;
                });

注意:为DB_HOST(url以:443 /结尾),DB_M_KEY,sprocDbName1(您的数据库名称),sprocCollName1(您的集合名称,sprocName1(您存储的proc名称))提供值

在执行上述操作之前,应在DocumentDb数据库集合内部创建存储过程(sproc)。

希望有所帮助。