2016-08-05 19 views
2

私は、置換アクションでプレトリガを持っています。 Azureポータルでドキュメントを更新すると、SQL Serverトリガとは異なり、DocumentDBトリガは起動しません。ポータルから設定が欠落していますか?これがDocumentDBのトリガですアプリケーションコードからのみ起動できますか?DocumentDBなぜAzureポータルからトリガを起動できないのですか?

ありがとうございます!

答えて

2

ご理解の方が正しいです。ポータルからこの機能を許可する技術的なブロッカーはなく、現在欠けているだけです。

それは確かに他のデータベースでは一般的です&削除操作を、作成するようhttps://feedback.azure.com/forums/263030-documentdb

+0

ime、DocumentDBStudio(https://github.com/mingaliu/DocumentDBStudio/releases/tag/0.70)を使ってトリガーをテストする –

+0

ありがとうございます!私はちょうど要求を掲示した。ところで、確かめたいのは、プリトリガやポストトリガに関係なく、すべてのトリガがCreate、Delete、またはReplaceアクションで同じトランザクションで実行されるということです。作成、削除、または置換中に何かが失敗した場合、プリトリガまたはポストトリガはロールバックされますか? –

+0

はい、CRUD +プレ/ポストトリガ中のエラーはロールバックされます。 –

0

DocumentDbのデータベース・トリガーは自動的に、DMLを経由して提起されていません@置かれるべき有効な要求です。

つまり、アプリケーションコードで行う各データベース操作に対してトリガーを指定する必要があります。また、トリガーは同じタイプでなければなりません。つまり、挿入操作では、タイプを置換するのではなく作成トリガー・タイプしか使用できません。

私は暗い関数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_M_KEY、sprocDbName1(あなたのDB名)、sprocCollName1(自分のコレクション名、sprocName1(あなたのストアドプロシージャを:DB_HOST(443 /で終わるURL)の値を与えます名)上記実行する前に

、ストアドプロシージャ(SPROC)はDocumentDbデータベースコレクション内で作成する必要があります。

希望に役立ちます。意味で

関連する問題