注意:以下的代码和例子是建立在前面的SpringBoot项目整合Flowableflowable实战

调用活动(Call Activity)将参数传递给子流程(Sub Process)

调用活动(Call Activity)有一个属性:在子流程中继承变量
在这里插入图片描述

不同的用户任务获取不同的参数

这里的任务节点【测试用户任务】和【测试用户任务Two】都定义了2个监听器。
【测试用户任务】节点:设置执行监听器CommonExecutionListener用于添加参数,设置任务监听器CommonTaskListener用于获取参数。
delegateExecution.setVariable(“date”, “2022-12-28”); //date参数另一个任务节点的任务监听器可以获取到
delegateExecution.setVariableLocal(“subject”, “english”);//subject参数另一个任务节点的任务监听器无法获取
【测试用户任务Two】节点:设置执行监听器CommonExecutionListenerTwo用于添加参数,设置任务监听器CommonTaskListenerTwo用于获取参数。
在这里插入图片描述

代码
(1)CommonStartExecutionListener
@Component("commonStartExecutionListener")
public class CommonStartExecutionListener implements ExecutionListener {

    @Override
    public void notify(DelegateExecution delegateExecution) {
        System.out.println("CommonStartExecutionListener start");
        Map<String, Object> variables = delegateExecution.getVariables();
        System.out.println("CommonStartExecutionListener variables is:" + variables);
        variables.put("commonStartExecutionListener", "CommonStartExecutionListener");
        delegateExecution.setVariables(variables);

    }
}
(2)CallActivityStartExecutionListener
package gdut.listener;

import gdut.constant.FlowableParameterKeyConstants;
import gdut.util.ExecutionSubTask;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component("callActivityStartExecutionListener")
public class CallActivityStartExecutionListener implements ExecutionListener {

    @Autowired
    private ExecutionSubTask executionSubTask;

    @Autowired
    private RuntimeService runtimeService;

    @Override
    public void notify(DelegateExecution delegateExecution) {
        System.out.println("CallActivityStartExecutionListener start");
        Map<String, Object> variables = delegateExecution.getVariables();
        System.out.println("CallActivityStartExecutionListener variables is:" + variables);
        variables.put("callActivityStartExecutionListener", "CallActivityStartExecutionListener");
        delegateExecution.setVariables(variables);
    }
}
(3)SubProcessExecutionListener
package gdut.listener;

import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component("subProcessExecutionListener")
public class SubProcessExecutionListener implements ExecutionListener {

    @Override
    public void notify(DelegateExecution delegateExecution) {
        System.out.println("SubProcessExecutionListener start");
        Map<String, Object> parentVariables = delegateExecution.getParent().getVariables();
        System.out.println("SubProcessExecutionListener parentVariables is:" + parentVariables);

        Map<String, Object> variables = delegateExecution.getVariables();
        System.out.println("SubProcessExecutionListener variables is:" + variables);
        variables.put("subProcessExecutionListener", "SubProcessExecutionListener");
        delegateExecution.setVariables(variables);

    }
}
(4)CommonExecutionListener
package gdut.listener;

import org.flowable.bpmn.model.Process;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class CommonExecutionListener implements ExecutionListener {

    @Override
    public void notify(DelegateExecution delegateExecution) {
        System.out.println("CommonExecutionListener start");
        Map<String, Object> variables = delegateExecution.getVariables();
        System.out.println("CommonExecutionListener variables is:" + variables);
        variables.put("commonExecutionListener", "CommonExecutionListener");
        delegateExecution.setVariables(variables);

        delegateExecution.setVariable("date", "2022-12-28");
        delegateExecution.setVariableLocal("subject", "english");
    }
}
(5)CommonTaskListener
package gdut.listener;

import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component("commonTaskListener")
public class CommonTaskListener implements TaskListener {

    @Autowired
    RuntimeService runtimeService;

    @Override
    public void notify(DelegateTask delegateTask) {
        System.out.println("CommonTaskListener start");
        Map<String, Object> variables = delegateTask.getVariables();
        System.out.println("commonTaskListener variables is:" + variables);
        System.out.println("commonTaskListener date=" + variables.get("date") + ";subject=" + variables.get("subject") +  ";dateTwo=" + variables.get("dateTwo") + ";subjectTwo=" + variables.get("subjectTwo"));
        variables.put("commonTaskListener", "CommonTaskListener");
        delegateTask.setVariables(variables);
    }
}
(6)CommonExecutionListenerTwo
package gdut.listener;

import org.flowable.bpmn.model.Process;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class CommonExecutionListenerTwo implements ExecutionListener {

    @Override
    public void notify(DelegateExecution delegateExecution) {
        System.out.println("CommonExecutionListenerTwo start");
        Map<String, Object> variables = delegateExecution.getVariables();
        System.out.println("CommonExecutionListenerTwo variables is:" + variables);
        variables.put("commonExecutionListenerTwo", "CommonExecutionListenerTwo");
        delegateExecution.setVariables(variables);

        delegateExecution.setVariable("dateTwo", "2023-01-01");
        delegateExecution.setVariableLocal("subjectTwo", "math");
    }
}
(7)CommonTaskListenerTwo
package gdut.listener;

import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class CommonTaskListenerTwo implements TaskListener {

    @Autowired
    RuntimeService runtimeService;

    @Override
    public void notify(DelegateTask delegateTask) {
        System.out.println("CommonTaskListenerTwo start");
        Map<String, Object> variables = delegateTask.getVariables();
        System.out.println("CommonTaskListenerTwo variables is:" + variables);
        System.out.println("CommonTaskListenerTwo date=" + variables.get("date") + ";subject=" + variables.get("subject") +  ";dateTwo=" + variables.get("dateTwo") + ";subjectTwo=" + variables.get("subjectTwo"));
        variables.put("commonTaskListenerTwo", "CommonTaskListenerTwo");
        delegateTask.setVariables(variables);
    }
}
(8)CommonEndExecutionListener
package gdut.listener;

import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component("commonEndExecutionListener")
public class CommonEndExecutionListener implements ExecutionListener {

    @Override
    public void notify(DelegateExecution delegateExecution) {
        System.out.println("CommonEndExecutionListener end");
        Map<String, Object> variables = delegateExecution.getVariables();
        System.out.println("CommonEndExecutionListener variables is:" + variables);
    }
}

注意:Controller的调用代码上篇文章有介绍。

http://localhost:8081/flowable/createFlowInstance
{
    "flowDefinitionName":"TestCallActivity",
    "item":{
        "name":"liufeifei",
        "age":1,
        "salary":100000
    }
}

打印输出:

CommonStartExecutionListener start
CommonStartExecutionListener variables is:{item=ParamItem(name=liufeifei, age=1, salary=100000), flowDefinitionName=TestCallActivity}
CallActivityStartExecutionListener start
CallActivityStartExecutionListener variables is:{item=ParamItem(name=liufeifei, age=1, salary=100000), flowDefinitionName=TestCallActivity, commonStartExecutionListener=CommonStartExecutionListener}
SubProcessExecutionListener start
SubProcessExecutionListener parentVariables is:{callActivityStartExecutionListener=CallActivityStartExecutionListener, item=ParamItem(name=liufeifei, age=1, salary=100000), flowDefinitionName=TestCallActivity, commonStartExecutionListener=CommonStartExecutionListener}
SubProcessExecutionListener variables is:{callActivityStartExecutionListener=CallActivityStartExecutionListener, item=ParamItem(name=liufeifei, age=1, salary=100000), flowDefinitionName=TestCallActivity, commonStartExecutionListener=CommonStartExecutionListener}
CommonExecutionListener start
CommonExecutionListener variables is:{callActivityStartExecutionListener=CallActivityStartExecutionListener, item=ParamItem(name=liufeifei, age=1, salary=100000), flowDefinitionName=TestCallActivity, commonStartExecutionListener=CommonStartExecutionListener, subProcessExecutionListener=SubProcessExecutionListener}
CommonTaskListener start
commonTaskListener variables is:{callActivityStartExecutionListener=CallActivityStartExecutionListener, date=2022-12-28, item=ParamItem(name=liufeifei, age=1, salary=100000), subject=english, flowDefinitionName=TestCallActivity, commonExecutionListener=CommonExecutionListener, commonStartExecutionListener=CommonStartExecutionListener, subProcessExecutionListener=SubProcessExecutionListener}
commonTaskListener date=2022-12-28;subject=english;dateTwo=null;subjectTwo=null
CommonExecutionListenerTwo start
CommonExecutionListenerTwo variables is:{callActivityStartExecutionListener=CallActivityStartExecutionListener, date=2022-12-28, item=ParamItem(name=liufeifei, age=1, salary=100000), commonTaskListener=CommonTaskListener, flowDefinitionName=TestCallActivity, commonExecutionListener=CommonExecutionListener, commonStartExecutionListener=CommonStartExecutionListener, subProcessExecutionListener=SubProcessExecutionListener}
CommonTaskListenerTwo start
CommonTaskListenerTwo variables is:{callActivityStartExecutionListener=CallActivityStartExecutionListener, date=2022-12-28, item=ParamItem(name=liufeifei, age=1, salary=100000), commonTaskListener=CommonTaskListener, flowDefinitionName=TestCallActivity, commonExecutionListener=CommonExecutionListener, commonStartExecutionListener=CommonStartExecutionListener, commonExecutionListenerTwo=CommonExecutionListenerTwo, dateTwo=2023-01-01, subProcessExecutionListener=SubProcessExecutionListener, subjectTwo=math}
CommonTaskListenerTwo date=2022-12-28;subject=null;dateTwo=2023-01-01;subjectTwo=math
createFlowInstance instanceId is:1db5b521-86ba-11ed-92d5-c03c5949a6ca

//两个任务节点提交后输出
CommonEndExecutionListener end
CommonEndExecutionListener variables is:{callActivityStartExecutionListener=CallActivityStartExecutionListener, item=ParamItem(name=liufeifei, age=1, salary=100000), flowDefinitionName=TestCallActivity, commonStartExecutionListener=CommonStartExecutionListener}

总结:
a.开始节点的变量参数 = 创建工作流传入的参数{item=ParamItem(name=liufeifei, age=1, salary=100000), flowDefinitionName=TestCallActivity}。

b.调用活动节点的变量参数 = 开始节点的变量参数 + 开始节点监听器添加的变量commonStartExecutionListener=CommonStartExecutionListener。

c.子流程节点的变量参数 = 调用活动节点的变量参数 + 调用活动节点添加的变量callActivityStartExecutionListener=CallActivityStartExecutionListener。

d.【测试用户任务】节点的任务监听器变量参数 = 子流程节点的变量参数 + 子流程节点添加的变量subProcessExecutionListener=SubProcessExecutionListener + 该节点的执行监听器添加的变量参数(date=2022-12-28, subject=english)。

e.【测试用户任务Two】节点的变量参数 = 子流程节点的变量参数 + 子流程节点添加的变量 subProcessExecutionListener=SubProcessExecutionListener + 【测试用户任务】节点执行监听器添加的全局变量参数(date=2022-12-28) + 该节点的执行监听器添加的变量参数(dateTwo=2023-01-01, subjectTwo=math)。

注意:这个节点是没有获取到【测试用户任务】节点监听器添加的局部变量( subject=english)。

【测试用户任务】节点和【测试用户任务Two】节点是并行的,一个节点能拿到另一个节点添加的全局变量,但是拿不到添加的局部变量。

f.结束节点的变量参数 = 创建工作流传入的参数 + 开始节点监听器添加的变量+ 调用活动节点监听器添加的变量。
注意:调用活动流程的节点是获取不到子流程的参数的。

bpmn.xml
(1)TestCallActivity.bpmn.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.7.2">
  <process id="TestCallActivity" name="TestCallActivity" isExecutable="true">
    <documentation>测试调用流程</documentation>
    <startEvent id="callActivityStart" name="调用子流程开始节点" flowable:formFieldValidation="true">
      <extensionElements>
        <flowable:executionListener event="start" delegateExpression="${commonStartExecutionListener}"></flowable:executionListener>
      </extensionElements>
    </startEvent>
    <endEvent id="callActivityEnd" name="调用子流程结束节点">
      <extensionElements>
        <flowable:executionListener event="start" delegateExpression="${commonEndExecutionListener}"></flowable:executionListener>
      </extensionElements>
    </endEvent>
    <callActivity id="testCallActivity" name="测试Call Activity" calledElement="TestSubProcess" flowable:calledElementType="key" flowable:inheritVariables="true" flowable:fallbackToDefaultTenant="false">
      <extensionElements>
        <flowable:executionListener event="start" delegateExpression="${callActivityStartExecutionListener}"></flowable:executionListener>
      </extensionElements>
    </callActivity>
    <sequenceFlow id="sid-4E847DF0-7B01-4A92-A840-B2022B1BC7FB" sourceRef="callActivityStart" targetRef="testCallActivity"></sequenceFlow>
    <sequenceFlow id="sid-7349C25C-5B30-4AD4-BA8B-AAD4CB723B15" sourceRef="testCallActivity" targetRef="callActivityEnd"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_TestCallActivity">
    <bpmndi:BPMNPlane bpmnElement="TestCallActivity" id="BPMNPlane_TestCallActivity">
      <bpmndi:BPMNShape bpmnElement="callActivityStart" id="BPMNShape_callActivityStart">
        <omgdc:Bounds height="30.0" width="30.0" x="100.0" y="90.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="callActivityEnd" id="BPMNShape_callActivityEnd">
        <omgdc:Bounds height="28.0" width="28.0" x="435.0" y="90.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="testCallActivity" id="BPMNShape_testCallActivity">
        <omgdc:Bounds height="80.0" width="100.0" x="240.0" y="64.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-4E847DF0-7B01-4A92-A840-B2022B1BC7FB" id="BPMNEdge_sid-4E847DF0-7B01-4A92-A840-B2022B1BC7FB" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
        <omgdi:waypoint x="129.9497610449725" y="104.91428708430954"></omgdi:waypoint>
        <omgdi:waypoint x="239.99999999999892" y="104.28542857142855"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-7349C25C-5B30-4AD4-BA8B-AAD4CB723B15" id="BPMNEdge_sid-7349C25C-5B30-4AD4-BA8B-AAD4CB723B15" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
        <omgdi:waypoint x="339.95000000000005" y="104.0"></omgdi:waypoint>
        <omgdi:waypoint x="435.0" y="104.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>
(2)TestSubProcess.bpmn.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.7.2">
  <process id="TestSubProcess" name="TestSubProcess" isExecutable="true">
    <documentation>测试子流程</documentation>
    <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
    <subProcess id="testSubProcess" name="测试子流程">
      <extensionElements>
        <flowable:executionListener event="start" delegateExpression="${subProcessExecutionListener}"></flowable:executionListener>
      </extensionElements>
      <endEvent id="sid-6923D261-5D42-4399-9BD8-E4793D0FB7A7"></endEvent>
      <startEvent id="sid-0C5D0031-05EC-4CB3-A9E9-DBD0EF288ECE" flowable:formFieldValidation="true"></startEvent>
      <userTask id="testUserTask" name="测试用户任务" flowable:formFieldValidation="true">
        <extensionElements>
          <flowable:executionListener event="start" delegateExpression="${commonExecutionListener}"></flowable:executionListener>
          <flowable:taskListener event="create" delegateExpression="${commonTaskListener}"></flowable:taskListener>
        </extensionElements>
      </userTask>
      <parallelGateway id="sid-4233420A-D5AE-4BBB-8791-A2FB650D50C6"></parallelGateway>
      <userTask id="testUserTaskTwo" name="测试用户任务Two" flowable:formFieldValidation="true">
        <extensionElements>
          <flowable:executionListener event="start" delegateExpression="${commonExecutionListenerTwo}"></flowable:executionListener>
          <flowable:taskListener event="create" delegateExpression="${commonTaskListenerTwo}"></flowable:taskListener>
        </extensionElements>
      </userTask>
      <parallelGateway id="sid-E11C8BF2-A844-40DA-97D9-3BAC2E3FF9BB"></parallelGateway>
      <sequenceFlow id="sid-DE014E83-3E40-4E19-9FDD-B39917E290AB" sourceRef="sid-0C5D0031-05EC-4CB3-A9E9-DBD0EF288ECE" targetRef="sid-4233420A-D5AE-4BBB-8791-A2FB650D50C6"></sequenceFlow>
      <sequenceFlow id="sid-E847CAF7-CB29-4BBA-B548-B1F307A86D43" sourceRef="sid-4233420A-D5AE-4BBB-8791-A2FB650D50C6" targetRef="testUserTask"></sequenceFlow>
      <sequenceFlow id="sid-8D387613-8C97-45FA-AAE3-9773582A8A75" sourceRef="sid-4233420A-D5AE-4BBB-8791-A2FB650D50C6" targetRef="testUserTaskTwo"></sequenceFlow>
      <sequenceFlow id="sid-0A89AC7F-892F-4B5A-93E4-8A5BAFA50A1C" sourceRef="testUserTask" targetRef="sid-E11C8BF2-A844-40DA-97D9-3BAC2E3FF9BB"></sequenceFlow>
      <sequenceFlow id="sid-9760C519-DC12-4B71-8250-CEAFD957B40B" sourceRef="testUserTaskTwo" targetRef="sid-E11C8BF2-A844-40DA-97D9-3BAC2E3FF9BB"></sequenceFlow>
      <sequenceFlow id="sid-2C0F8E60-A3BC-4C21-A357-0E361A4E42A1" sourceRef="sid-E11C8BF2-A844-40DA-97D9-3BAC2E3FF9BB" targetRef="sid-6923D261-5D42-4399-9BD8-E4793D0FB7A7"></sequenceFlow>
    </subProcess>
    <endEvent id="sid-CB5871B7-C75D-4C20-B2DA-41662DE32764"></endEvent>
    <sequenceFlow id="sid-EA3427BF-E27A-4AA8-AF3A-0D92F8A146B2" sourceRef="testSubProcess" targetRef="sid-CB5871B7-C75D-4C20-B2DA-41662DE32764"></sequenceFlow>
    <sequenceFlow id="sid-903EBC2E-44F5-4F98-836D-625058E581D4" sourceRef="startEvent1" targetRef="testSubProcess"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_TestSubProcess">
    <bpmndi:BPMNPlane bpmnElement="TestSubProcess" id="BPMNPlane_TestSubProcess">
      <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
        <omgdc:Bounds height="30.0" width="30.0" x="75.0" y="120.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="testSubProcess" id="BPMNShape_testSubProcess">
        <omgdc:Bounds height="285.0" width="552.0" x="195.0" y="15.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-6923D261-5D42-4399-9BD8-E4793D0FB7A7" id="BPMNShape_sid-6923D261-5D42-4399-9BD8-E4793D0FB7A7">
        <omgdc:Bounds height="28.0" width="28.0" x="690.0" y="135.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-0C5D0031-05EC-4CB3-A9E9-DBD0EF288ECE" id="BPMNShape_sid-0C5D0031-05EC-4CB3-A9E9-DBD0EF288ECE">
        <omgdc:Bounds height="30.0" width="30.0" x="236.0" y="142.5"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="testUserTask" id="BPMNShape_testUserTask">
        <omgdc:Bounds height="80.0" width="100.0" x="390.0" y="30.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-4233420A-D5AE-4BBB-8791-A2FB650D50C6" id="BPMNShape_sid-4233420A-D5AE-4BBB-8791-A2FB650D50C6">
        <omgdc:Bounds height="40.0" width="40.0" x="303.0" y="137.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="testUserTaskTwo" id="BPMNShape_testUserTaskTwo">
        <omgdc:Bounds height="80.0" width="100.0" x="390.0" y="180.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-E11C8BF2-A844-40DA-97D9-3BAC2E3FF9BB" id="BPMNShape_sid-E11C8BF2-A844-40DA-97D9-3BAC2E3FF9BB">
        <omgdc:Bounds height="40.0" width="40.0" x="555.0" y="129.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-CB5871B7-C75D-4C20-B2DA-41662DE32764" id="BPMNShape_sid-CB5871B7-C75D-4C20-B2DA-41662DE32764">
        <omgdc:Bounds height="28.0" width="28.0" x="810.0" y="121.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-9760C519-DC12-4B71-8250-CEAFD957B40B" id="BPMNEdge_sid-9760C519-DC12-4B71-8250-CEAFD957B40B" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
        <omgdi:waypoint x="489.95" y="193.70370370370372"></omgdi:waypoint>
        <omgdi:waypoint x="561.8932038834951" y="155.8759708737864"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-8D387613-8C97-45FA-AAE3-9773582A8A75" id="BPMNEdge_sid-8D387613-8C97-45FA-AAE3-9773582A8A75" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
        <omgdi:waypoint x="335.83178391959797" y="164.11662011173183"></omgdi:waypoint>
        <omgdi:waypoint x="389.99999999999994" y="193.17596566523605"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-2C0F8E60-A3BC-4C21-A357-0E361A4E42A1" id="BPMNEdge_sid-2C0F8E60-A3BC-4C21-A357-0E361A4E42A1" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
        <omgdi:waypoint x="594.5165690866485" y="149.42578125"></omgdi:waypoint>
        <omgdi:waypoint x="690.0001009915921" y="149.054279921789"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-E847CAF7-CB29-4BBA-B548-B1F307A86D43" id="BPMNEdge_sid-E847CAF7-CB29-4BBA-B548-B1F307A86D43" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
        <omgdi:waypoint x="334.89301470588236" y="148.92156862745097"></omgdi:waypoint>
        <omgdi:waypoint x="389.99999999999994" y="107.51609442060085"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-EA3427BF-E27A-4AA8-AF3A-0D92F8A146B2" id="BPMNEdge_sid-EA3427BF-E27A-4AA8-AF3A-0D92F8A146B2" flowable:sourceDockerX="516.8124678380748" flowable:sourceDockerY="120.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
        <omgdi:waypoint x="746.949999999943" y="135.0"></omgdi:waypoint>
        <omgdi:waypoint x="810.0" y="135.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-0A89AC7F-892F-4B5A-93E4-8A5BAFA50A1C" id="BPMNEdge_sid-0A89AC7F-892F-4B5A-93E4-8A5BAFA50A1C" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
        <omgdi:waypoint x="489.95000000000005" y="99.23000000000002"></omgdi:waypoint>
        <omgdi:waypoint x="562.3713218122373" y="141.61682242990653"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-903EBC2E-44F5-4F98-836D-625058E581D4" id="BPMNEdge_sid-903EBC2E-44F5-4F98-836D-625058E581D4" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="44.765625" flowable:targetDockerY="120.0">
        <omgdi:waypoint x="104.9499991851885" y="135.0"></omgdi:waypoint>
        <omgdi:waypoint x="194.9999999999696" y="135.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-DE014E83-3E40-4E19-9FDD-B39917E290AB" id="BPMNEdge_sid-DE014E83-3E40-4E19-9FDD-B39917E290AB" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="20.5" flowable:targetDockerY="20.5">
        <omgdi:waypoint x="265.9499965255165" y="157.5"></omgdi:waypoint>
        <omgdi:waypoint x="303.5" y="157.5"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>
参考

Flowable入门系列文章61 呼叫活动

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐