2017-10-08 217 views
1

我試圖建立一個流程,其中兩個檢查並行運行,並且當它們都成功時流程繼續。否則(如果它們中的任何一個失敗)過程應該被終止,而不等待另一個的結果。下圖是否正確?並行網關和專用網關組合

BPMN diagram

此外,如果之後的任何檢查失敗,我想有一個單一的流動,這將是推薦的方式來建模呢?

P.S.我不能在模型中使用子進程或複雜網關。如果有任何具體的建議,我將在Activiti中實施該模型。

回答

1

您的過程模型是正確的,因爲您正在使用終止事件如果令牌達到終止結束事件,整個過程異常終止BPMN specification, page 436; page 456 in PDF

現在你另一個問題:另外,如果之後的任何失敗的檢查,我想有一個單一的流動,會是什麼我假設你要觸發的具體處理流程第一次無論是檢查失敗。 如果你想通過做這個「基本」的元素而已,你需要推薦的方式來建模呢?

以實現一些低級邏輯,例如隨每次失敗檢查而增加的計數器和一個網關anages基於此計數器的值的流程:

enter image description here

不過,我建議你不使用這種變通辦法來管理併發。在上面的例子中,至少理論上可能的是,兩個增加拒絕計數器活動執行之前任一令牌達到拒絕計數器== 1?網關。

相反,我建議使用Activiti實際支持的子進程(請參閱Activiti docs)。

只要其中一個檢查失敗或者兩個檢查都通過,子進程就會終止。主進程決定是否發送確認或基於子流程的結果是否處理失敗(我的圖假設子處理結果寫入一個變量主進程可以訪問):

enter image description here

像這樣,您讓BPMN(分別是:Activiti)在併發性方面做了大量工作,並且您可以專注於業務邏輯方面。

注意:作爲處理檢查結果的專用網關的替代方法,您可以使用附加的錯誤事件(Activiti supports error events as well)。但是,我認爲您不會考慮檢查技術錯誤,而是您的流程業務邏輯的替代路徑。