Activity子流程——嵌入式流程

         子流程時包含其他的活動、網關、事件等的活動。其本身構成一個流程,並作爲更大流程的一部分。子流程完全在父流程中定義(這就時爲什麼經常被稱作嵌入式子流程)。

子流程有兩個主要的使用場景:

  • 子流程可以分層建模。很多建模工具都可以摺疊子流程,隱藏子流程的所有細節,而只顯示業務流程的高層端到端總覽。
  • 子流程創建了新的事件範圍。在子流程執行中拋出的事件,可以通過子流程邊界上的邊界事件捕獲。因此爲該事件創建了限制在子流程內的範圍。

使用子流程也要注意以下幾點:

  • 子流程只能有一個空啓動事件,而不允許有其他類型的啓動事件。請注意BPMN2.0規範允許省略子流程的啓動與結束事件,然而當前的Activiti實現並不支持省略。
  • 順序流不能跨子流程邊界。

子流程標識爲標準活動,即圓角矩形。若摺疊了子流程,則只顯示其名字與一個加號,提供了流程的高層概覽:

若展開了子流程,則子流程的所有步驟都在流程邊界內顯示:

使用子流程的一個主要原因,是爲特定事件定義範圍,下面我們使用一個demo驗證下:

1、創建子流程

其對應的xml如下:

  <process id="myProcess_1" isClosed="false" isExecutable="true" processType="None">
    <startEvent id="start" name="開始"/>
    <userTask activiti:exclusive="true" id="commit" name="提交"/>
    <subProcess activiti:exclusive="true" id="_4" name="SubProcess" triggeredByEvent="false">
      <startEvent id="subStart" name="子開始"/>
      <userTask activiti:exclusive="true" id="subCommit" name="子提交"/>
      <endEvent id="subEnd" name="子結束"/>
      <sequenceFlow id="_15" sourceRef="subStart" targetRef="subCommit"/>
      <userTask activiti:exclusive="true" id="subCheck" name="子審覈"/>
      <sequenceFlow id="_18" sourceRef="subCommit" targetRef="subCheck"/>
      <sequenceFlow id="_19" sourceRef="subCheck" targetRef="subEnd"/>
    </subProcess>
    <userTask activiti:exclusive="true" id="check" name="審覈"/>
    <endEvent id="end" name="結束"/>
    <sequenceFlow id="_11" sourceRef="start" targetRef="commit"/>
    <sequenceFlow id="_12" sourceRef="commit" targetRef="_4"/>
    <sequenceFlow id="_13" sourceRef="_4" targetRef="check"/>
    <sequenceFlow id="_14" sourceRef="check" targetRef="end"/>
  </process>

 

2、啓動流程,查看當前任務表act_run_task,當前任務爲“提交”:

3、查看流程實例表、流程運行表:

4、完成當前任務,流程繼續往下走,再次查看當前任務表,可以看到子流程自動啓動

5、查看流程實例表、流程運行表,生成了兩個執行流:主流程、子流程。

 

PS: 流程邊界事件這塊,因爲idea提供的bpmn插件,沒有找到邊界事件的控件,我沒有試,有了解的朋友可以告訴我下,後期我再嘗試。

 

 

 

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