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
了解更多文章可以关注微信公众号:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值