2017-11-28 4 views
0

Azure 포털에서 Script Explorer를 사용하여 CosmosDB에서 삭제 사전 트리거를 구현하려고했습니다 (트리거 유형은 "Pre"이고 트리거 작업은 "삭제"임). 내가 원하는 것은 삭제 된 것을 사용하고 "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) throw 새 오류 ("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"); 

은 또한 스레드를 참조 수 : 당신이 사용하는 언어를 모르는 , 여기에 아래와 같이 자바 코드의 조각을 참조하시기 바랍니다 당신.


업데이트 답변 :

난 당신이 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

답장을 보내 주셔서 감사합니다. Jay. 위에서 공유 한 코드 스 니펫은 JavaScript로 작성되었습니다. Azure 포털에서 Script Explorer를 사용하여이 트리거를 만들었습니다. 트리거 유형은 "Pre"이며 트리거 작동은 "삭제"입니다. 연관된 콜렉션에서 문서를 삭제 한 후에는 트리거 결과로 새 문서를 볼 수 없습니다. 그래서 해고되지 않는 것 같습니다. – user3127584

+0

Azure 클라우드에있는 웹 응용 프로그램에서 Node.js SDK를 사용하여 문서를 삭제했습니다. – user3127584