2016-02-03 65 views
4

我需要用叉子過程中有兩個路徑:如何使用Camunda /活動BPMN按事件分叉並殺死分支?

  1. 與用戶任務路徑

  2. 與服務任務路徑

see the process picture

過程中必須移動到MoreTasks如果ServiceTask在不等待用戶對UserTask的反應的情況下完成計算。

我怎樣才能全自動完整UserTask ServiceTask完成沒有關於java編碼後(僅使用camunda BPMN符號)?

我已經嘗試過使用信號事件,它工作,但信號影響所有過程實例。我嘗試使用消息事件,但UserTask沒有收到它,可能是因爲我沒有任何消息過程...

回答

0

我曾經有類似的要求,但我沒有沒有在java上編碼約束,我不得不作出這樣的解決方法,使其工作:

  • 我創建了一個服務任務,在JAVA
  • 發展在我的服務任務,我做了一個任務查詢來獲取來自其他任務分支
  • 推出新線程強制任務完成(經過一段延遲)

它不乾淨,但它工作正常,我的客戶對結果感到滿意。

1

好的,所以這是Camunda刪除Activiti引擎中的一個用戶功能的相當罕見的場合之一。 在Activiti中,可能(在BPMN內部)定義信號是全局拋出(默認)還是隻拋出當前流程實例。雖然這可能不符合BPMN規範,但它對於您的場景非常有用。

不幸的是,你不能在Camunda做到這一點。 現在,如果你不介意在任務聽衆寫一個小Groovy腳本,可以將信號訂閱限定爲僅由當前進程中拋出的信號:

RuntimeService.signalEventReceived(String signalName, String executionId); 

參考Camunda文檔的更多細節。

如果這仍然沒有問題,那麼我建議您將用戶和服務任務包裝在嵌入式子流程中,並在服務任務後立即拋出異常事件。

現在,在嵌入式子進程上附加一個Error Boundary事件處理程序。

enter image description here

像這樣(圖是從文檔),但沒有或網關。

當你的服務任務完成時,它會拋出一個錯誤事件,這個事件會冒泡到邊界監聽器並關閉嵌入式子進程中的所有任務。

希望這會有所幫助。

+0

只是爲了澄清:該功能並沒有在Camunda中刪除,它可能在我們分叉後在Activiti中實現。 (我很確定,因爲我最初在fork之前爲activiti提供了信號支持,而這個功能不是它的一部分)。是的,它不符合信號總是在全球引發的BPMN。但是這個功能似乎很有用,而且應該非常直接的實現。我在Camunda Jira中爲它創建了一個問題:https://app.camunda.com/jira/browse/CAM-5378 – meyerdan

+0

太棒了,謝謝Daniel。 –