Activity子流程——調用子流程

       BPMN2.0區分一般的子流程,通常也稱作嵌入式子流程,與調用活動,儘管他們看起來很像。從概念上說,兩者都在流程執行到達該活動時,調用一個子流程。區別在於:調用活動引用一個流程定義外部的流程,而subprocess嵌入在原有流程定義內。調用活動的主要使用場景,是它有一個可重複使用的流程定義,可以在多個其他流程定義中調用。

       當流程執行到大call activity時,會創建一個新的執行,作爲達到調用活動的執行的子執行。這個子執行之後用於執行子流程,潛在地創建了類似普通流程的並行子執行。父執行將等待子流程完成,之後沿原流程繼續執行。

        調用活動是一個普通活動,需要有通過key引用流程定義的calledElement。在實際使用中,這通常意味着在calledElement中使用流程的id。

下面我們通過一個demo來驗證調用子流程的執行過程:

1、首先創建兩個流程:主流程master、子流程sub,主流程調用子流程(調用節點called Element填寫子流程的id)

  <process id="myProcess" isClosed="false" isExecutable="true" processType="None">
    <startEvent id="start" name="開始"/>
    <userTask activiti:exclusive="true" id="commit" name="提交"/>
    <callActivity activiti:exclusive="true" calledElement="subProcess" id="callsub" name="調用子流程"/>
    <userTask activiti:exclusive="true" id="check" name="審覈"/>
    <endEvent id="end" name="結束"/>
    <sequenceFlow id="_7" sourceRef="commit" targetRef="callsub"/>
    <sequenceFlow id="_8" sourceRef="callsub" targetRef="check"/>
    <sequenceFlow id="_9" sourceRef="check" targetRef="end"/>
    <sequenceFlow id="_10" sourceRef="start" targetRef="commit"/>
  </process>

 

2、部署主流程、子流程後,啓動主流程查看流程實例表、流程執行表、當前任務表

 

 

 

3、提交當前任務,再次查看這3張表

可以看到,主流程走到調用節點,自動啓動子流程,爲其創建一個執行流。

4、子流程結束後,再次查看這3張表

可以看到子流程實例結束,回到主流程繼續執行。

 

調用子流程傳遞參數

      由於調用式的子流程是獨立定義在一個流程文件中的,因此當執行流到達調用式子流程時,會創建新的流程實例。RuntimeService的setVariable等方法設置流程參數,這些流程參數的作用域只限於所設置的執行流,對於調用式子流程這種會產生新的流程實例的“特殊情況”,就需要使用另外的方式解決。Activiti提供了擴展配置,允許流程參數在主流程和子流程中傳遞。這塊我暫時還沒有嘗試,後期嘗試驗證下再補充上

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章