Activiti / Activiti

Activiti is a light-weight workflow and Business Process Management (BPM) Platform targeted at business people, developers and system admins. Its core is a super-fast and rock-solid BPMN 2 process engine for Java. It's open-source and distributed under the Apache license. Activiti runs in any Java application, on a server, on a cluster or in the cloud. It integrates perfectly with Spring, it is extremely lightweight and based on simple concepts.

Home Page:https://www.activiti.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

并行网关之间使用排他网关问题。流程不能办结,卡在汇聚那里。(activiti 5.22.0)不知道后续版本有修复这个Bug吗

yuanyp opened this issue · comments

image
image

 @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>