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插件,没有找到边界事件的控件,我没有试,有了解的朋友可以告诉我下,后期我再尝试。

 

 

 

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