Flowable入门系列文章61 - 呼叫活动(子流程)
Posted 分享牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章61 - 呼叫活动(子流程)相关的知识,希望对你有一定的参考价值。
1、描述
BPMN 2.0在经常被称为嵌入式子过程的常规子过程和看起来非常相似的调用活动之间作了区分。从概念的角度来看,流程执行到达活动时,都会调用一个子流程。
区别在于调用活动引用流程定义外部的流程,而子流程嵌入在原始流程定义中。调用活动的主要用例是具有可从多个其他流程定义调用的可重用流程定义。
当进程执行到达该调用活动时,将创建一个新的执行,该执行是到达该调用活动的执行的子执行。这个子执行然后用来执行子进程,可能创建并行的子执行,就像在一个常规进程中一样。超级执行等待子进程完全结束,然后继续原来的进程。
2、图形表示法
呼叫活动以与子流程相同的方式可视化,但具有较厚的边框(折叠和展开)。根据建模工具,还可以扩展调用活动,但默认可视化是折叠的
子流程表示。
3、XML表示
一个调用活动是一个常规活动,它需要一个通过其关键字引用流程定义的被调用的元素。实际上,这意味着进程的ID在被调用的元素中被使
用。
<callActivity id="callCheckCreditProcess" name="Check credit" calledElement="checkCreditProcess" />
请注意,子进程的进程定义在运行时被解析。这意味着如果需要的话,子流程可以独立于调用流程进行部署。
4、传递变量
您可以将流程变量传递给子流程,反之亦然。数据在启动时被复制到子进程中,并在结束时被复制回主进程。
<callActivity id="callSubProcess" calledElement="checkCreditProcess">
<extensionElements>
<flowable:in source="someVariableInMainProcess"
target="nameOfVariableInSubProcess" />
<flowable:out source="someVariableInSubProcess"
target="nameOfVariableInMainProcess" />
</extensionElements>
</callActivity>
您可以通过将选项设置inheritVariables为true 来将所有流程变量传递给子流程。
<callActivity id="callSubProcess" calledElement="checkCreditProcess" flowable:inheritVariables="true"/>
我们提供了一个Flowable扩展,作为BPMN标准元素(命名为ataInputAssociation和dataOutputAssociation)的快捷方式,只有在以BPMN
2.0标准方式声明过程变量时才有效。
这里也可以使用表达式:
<callActivity id="callSubProcess" calledElement="checkCreditProcess" >
<extensionElements>
<flowable:in sourceExpression="$x+5" target="y" />
<flowable:out source="$y+5" target="z" />
</extensionElements>
</callActivity>
那么,最后z = y + 5 = x + 5 + 5。
callActivity元素还支持使用自定义Flowable属性扩展在子流程实例上设置业务键。该的businessKey属性可以用来设置子流程实例的定制业务键值。
<callActivity id =“callSubProcess”calledElement =“checkCreditProcess”flowable:businessKey =“$ myVariable”>
...
</ callActivity>
定义值为的inheritBusinessKey属性true会将子流程的业务键值设置为调用流程中定义的业务键的值。
<callActivity id =“callSubProcess”calledElement =“checkCreditProcess”flowable:inheritBusinessKey =“true”>
...
</ callActivity>
例
以下流程图显示了订单的简单处理。由于许多其他流程对客户信用的检查可能是共同的,因此检查信用步骤在此被建模为呼叫活动。
该过程如下所示:
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="receiveOrder" />
<manualTask id="receiveOrder" name="Receive Order" />
<sequenceFlow id="flow2" sourceRef="receiveOrder" targetRef="callCheckCreditProcess" />
<callActivity id="callCheckCreditProcess" name="Check credit" calledElement="checkCreditProcess" />
<sequenceFlow id="flow3" sourceRef="callCheckCreditProcess" targetRef="prepareAndShipTask" />
<userTask id="prepareAndShipTask" name="Prepare and Ship" />
<sequenceFlow id="flow4" sourceRef="prepareAndShipTask" targetRef="end" />
<endEvent id="end" />
子流程如下所示:
子流程的流程定义没有什么特别之处。它也可以被使用,而不被另一个进程调用。
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
以上是关于Flowable入门系列文章61 - 呼叫活动(子流程)的主要内容,如果未能解决你的问题,请参考以下文章
Flowable入门系列文章31 - Activity解读 07