Sub-Process

Sub-Process是包含activitigatewayevent等的activity,自身是一个process,也是更大的process的一部分。

Sub-Process完全定义在父process中,所以Sub-Process经常被称作嵌入式Sub-Process

Sub-Process有两个主要的用途:

  • Sub-Process允许分层建模。许多建模工具允许分解Sub-Process,隐藏Sub-Process的所有细节并显示业务流程的更高层次端到端概述。
  • Sub-Processevent创建新的scope。在Sub-Process执行期间抛出的event可以由Sub-Process边界上的boundary event捕获,从而为该event创建一个scope,该scope仅限于该Sub-Process

Sub-Process约束:

  • Sub-Process只能有一个none start event,不允许有其他启动事件类型。Sub-Process必须至少有一个end event。注意,BPMN 2.0规范允许省略Sub-Process中的start and end event,但是当前的Activiti实现不支持这一点。
  • sequence flow不能跨越Sub-Process边界。

Event Sub-Process

Event Sub-ProcessBPMN 2.0中新出现的。
Event Sub-Process是由event触发的Sub-Process
可以在process层级或Sub-Process层级添加。
用于触发Event Sub-Process的事件是使用start event配置的。由此可见,事件子流程不支持none start event。可以使用message eventerror eventsignal eventtimer eventcompensation event等事件触发Event Sub-Process
在承载Event Sub-Processscope(process instance或者Sub-Process)被创建时,start eventsubscription被创建。当scope被销毁时,subscription将被删除。

Event Sub-Process可以是interrupting,也可以是non-interrupting
interrupting Event Sub-Process取消当前scope内的任何execution
non-interrupting Event Sub-Process生成一个新的并发execution
对于承载Event Sub-Processscope的每次激活,interrupting Sub-Process只触发一次,而non-interrupting Sub-Process可以触发多次。
Event Sub-Process是否interrupting是使用触发Event Sub-Processstart event来配置的。

Event Sub-Process不能有任何incomingoutgoingsequence flow。由于Event Sub-Process是由event触发的,因此传入sequence flow没有意义。当Event Sub-Process结束时,要么当前scope结束(对于interrupting),要么non-interrupting Sub-Process派生的并发execution结束。

目前的限制:

  • Activiti只支持interrupting Sub-Process
  • Activiti只支持使用error start eventmessage start event来触发Event Sub-Process
<subProcess id="eventSubProcess" triggeredByEvent="true">
	...
</subProcess>

如前所述,还可以将Event Sub-Process添加到embedded subprocess中。它将成为boundary event的替代。考虑以下两个流程图。在这两种情况下,embedded subprocess都会抛出一个error event,都是使用user task来捕获和处理。
在这里插入图片描述
在这里插入图片描述
在这两种情况下都执行相同的任务。然而,这两种模型选择之间存在差异:

  • embedded subprocess可以访问其作用域的局部变量。当使用boundary event时,为执行embedded subprocess而创建的execution会被离开boundary eventsequence flow删除。这意味着由embedded subprocess创建的变量不再可用。
  • 当使用Event Sub-Process时,event完全由其所属的embedded subprocess处理。当使用boundary event时,event由父process处理。

这两个差异可以帮助您在解决特定的流程建模/实现问题时,确定boundary eventEvent Sub-Process哪个更适合。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐