目录

  • 定义
  • 图形标记
  • XML内容
  • 界面操作
  • 使用示例
  • 子流程设计
  • 子流程的XML内容
  • 主流程设计
  • 主流程的XML内容
  • 视频教程


定义

调用活动是在一个流程定义中调用另一个独立的流程定义,通常可以定义一些通用的流程作为
这种调用子流程,供其他多个流程定义复用。这种子流程使用 callActivity 元素来进行调用,很方
便地嵌入到主流程中,用起来比较方便。

图形标记

调用活动显示为标准的节点,它是一个圆角矩形,不过是粗边框,如图所示。

Flowable-子流程-调用活动_开发语言

XML内容

调用活动的 XML 定义如下:

<callActivity id="Activity_1q7t28e" name="贷款额度审批" calledElement="ApproveLoanSubProcess" flowable:inheritVariables="true" flowable:processInstanceName="贷款额度审批" flowable:calledElementType="key">
    <extensionElements>
        <flowable:assigneeType>static</flowable:assigneeType>
        <flowable:formData />
        <flowable:modelBpmnExtension>[{"id":"8c7aefbf087f4d680fc36b871d77c967","modelId":"1252465dd6e511eda69100ff2cb2ed0e","modelKey":"ApproveLoanSubProcess","name":"贷款额度审批","appSn":"businessFlow","appName":"财务流程","categoryCode":"zshjt","categoryName":"中石化集团","status":3,"statusName":"已发布"}]</flowable:modelBpmnExtension>
    </extensionElements>
</callActivity>

调用活动是一个普通活动,需要通过 calledElement 属性引用被调用的外部流程定义的 key。调
用活动可以向子流程传递与接收流程变量:①使用 flowable:in 标签定义父流程变量传入到子流程流
程变量的映射,在子流程启动时复制到子流程;②使用用 flowable:out 标签定义子流程变量回传到父
流程变量的映射,在其结束时复制回主流程。调用活动的拓展属性如表所示:

属性名称

属性说明

示例

calledElement

被调用流程的 key,对应的流程定义应独立存在

<callActivity calledElement="testProcessDefinitonKey">

businessKey

子流程的 businessKey,可以使用表达式

<callActivity flowable:businessKey="subProcessBusinessKey">

inheritBusinessKey

值为 true 时子流程复用父流程的 businessKey,该属性在businessKey 属性没有配置时才生效

<callActivity flowable:inheritVariables="true">

inheritVariables

值为 true 时将父流程所有流程变量传递给子流程

<callActivity flowable:inheritVariables="true">

flowable:in

将父流程的流程变量传入子流程(父流程变量必须事先定义,否则将不能获取)

<flowable:in source="someVariableInMainProcess" target="nameOfVariableInSubProcess"></flowable:in>,source:主流程中的变量名称,可以使用表达式;target:在将主流程变量传递给子流程中变量的名称,一般和 sourse 同名避免错误的出现

flowable:out

调用活动执行完成后的结果

<flowable:out source="someVariableInSubProcss"target="nameOfVariableInMainProcess"></flowable:out>,source:子流程中的变量名称,可以使用表达式;target:在将子流程变量传递给父流程中变量的名称,一般和 source 同名避免错误的出现

由于主子流程是不同的实例,因此无法通过主流程的 key 查询子流程的任务,在查询子任务时需要使用子流程的 key 来进行查询。

界面操作

Flowable-子流程-调用活动_java_02

使用示例

子流程设计

子流程如图所示,子流程发起后首先进入“审批贷款额度”用户任务节点,审批完成后
由分支网关进行分支决策:贷款额度小于 100w 流程直接结束;贷款额度大于 100w 进入“复核贷
款额度”用户任务节点,审批完成后流程结束。

Flowable-子流程-调用活动_开发语言_03

子流程的XML内容

<process id="ApproveLoanSubProcess" name="子流程-调用活动-审批贷款子流程" isExecutable="true">
    <startEvent id="ab7ef4cb0c5e6455ab4406613fb6b198f" />
    <userTask id="a43f40e7a7d60446585661ed8b2232732" name="审批贷款额度">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="a75d9acf085184bc5b49fcbb29a7768e9" sourceRef="ab7ef4cb0c5e6455ab4406613fb6b198f" targetRef="a43f40e7a7d60446585661ed8b2232732" />
    <exclusiveGateway id="Gateway_09287wv" default="Flow_0nh3xov" />
    <sequenceFlow id="Flow_1yaqka8" sourceRef="a43f40e7a7d60446585661ed8b2232732" targetRef="Gateway_09287wv" />
    <userTask id="Activity_1pxhie8" name="复核贷款额度">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="Flow_0nh3xov" name="额度">>100万元" sourceRef="Gateway_09287wv" targetRef="Activity_1pxhie8" />
    <endEvent id="Event_1cgk4gr" />
    <sequenceFlow id="Flow_1wdrb0h" name="额度<=100万元" sourceRef="Gateway_09287wv" targetRef="Event_1cgk4gr">
      <conditionExpression xsi:type="tFormalExpression">${loanAmount<=1000000}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="Flow_1c8sxxy" sourceRef="Activity_1pxhie8" targetRef="Event_1cgk4gr" />
  </process>

主流程设计

主流程如图所示,主流程发起后进入“贷款申请”用户任务节点,提交后进入“贷款额
度审批”调用活动节点,父流程进入等待状态,启动并执行上述子流程,子流程结束后父流程继续
执行,进入“发放贷款”用户任务节点,办理完成后流程结束。

Flowable-子流程-调用活动_流程引擎_04

主流程的XML内容

<process id="CallActivitySubprocessTest" name="子流程-调用活动" isExecutable="true">
    <startEvent id="a3d0c6c7163c5499cb41510c83ba21645" />
    <userTask id="a8c6f47b1424b4115ba9f66434f10529e" name="贷款申请">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="a9b2a0637bfa449e29959c2b21d476125" sourceRef="a3d0c6c7163c5499cb41510c83ba21645" targetRef="a8c6f47b1424b4115ba9f66434f10529e" />
    <sequenceFlow id="Flow_14yhbzw" sourceRef="a8c6f47b1424b4115ba9f66434f10529e" targetRef="Activity_1q7t28e" />
    <callActivity id="Activity_1q7t28e" name="贷款额度审批" calledElement="ApproveLoanSubProcess" flowable:inheritVariables="true" flowable:processInstanceName="贷款额度审批" flowable:calledElementType="key">
      <extensionElements>
        <flowable:assigneeType>static</flowable:assigneeType>
        <flowable:formData />
        <flowable:modelBpmnExtension>[{"id":"8c7aefbf087f4d680fc36b871d77c967","modelId":"1252465dd6e511eda69100ff2cb2ed0e","modelKey":"ApproveLoanSubProcess","name":"贷款额度审批","appSn":"businessFlow","appName":"财务流程","categoryCode":"zshjt","categoryName":"中石化集团","status":3,"statusName":"已发布"}]</flowable:modelBpmnExtension>
      </extensionElements>
    </callActivity>
    <endEvent id="Event_16u42q4" />
    <userTask id="Activity_0olujzk" name="发放贷款">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="Flow_1dqsl2g" sourceRef="Activity_1q7t28e" targetRef="Activity_0olujzk" />
    <sequenceFlow id="Flow_0n0kqrn" sourceRef="Activity_0olujzk" targetRef="Event_16u42q4" />
  </process>

视频教程

调用活动