Activiti 5.3:子流程(subProcess)

Activiti 5.3提供了子流程的實現,包括兩種基於子流程的實現:

一種是內嵌子流程:子流程元素<subProcess>內嵌在主流程元素<process>之內,只能在該流程中使用該子流程,外部是無法訪問到的。這種子流程一般作爲局部通用邏輯處理,或者因爲特定業務需要,使得比較複雜的單個主流程設計清晰直觀;

另一種是調用子流程:首先實現一個流程,在另一個流程中可以調用該流程,通常可以定義一些通用的流程作爲這種調用子流程,供其他多個流程定義複用。這種子流程使用<callActivity>元素來進行調用,間接地嵌入到主流程中,用起來比較方便。

 

內嵌子流程

實現的基於內嵌子流程的流程,示例如圖所示:

 

對應的流程定義文件SubProcessTest.MySubprocess.bpmn20.xml,內容如下所示:

流程定義中,實現了3個TaskListener,對應的代碼分別如下所示:

測試用例,代碼如下所示:

運行結果信息,如下所示:

 

 

調用子流程

實現的子流程,示例如圖所示:

對應的流程定義文件Subprocess.Check.bpmn20.xml,如下所示:

上面的流程定義,和通常定義流程的方式是相同的。流程中,對應的JavaDelegate的實現類,代碼如下所示:

該BusinessCheck類簡單用來校驗用戶數據。

下面看一下主流程,如圖所示:

上面的callSubprocess結點對應的就是流程定義中的<callActivity>元素,調用了外部流程。對應的流程定義文件Subprocess.Mainprocess.bpmn20.xml,如下所示:

需要說明的是,對於主流程與子流程之間進行數據交換,需要在<callActivity>元素中進行配置,通過執行“傳入”、“傳出”變量的方式來進行。片段如下所示:

我們可以通過在主流程中設置一個變量爲varOutFromMainprocess,並指定對應的輸入數據,根據流程定義,會將變量varOutFromMainprocess對應的值,傳遞給子流程中的變量varInSubprocess,只需要在子流程中獲取變量varInSubprocess的值即可。從子流程中傳出數據的道理是類似的。上面實現了2個JavaDelegate處理類,代碼分別如下所示:

實現的測試用例,代碼如下所示:

 

 代碼中org.shirdrn.workflow.activiti.AbstractTest類可以參考:Activiti 5.3:流程活動自動與手工觸發執行裏面。上述測試程序運行結果如下所示:

 

發佈了73 篇原創文章 · 獲贊 19 · 訪問量 110萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章