activiti学习笔记——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
是包含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-Process
Event 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 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 event
的sequence flow
删除。这意味着由embedded subprocess
创建的变量不再可用。- 当使用
Event Sub-Process
时,event
完全由其所属的embedded subprocess
处理。当使用boundary event
时,event
由父process
处理。
这两个差异可以帮助您在解决特定的流程建模/实现问题时,确定boundary event
或Event Sub-Process
哪个更适合。
更多推荐
所有评论(0)