并行网关之间使用排他网关问题。流程不能办结,卡在汇聚那里。(activiti 5.22.0)不知道后续版本有修复这个Bug吗
yuanyp opened this issue · comments
@Test
public void testDeploy001ByAddClasspathResource() {
Deployment deployment = runtimeTaskHelper.getRepositoryService().createDeployment().name("WF_MF_0143_0")
.addClasspathResource("me/kafeitu/activiti/extra/test/runtime/001.bpmn").deploy();
System.out.println("部署ID:" + deployment.getId());//1
System.out.println("部署时间:" + deployment.getDeploymentTime());
}
@Test
public void test001() throws Exception {
RuntimeService runtimeService = runtimeTaskHelper.getRuntimeService();
Map<String, Object> vars = new HashMap<String, Object>();
List<String> assignees = new ArrayList<String>();
assignees.add("1001");
vars.put("node4_users", assignees);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("WF_MF_0143_0", vars);
assertNotNull(processInstance.getId());
System.out.println("start....... " + processInstance.getId() + " " + processInstance.getProcessDefinitionId());
}
@Test
public void test001Next() throws Exception {
String processInsId = "2192201";
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list();
Map<String, Object> vars = new HashMap<String, Object>();
List<String> assignees = new ArrayList<String>();
assignees.add("1001");
vars.put("node7_users", assignees);
System.out.println("发送到 node7_users task " + taskList + " var " + vars);
taskService.complete(taskList.get(0).getId(), vars);
vars.clear();
taskList = taskService.createTaskQuery().processInstanceId(processInsId).list();
vars.put("node8_users", assignees);
System.out.println("发送到 node8_users task " + taskList + " var " + vars);
taskService.complete(taskList.get(0).getId(), vars);
vars.clear();
taskList = taskService.createTaskQuery().processInstanceId(processInsId).list();
vars.put("node15_users", assignees);
vars.put("node29_users", assignees);
System.out.println("发送到 node15_users node29_users task " + taskList + " var " + vars);
taskService.complete(taskList.get(0).getId(), vars);
vars.clear();
// taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskDefinitionKey("node15").list();
// vars.put("A", 2);
// vars.put("node24_users", assignees);
// System.out.println("发送到 node24_users task " + taskList + " var " + vars);
// taskService.complete(taskList.get(0).getId(), vars);
// vars.clear();
taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskDefinitionKey("node15").list();
vars.put("A", 1);
vars.put("node34_users", assignees);
System.out.println("发送到 node34_users task " + taskList + " var " + vars);
taskService.complete(taskList.get(0).getId(), vars);
vars.clear();
taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskDefinitionKey("node29").list();
vars.put("node14_users", assignees);
System.out.println("发送到 node14_users task " + taskList + " var " + vars);
taskService.complete(taskList.get(0).getId(), vars);
}
@Test
public void test001end14() throws Exception {
String processInsId = "2157201";
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskDefinitionKey("node14").list();
taskService.complete(taskList.get(0).getId(), new HashMap<String, Object>());
}
@Test
public void test001end15() throws Exception {
String processInsId = "2157201";
Map<String, Object> vars = new HashMap<String, Object>();
List<String> assignees = new ArrayList<String>();
assignees.add("1001");
vars.put("A", 2);
vars.put("node24_users", assignees);
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskDefinitionKey("node15").list();
taskService.complete(taskList.get(0).getId(), vars);
}
@Test
public void test001End() throws Exception {
String processInsId = "2157201";
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list();
taskService.complete(taskList.get(0).getId(), new HashMap<String, Object>());
}
@Test
public void testFlowIsEnd() throws Exception {
String processInsId = "2157201";
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
System.out.println("流程结束:" + (processInstance == null));
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.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" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1700811079984" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
<process id="WF_MF_0143_0" isClosed="false" name="WF_MF_0143_0" processType="None">
<startEvent activiti:initiator="initiator" id="node1" name="node1"/>
<userTask activiti:assignee="${node4_user}" activiti:exclusive="true" id="node4" name="node4">
<multiInstanceLoopCharacteristics activiti:collection="${node4_users}" activiti:elementVariable="node4_user" isSequential="false"/>
</userTask>
<endEvent id="node5" name="node5"/>
<userTask activiti:candidateUsers="${node7_users}" activiti:exclusive="true" id="node7" name="node7"/>
<userTask activiti:candidateUsers="${node8_users}" activiti:exclusive="true" id="node8" name="node8"/>
<parallelGateway gatewayDirection="Unspecified" id="node9" name="node9"/>
<userTask activiti:candidateUsers="${node14_users}" activiti:exclusive="true" id="node14" name="node14"/>
<userTask activiti:candidateUsers="${node15_users}" activiti:exclusive="true" id="node15" name="node15"/>
<parallelGateway gatewayDirection="Unspecified" id="node19" name="node19"/>
<exclusiveGateway gatewayDirection="Unspecified" id="node23" name="node23"/>
<userTask activiti:candidateUsers="${node24_users}" activiti:exclusive="true" id="node24" name="node24"/>
<userTask activiti:candidateUsers="${node29_users}" activiti:exclusive="true" id="node29" name="node29"/>
<sequenceFlow id="line6" name="Line-line6" sourceRef="node1" targetRef="node4"/>
<sequenceFlow id="line10" name="Line-line10" sourceRef="node4" targetRef="node7"/>
<sequenceFlow id="line11" name="Line-line11" sourceRef="node7" targetRef="node8"/>
<sequenceFlow id="line12" name="Line-line12" sourceRef="node8" targetRef="node9"/>
<sequenceFlow id="line18" name="Line-line18" sourceRef="node9" targetRef="node15"/>
<sequenceFlow id="line20" name="Line-line20" sourceRef="node14" targetRef="node19"/>
<sequenceFlow id="line22" name="Line-line22" sourceRef="node19" targetRef="node5"/>
<sequenceFlow id="line25" name="Line-line25" sourceRef="node15" targetRef="node23"/>
<sequenceFlow id="line27" name="Line-line27" sourceRef="node23" targetRef="node24">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${ A==2 }]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="line28" name="Line-line28" sourceRef="node24" targetRef="node19"/>
<sequenceFlow id="line30" name="Line-line30" sourceRef="node9" targetRef="node29"/>
<sequenceFlow id="line32" name="Line-line32" sourceRef="node29" targetRef="node14"/>
<sequenceFlow id="line35" name="Line-line35" sourceRef="node23" targetRef="node19">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${ A==1 }]]></conditionExpression>
</sequenceFlow>
</process>
</definitions>