2016-11-17 2 views
0

DocumentDBで作成操作でプリトリガを作成しました。トリガコードは、トリガが直ちにvar isAccepted = collection.createDocument(collection.getSelfLink(), docToCreate);上の行まで実行され、次の指定されたidを持つDocumentDBリソースは、作成時にプリトリガを実行するときに既に存在します

function createBlock() { 
    var collection = getContext().getCollection(); 
    var request = getContext().getRequest(); 
    var docToCreate = request.getBody(); 

    if (docToCreate.DocumentType) 
    { 
     var query = "SELECT TOP 1 a.BlockSequence FROM a ORDER BY a.BlockSequence DESC"; 

     var isAccepted = collection.queryDocuments(collection.getSelfLink(), query, function (err, feed, options) { 
      if (err) 
       throw err; 

      if (!feed) 
       throw new Error("Failed to find the document."); 

      if (feed.length) 
      { 
       docToCreate.BlockCode += (feed[0].BlockSequence + 1); 
       docToCreate.BlockSequence = feed[0].BlockSequence + 1; 
      } 
      else 
      { 
       docToCreate.BlockCode += "1"; 
       docToCreate.BlockSequence = 1; 
      } 

      var isAccepted = collection.createDocument(collection.getSelfLink(), docToCreate); 

      if (!isAccepted) 
       throw new Error("The call createDocument returned false."); 
     }); 
    } 
    else 
     throw new Error("DocumentType property is required."); 

    if (!isAccepted) 
     throw new Error("The call queryDocuments returned false."); 
} 

あります。 var isAccepted = collection.createDocument(collection.getSelfLink(), docToCreate);が実行されると

、このエラーは、私がチェックした、新たな文書の同じIDを持つ文書がこのコレクションに格納されていないMessage: {"Errors":["Resource with specified id or name already exists"]}

がスローされます。

答えて

0

トリガーで書き込みを行おうとしないでください。本文を変更するか、エラーを投げるだけです。本体の変更では、作成された文書を変更します。エラーをスローすると操作が中止されます。

ので、代わりの:

var isAccepted = collection.createDocument(collection.getSelfLink(), docToCreate); 

行います

return request.setBody(docToCreate); 
関連する問題