发布时间:2025-12-10 19:25:16 浏览次数:5
activiti学习笔记——Sub-ProcessSub-ProcessSub-Process是包含activiti、gateway、event等的activity,自身是一个process,也是更大的process的一部分。Sub-Process完全定义在父process中,所以Sub-Process经常被称作嵌入式Sub-Process。Sub-Process有两个主要的用途:Sub-Process允许分层建模。许多建模工具允许分解…
Sub-ProcessSub-Process是包含activiti、gateway、event等的activity,自身是一个process,也是更大的process的一部分。
Sub-Process完全定义在父process中,所以Sub-Process经常被称作嵌入式Sub-Process。
Sub-Process有两个主要的用途:
Sub-Process允许分层建模。许多建模工具允许分解Sub-Process,隐藏Sub-Process的所有细节并显示业务流程的更高层次端到端概述。 Sub-Process为event创建新的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-ProcessEvent Sub-Process是BPMN 2.0中新出现的。
Event Sub-Process是由event触发的Sub-Process。
可以在process层级或Sub-Process层级添加。
用于触发Event Sub-Process的事件是使用start event配置的。由此可见,事件子流程不支持none start event。可以使用message event、error event、signal event、timer event或compensation event等事件触发Event Sub-Process。
在承载Event Sub-Process的scope(process instance或者Sub-Process)被创建时,start event的subscription被创建。当scope被销毁时,subscription将被删除。
Event Sub-Process可以是interrupting,也可以是non-interrupting。
interrupting Event Sub-Process取消当前scope内的任何execution。
non-interrupting Event Sub-Process生成一个新的并发execution。
对于承载Event Sub-Process的scope的每次激活,interrupting Sub-Process只触发一次,而non-interrupting Sub-Process可以触发多次。
Event Sub-Process是否interrupting是使用触发Event Sub-Process的start event来配置的。
Event Sub-Process不能有任何incoming或outgoing的sequence flow。由于Event Sub-Process是由event触发的,因此传入sequence flow没有意义。当Event Sub-Process结束时,要么当前scope结束(对于interrupting),要么non-interrupting Sub-Process派生的并发execution结束。
目前的限制:
Activiti只支持interrupting Sub-Process。 Activiti只支持使用error start event或message start event来触发Event Sub-Process。 <subProcess triggeredByEvent="true">...</subProcess> 是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…
如前所述,还可以将Event Sub-Process添加到embedded subprocess中。它将成为boundary event的替代。考虑以下两个流程图。在这两种情况下,embedded subprocess都会抛出一个error event,都是使用user task来捕获和处理。
在这两种情况下都执行相同的任务。然而,这两种模型选择之间存在差异:
embedded subprocess可以访问其作用域的局部变量。当使用boundary event时,为执行embedded subprocess而创建的execution会被离开boundary event的sequence flow删除。这意味着由embedded subprocess创建的变量不再可用。 当使用Event Sub-Process时,event完全由其所属的embedded subprocess处理。当使用boundary event时,event由父process处理。 这两个差异可以帮助您在解决特定的流程建模/实现问题时,确定boundary event或Event Sub-Process哪个更适合。