Activiti網關--並行網關


1、么是並行網關

  並行網關允許將流程分成多條分支,也可以把多條分支匯聚到一起,並行網關的功能是基於進 入和外出順序流的:

  fork 分支:

    並行后的所有外出順序流,為每個順序流都創建一個並發分支。

  join 匯聚:

    所有到達並行網關,在此等待的進入分支, 直到所有進入順序流的分支都到達以后,  流程就會通過匯聚網關。

  注意:

    如果同一個並行網關有多個進入和多個外出順序流, 它就同時具有分支和匯聚功能。 這時, 網關會先匯聚所有進入的順序流,然后再切分成多個並行分支。

  與其他網關的主要區別:

    並行網關不會解析條件。 即使順序流中定義了條件,也會被忽略。

2、流程定義

  

 

  

3、部署流程

復制代碼
package com.zn;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;

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

public class ActivitiParallelGateway {
    /**
     * 流程部署
     */
    @Test
    public void deployment() {
        //獲取ProcessEngine對象   默認配置文件名稱:activiti.cfg.xml  並且configuration的Bean實例ID為processEngineConfiguration
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取RepositoryService對象進行流程部署
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //進行部署,將對應的流程定義文件生成到數據庫當中,作為記錄進行保存
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("bmpnfiles/holidayParallelGateway .bpmn")     //加載流程文件
                .name("請假流程-並行網關")       //設置流程名稱
                .key("holiday")
                .deploy();                      //部署

        //輸出部署信息
        System.out.println("流程名稱:" + deployment.getName());
        System.out.println("流程ID:" + deployment.getId());
        System.out.println("流程Key:" + deployment.getKey());
    }
}
復制代碼

控制台:

  

數據庫:

  

4、啟動流程實例

復制代碼
package com.zn;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;

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

public class ActivitiParallelGateway {

    /**
     * 啟動流程實例
     */
    @Test
    public void startInstance() {
        //獲取ProcessEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //設置流程變量
        Map<String, Object> assMap = new HashMap<>();
        assMap.put("num", 3);
        //啟動流程實例
        ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidayPar", assMap);
        System.out.println("流程實例:" + holidayGroup.getId());
    }
}
復制代碼

數據庫:

  

5、任務處理

復制代碼
package com.zn;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

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

public class ActivitiParallelGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhangsan").singleResult();
        //任務處理
        taskService.complete(task.getId());
    }
}
復制代碼

數據庫:

  

6、任務處理

復制代碼
package com.zn;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

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

public class ActivitiParallelGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("lisi").singleResult();
        //任務處理
        taskService.complete(task.getId());
    }
}
復制代碼

數據庫:

  

7、任務處理

復制代碼
package com.zn;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

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

public class ActivitiParallelGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhaoliu").singleResult();
        //任務處理
        taskService.complete(task.getId());
    }
}
復制代碼

數據庫:

  

  當執行到並行網關時,說明當前流程實例有多個分支在運行;

  並行任務不執行不分前后,有任務的負責人去執行即可;

  當所有分支達到匯聚結點,並行網關就執行完成了;

8、任務處理

復制代碼
package com.zn;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

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

public class ActivitiParallelGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("sunqi").singleResult();
        //任務處理
        taskService.complete(task.getId());
    }
}
復制代碼

數據庫:

  

9、任務處理

復制代碼
package com.zn;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

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

public class ActivitiParallelGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhouba").singleResult();
        //任務處理
        taskService.complete(task.getId());
    }
}
復制代碼

數據庫:

  

執行完成后,整個流程就結束:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM