flowable学习笔记(三):流程参数
flowable实战,流程参数的传递
注意:以下的代码和例子是建立在前面的SpringBoot项目整合Flowable和flowable实战
调用活动(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>
参考
更多推荐


所有评论(0)