Flowable入门系列文章59 - 事件子流程
Posted 分享牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章59 - 事件子流程相关的知识,希望对你有一定的参考价值。
1、描述
事件子流程在BPMN 2.0中是新的。事件子流程是由事件触发的子流程。事件子流程可以在流程级别或任何子流程级别添加。用于触发事件子流程的事件使用开始事件进行配置。由此可见,事件子过程不支持任何启动事件。事件子进程可能使用事件触发,如消息事件,错误事件,信号事件,计时器事件或补偿事件。启动事件的订阅是在托管事件子流程的范围(流程实例或子流程)创建时创建的。当范围被销毁时,订阅被删除。
事件子进程可能是中断或不中断的。中断子进程取消当前作用域中的任何执行。一个不中断的事件子进程产生一个新的并发执行。虽然中断事件子进程只能在托管它的作用域的每次激活时触发一次,但是可以多次触发不中断的事件子进程。子进程是否中断的事实是使用触发事件子进程的开始事件来配置的。
事件子流程不能有任何流入或流出的流程。作为一个事件子进程是由一个事件触发的,传入的顺序流是没有意义的。当事件子过程结束时,当前范围结束(如果中断事件子过程),或者为非中断子过程产生的并行执行结束。
目前的限制:
- 使用错误,定时器,信号和消息启动事件触发流动支持事件子流程。
2、图形表示法
一个事件子过程可以被视为一个带有虚线轮廓的嵌入子过程。
3、XML表示
事件子流程使用XML来表示,就像嵌入式子流程一样。另外该属性triggeredByEvent必须具有以下值true:
<subProcess id="eventSubProcess" triggeredByEvent="true">
...
</subProcess>
例如
以下是使用错误启动事件触发的事件子流程的示例。事件子进程位于“进程级别”,换句话说,是作用于进程实例的:
这是事件子过程在XML中的外观:
<subProcess id="eventSubProcess" triggeredByEvent="true">
<startEvent id="catchError">
<errorEventDefinition errorRef="error" />
</startEvent>
<sequenceFlow id="flow2" sourceRef="catchError" targetRef="taskAfterErrorCatch" />
<userTask id="taskAfterErrorCatch" name="Provide additional data" />
</subProcess>
如前所述,事件子进程也可以添加到嵌入式子进程中。如果将其添加到嵌入式子流程中,则它将成为边界事件的替代方案。考虑以下两个流程图。在这两种情况下,嵌入式子进程都会引发一个错误事件。这两个错误都是通过用户任务来捕获和处理的。
而不是:
在这两种情况下,执行相同的任务。但是,两种建模方法之间还是有区别的:
- 嵌入式子进程使用执行其所在范围的相同执行来执行。这意味着嵌入式子进程可以访问其范围本地的变量。当使用边界事件时,为执行嵌入式子过程而创建的执行被离开边界事件的序列流删除。这意味着由嵌入式子进程创建的变量不再可用。
- 当使用事件子过程时,事件完全由其被添加到的子过程处理。使用边界事件时,事件由父进程处理。
这两个差异可以帮助您决定边界事件还是嵌入式子流程更适合解决特定的流程建模或实施问题。
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
以上是关于Flowable入门系列文章59 - 事件子流程的主要内容,如果未能解决你的问题,请参考以下文章
Flowable入门系列文章30 - Activity解读 06