2017-11-28 3 views
0

Azureポータルのスクリプトエクスプローラを使用してCosmosDBで削除前トリガを実装しようとしました(トリガタイプは "Pre"で、トリガ操作は "Delete"です)。私がしたいのは、削除された文書を使用し、その "pastDue"プロパティをtrueに変更して新しい文書を作成することです。私のコレクションから文書を削除した後、私は変更を見ることができません。削除事前トリガを使用してCosmosDBで新しい文書を作成するにはどうすればよいですか?

私が間違っていることを誰かに教えてもらえますか?トリガーが正常に実行されたかどうかはどうすればわかりますか?ここで

function markReminderAsPastDue() { 
     var collection = getContext().getCollection(); 
     var request = getContext().getRequest(); 
     var docToCreate = request.getBody(); 
     docToCreate["pastDue"] = true; 
     collection.createDocument(collection.getSelfLink(), 
      docToCreate, 
      function (err, documentCreated) { 
       if (err) throw new Error('Error' + err.message);  

     }); 
    } 

は、私は私のデータベースハンドラクラス内の任意のコレクションから任意の文書を削除するために使用する機能です。

removeItem (item, partitionKey, callback) 
{ 
    var options = { 
     partitionKey: [ partitionKey ? partitionKey: item.email] 
    }; 
    this.client.deleteDocument(item._self, options, 
     (err, doc) => { 
      if (err) 
      { 
       LogUtils.error("DBHandler.removeItem "+err.body); 
       callback(err, null); 
      } 
      else 
      { 
       callback(null, "success remove Item"); 
      } 
     }); 
} 
+0

ドキュメントを削除するときに、要求のオプションにpreTriggersIncludeを指定するのですか?トリガは自動起動されず、トリガを必要とする各リクエストで明示的に指定する必要があります。また、次のようなcollection.createDocumentの戻り値を確認してください:var isAccepted = collection.createDocument(...); if(!isAccepted)新しいエラーをスローする( "not accepted"); –

答えて

0

あなたの説明によると、最初のポータル上での事前トリガーを作成する必要がありますかDocument DB SDKを使用します。

enter image description here

トリガータイプは、前である必要があり、トリガ動作を削除する必要があります。

私の経験上、トリガを有効にする操作でトリガを明示的に指定する必要があります。現在、Azureポータルからはサポートされていないようです。

操作の前に呼び出されるトリガーをRequestOptions引き数で指定する必要があります。 Trigger in DocumentDb not fired?

はそれが役に立てば幸い:

RequestOptions options = new RequestOptions(); 
//enable script logging true 
options.setScriptLoggingEnabled(true); 
List<String> list = new ArrayList<String>(); 
list.add("test"); 
options.setPreTriggerInclude(list); 

documentClient.deleteDocument("dbs/db/colls/coll/docs/400", options); 

System.out.println("delete success"); 

はまた、あなたがスレッドを参照できます:私はあなたが使用しているどの言語がわからない 、ここでは以下のようにJavaコードのスニペットを参照してください。君は。


更新回答:

私はあなたがRequestOptionsの引数で呼び出されるトリガ指定されていませんでした。以下のようにコード内でオプションを変更してください:以下のように

var options = { 
     partitionKey: [ partitionKey ? partitionKey: item.email], 
     preTriggerInclude: "<your pre-trigger's id >" 
    }; 

とトリガ機能を:

function trigger(){ 
    var context = getContext(); 
     var request = context.getRequest(); 
     var collection = getContext().getCollection(); 

     var documentToCreate = request.getBody(); 
     documentToCreate["pastDue"] = true; 
     documentToCreate["id"] = ""; 
     collection.createDocument(collection.getSelfLink(),documentToCreate); 

} 
+0

@ user3127584 SDKまたはポータルでドキュメントを削除しましたか?現在、Azureポータルからはサポートされていないようです。 –

+0

返事ありがとうございました。上記で共有したコードスニペットはJavaScriptで書かれています。私はAzureポータルでScript Explorerを使用してこのトリガーを作成しました。そのトリガータイプは "Pre"で、トリガー操作は "Delete"です。関連付けられたコレクションからドキュメントを削除した後、トリガーの結果として新しいドキュメントが表示されません。それは解雇されていないようです。 – user3127584

+0

Azureクラウド上にあるWeb AppからNode.js SDKを使用してドキュメントを削除しました。 – user3127584

関連する問題