Activiti網關--包含網關


1、什么是包含網關

  包含網關可以看做是排他網關和並行網關的結合體;和排他網關一樣,你可以在外出順序流上定義條件,包含網關會解析它們;但是主要的區別是包含網關可以選擇多於一條順序流,這和並行網關一樣,包含網關的功能是基於進入和外出順序流的;

  分支:所有外出順序流的條件都會被解析,結果為true的順序會以並行方式繼續執行,會為每個順序流創建一個分支;

  匯聚:所有並行分支達到包含網關,會進入等待狀態,知道每個包含流程token的進入順序流的分支都到達;這是與並行網關的最大不同;換句話說,包含網關只會等待選中執行了的進入順序流;在匯聚之后,流程會穿過包含網關繼續執行;  

2、流程定義

  

  

3、部署流程

復制代碼
package com.zn;

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

public class ActivitiInclusiveGateway {
    /**
     * 流程部署
     */
    @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/holidayInclusiveGateway.bpmn")     //加載流程文件
                .name("請假流程-包含網關")       //設置流程名稱
                .key("holiday")
                .deploy();                      //部署

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

控制台:

  

數據庫:

   

4、啟動流程實例(userType=1)

當userType=1執行的時候,會走常規體驗項和抽血化驗以及早餐,如果是userType=1會走全部四項;

復制代碼
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 ActivitiInclusiveGateway {

    /**
     * 啟動流程實例
     */
    @Test
    public void startInstance() {
        //獲取ProcessEngine對象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //設置流程變量
        Map<String, Object> assMap = new HashMap<>();
        assMap.put("userType", 1);
        //啟動流程實例
        ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidayInc", 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 ActivitiInclusiveGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayInc").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 ActivitiInclusiveGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayInc").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 ActivitiInclusiveGateway {

    /*
     *任務處理
     */
    @Test
    public void completeTask(){
        //獲取ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取TaskService對象
        TaskService taskService = processEngine.getTaskService();
        //查詢到自己的任務,然后通過任務ID進行提交
        Task task = taskService.createTaskQuery().processDefinitionKey("holidayInc").taskAssignee("wangwu").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 ActivitiInclusiveGateway {

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

數據庫:

  

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

  


免責聲明!

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



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