Activiti网关-排他网关
Posted f017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()); } }
数据库:
以上是关于Activiti网关-排他网关的主要内容,如果未能解决你的问题,请参考以下文章