2016-11-17 2 views
0

В DocumentDB Я создаю предварительный триггер для операции Create. Код триггера следующиеРесурс 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);.

Когда var isAccepted = collection.createDocument(collection.getSelfLink(), docToCreate); выполняются, эта ошибка возникает Message: {"Errors":["Resource with specified id or name already exists"]}

Я проверил и никаких документов с одинаковым идентификатором нового документа не хранятся в эту коллекцию.

ответ

0

Не пытайтесь выполнить запись в триггере. Вы должны просто изменить тело или выбросить ошибку. При изменении тела вы изменяете созданный документ. Выбрасывая ошибку, вы прерываете операцию.

Таким образом, вместо:

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

Do:

return request.setBody(docToCreate); 
Смежные вопросы