Flowable-子流程-调用活动

该文章已生成可运行项目,

✨✨✨ 最好用的Flowable流程设计器


定义

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

图形标记

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

在这里插入图片描述

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 来进行查询。

界面操作

在这里插入图片描述

使用示例

子流程设计

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

在这里插入图片描述

子流程的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="额度&#62;100万元" sourceRef="Gateway_09287wv" targetRef="Activity_1pxhie8" />
    <endEvent id="Event_1cgk4gr" />
    <sequenceFlow id="Flow_1wdrb0h" name="额度&#60;=100万元" sourceRef="Gateway_09287wv" targetRef="Event_1cgk4gr">
      <conditionExpression xsi:type="tFormalExpression">${loanAmount&lt;=1000000}</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="Flow_1c8sxxy" sourceRef="Activity_1pxhie8" targetRef="Event_1cgk4gr" />
  </process>
主流程设计

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

在这里插入图片描述

主流程的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>

视频教程

调用活动

演示demo

调用活动-主流程

调用活动-子流程

本文中内容和案例出自贺波老师的书《深入Activiti流程引擎:核心原理与高阶实战》,书中的介绍更全面、详细,推荐给大家。
深入Activiti流程引擎

本文章已经生成可运行项目
<think>好的,我现在要解决用户的问题:如何在Flowable中配置流程。首先,我需要回忆一下Flowable的基本概念和流程的相关知识。根据用户提供的引用内容,特别是引用[3]中提到流程定义是BPMN 2.0格式的XML标准,所以流程的配置也应该遵循这个标准。 首先,流程在BPMN中通常分为嵌入式流程调用流程。嵌入式流程完全包含在父流程定义中,而调用流程则是引用外部的流程定义。用户可能需要了解这两种类型的配置方法。 接下来,我需要检查用户提供的引用是否有关于流程的具体信息。引用[3]和[4]主要讨论了流程定义和实例的基本概念,以及启动流程时的输入信息处理,但没有直接提到流程。不过,根据BPMN的知识,流程的配置通常涉及在父流程的XML中添加相应的流程元素,比如<subProcess>标签或者<callActivity>标签。 嵌入式流程的配置可能需要在父流程的XML中定义一个<subProcess>节点,包含流程的所有元素。而调用流程则需要使用<callActivity>,并通过calledElement属性引用另一个流程定义的ID。例如,引用[3]中提到流程实例是流程定义的实例化,所以调用流程需要另一个流程定义的存在。 然后,我需要考虑如何将这些步骤具体化,可能需要给出一个简单的XML示例,说明如何在父流程中嵌入流程调用外部流程。同时,可能需要提到在Flowable Modeler中如何通过图形界面拖放流程组件,并配置其属性,比如引用[2]中的ApplicationConfiguration.java可能涉及UI配置,但用户可能更关注实际操作步骤。 另外,用户可能遇到的问题包括流程的变量传递和边界事件处理。例如,流程是否可以访问父流程的变量,或者是否需要显式地传递参数。根据Flowable的文档,变量默认在同一个流程实例中共享,但调用流程可能需要参数映射。 最后,需要验证这些步骤是否符合用户提供的引用内容,比如流程定义的BPMN 2.0标准,以及流程实例的创建方式。确保回答中的XML示例符合规范,并指导用户如何在Flowable中实际应用这些配置。</think>在Flowable中配置流程主要分为**嵌入式流程**和**调用流程**两类,均通过BPMN 2.0 XML实现。以下是具体配置方法: --- ### 一、嵌入式流程配置 嵌入式流程完全包含在父流程定义文件中,适合逻辑紧密关联的场景。 **XML配置示例:** ```xml <process id="parentProcess"> <startEvent id="start"/> <subProcess id="subProcess1"> <startEvent id="subStart"/> <userTask id="subTask" name="流程任务"/> <endEvent id="subEnd"/> <!-- 连接线 --> <sequenceFlow sourceRef="subStart" targetRef="subTask"/> <sequenceFlow sourceRef="subTask" targetRef="subEnd"/> </subProcess> <endEvent id="end"/> <!-- 连接线 --> <sequenceFlow sourceRef="start" targetRef="subProcess1"/> <sequenceFlow sourceRef="subProcess1" targetRef="end"/> </process> ``` - **特点**:流程与父流程共享变量,无需单独部署[^3]。 --- ### 二、调用流程配置 通过`<callActivity>`调用外部独立部署的流程,适合模块化复用。 **XML配置示例:** ```xml <process id="mainProcess"> <startEvent id="start"/> <callActivity id="callSubProcess" calledElement="childProcess"/> <endEvent id="end"/> <sequenceFlow sourceRef="start" targetRef="callSubProcess"/> <sequenceFlow sourceRef="callSubProcess" targetRef="end"/> </process> ``` - **关键属性**:`calledElement`指向流程的`id`,需确保流程已部署。 - **变量传递**:通过`in`和`out`参数映射: ```xml <callActivity ... > <extensionElements> <flowable:in source="parentVar" target="childVar"/> <flowable:out source="childResult" target="parentResult"/> </extensionElements> </callActivity> ``` --- ### 三、通过Flowable Modeler配置(图形界面) 1. 打开Flowable Modeler,拖拽**流程组件**(SubProcess或CallActivity)到画布 2. 右键选择属性: - 嵌入式流程:直接添加内部节点 - 调用流程:在`Called element`字段填写流程ID 3. 配置变量映射(调用流程需要) --- ### 四、边界事件处理 流程支持附加**边界事件**(如超时中断): ```xml <subProcess id="subProcess1"> <boundaryEvent id="timeout" attachedToRef="subProcess1"> <timerEventDefinition> <timeDuration>PT1H</timeDuration> </timerEventDefinition> </boundaryEvent> </subProcess> ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值