2015-09-07 47 views

回答

2

你可以只包括已知一些唯一標識符發件人在您的消息中作爲過程變量(請參閱,例如Camunda BPM REST API 'message' endpoint)。這樣一個過程變量然後由您的目標流程實例持有確實已收到該消息。

因此,在發送消息之後,您可以接着作爲接收流程實例的第二步查詢(例如參見Camunda BPM REST API 'get-instances' endpoint),其持有具有期望標識符的變量。

-2

AFAIK這樣做的唯一方法是如果在消息中包含源執行或進程ID。如果you're通過運行時服務API發送消息,那麼你的代碼應該是這個樣子:

String myPid = delegateExecution.getProcessInstanceId(); 
Map vars = new HashMap(); 
vars.put('senderProcessInstanceId',myPid); 

delegateExecution 
    .getEngineServices() 
    .getRuntimeService() 
    .messageEventReceived("someMessage",targetExecution,vars); 

執行此代碼後,接收過程中就可以檢索過程VAR的內容「senderProcessInstanceId」以便知道誰是發件人。

如果you're使用REST API,然後you'd使用

PUT runtime/executions/{executionId} 

使用JSON身體像:

{ 
    "action":"messageEventReceived", 
    "messageName":"myMessage" 
    "variables": [ {"name": "senderProcessInstanceId", "value":"xxxxx"} ] 
} 
+0

如何在消息中包含進程ID?首先,進程ID是在運行時生成的,而消息是在設計時定義的!其次,如果我知道進程ID將其包含在消息中,那麼它不會是找到它的問題!順便說一句,我正在使用REST API。謝謝你提到它,現在我把它包括在幹中。 – Mehran

+1

我認爲Philippe Sevestre想提出的建議是,您在消息中包含一些發件人已知的唯一標識符,作爲processVariable(http://docs.camunda.org/latest/api-references/rest/#message)。然後這個processVariable會在您真正接收到該消息後由您的目標流程實例持有。在發送完消息後,您可以作爲第二步查詢流程實例(http://docs.camunda.org/latest/api-references/rest/#process-instance-get-instances),其中包含變量與預期的標識符。 –

+0

我的回答是基於發送方使用Activiti的API來發送消息的假設。 –

相關問題