Activiti 5.3:流程活動自動與手工觸發執行

Activiti 5.3支持流程活動自動執行與手工觸發執行。其中,自動執行是指,在啓動流程之前,準備流程所需要的控制流程進度的變量數據,啓動流程之後,無需外部干預,就能夠按照預定義的流程執行;手工觸發執行是指,執行到流程中某個個結點後流程暫時停止運行,直到收到外部發送的信號以後,纔會繼續向前推進,這樣情況可以更加精細地控制流程。

下面主要通過基於Activiti 5.3的<parallelGateway>、<serviceTask>、<receiveTask>、<userTask>元素來看一下。首先,我們在測試的過程中,用到JUnit 3.x,爲了方便,這裏給了一層封裝,代碼如下所示:

這裏面,主要是在測試之前做一些初始化工作,主要包括流程引擎實例的構建,及其流程提供的基本服務。下面測試會用到該抽象類。

自動執行

<serviceTask>元素,可以實現自動活動,語法如下所示:

其中,activiti:class屬性爲該結點對應的處理類,該類要求實現org.activiti.engine.delegate.JavaDelegate接口,該接口定義如下所示:

execute方法的參數DelegateExecution execution可以在流程中各個結點之間傳遞流程變量。

下面給出一個具體的例子:

自動執行的流程,如圖所示:

 

對應的流程定義文件爲GatewayTest.testAutomaticForkJoin.bpmn20.xml,如下所示:

上述流程定義中,一共定義了4個ServiceTask,模擬實現代碼如下所示:

 

測試代碼,如下所示:

只需要啓動一個流程實例,它會自動執行到結束。這種情況下,你不需要關注流程的執行進度,而只需要把精力集中在每個結點的處理邏輯(通常是簡單或者複雜的商業邏輯)上,運行結果如下所示:

  

手工觸發執行

通過<receiveTask>和<userTask>元素都可以實現流程的手工觸發執行。

基於<receiveTask>

實現的流程,如圖所示:

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

上述流程定義中,對應的兩個處理類,代碼分別如下所示:

 

上面還用到一個org.shirdrn.workflow.activiti.subprocess.Merchant類,該類必須支持序列化,如下所示: 

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

 

運行結果如下所示:

基於<userTask>

實現的流程,如圖所示:

對應的流程定義文件,如下所示:

  

我們看一下上述定義中,如下配置片段:

<activiti:taskListener>元素的event屬性,它一共包含三種事件:"create"、"assignment"、"complete",分別表示結點執行處理邏輯的時機爲:在處理類實例化時、在結點處理邏輯被指派時、在結點處理邏輯執行完成時,可以根據自己的需要進行指定。

上述流程定義中,4個任務結點對應的處理類,代碼分別如下所示:

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

運行結果如下所示:

 

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