Activiti網關--排他網關


排他網關

1、什么是排他網關

  排他網關(也叫異或(XOR)網關,或叫基於數據的排他網關),用來在流程中實現決策。 當流程執行到這個網關,所有分支都會判斷條件是否為true,如果為 true 則執行該分支,

  注意,排他網關只會選擇一個為 true 的分支執行。(即使有兩個分支條件都為 true,排他網關也會只選擇一條分支去執行)

不使用排他網關也可以實現分支:

    

  上圖中,在連線的condition條件上設置分支條件;

  缺點:如果條件都不滿足,不使用排他網關,流程就結束了(是異常結束);

  如果使用排他網關決定分支的走向:

    

  如果從網關出去的線所有條件都不滿足則系統拋出org.activiti.engine.ActivitiException異常;

  說明:經過排他網關必須要有一條且只有一條分支走;

2、流程定義

  

3、部署流程

package com.zn;

import com.zn.entity.Holiday;
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 ActivitiExclusiveGateway {
    /**
     * 流程部署
     */
    @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/holidayExclusiveGateway.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 com.zn.entity.Holiday;
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 ActivitiExclusiveGateway {

    /**
     * 啟動流程實例
     */
    @Test
    public void getInstance() {
        //獲取ProcessEngine對象   默認配置文件名稱:activiti.cfg.xml  並且configuration的Bean實例ID為processEngineConfiguration
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //獲取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //設置流程變量  啟動流程時設置
        Holiday holiday=new Holiday();
        holiday.setNum(3);
        //定義一個map集合,存放assignee的值
        Map<String ,Object> assMap=new HashMap<>();
        assMap.put("holiday",holiday);
        //啟動一個流程實例
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayWay", assMap);
        System.out.println("流程啟動成功~");
    }

}

數據庫:

  

5、任務處理

package com.zn;

import com.zn.entity.Holiday;
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 ActivitiExclusiveGateway {

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

數據庫:

  

6、任務處理

package com.zn;

import com.zn.entity.Holiday;
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 ActivitiExclusiveGateway {

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


}

數據庫:

  

 


免責聲明!

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



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