什么是排他网关?

排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用于在流程中实现决策,当流程执行到这个网关,所有分支都会判断条件是否为true,如果为true则执行该分支

注意:排他网关只会选择一个为true的分支执行.(即使有两个分支条件都为true,排他网关也会只选择一条分支去执行)

为什么要用排他网关?

不用排他网关也能实现分支

在连线的condition条件上设置分支条件

缺点:

如果条件都不满足,不使用排他网关,流程就结束了(异常结束)

如果使用排他网关决定分支的走向

如果从网关出去的线所有条件都不满足则系统抛出异常

org.activiti.engine.ActivitiException: No outgoing sequence flow of the exclusive gateway 'exclusivegateway1' could be selected for continuing the process
at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivityBehavior.java:85)

说明:经过排他网关必须要有一条且只有一条分支走.

画图:

其他的都一样就是添加了一个排他网关

部署->启动->提交任务

package com.itheima.test;

import com.itheima.activiti.pojo.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.Before;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; /**
* 网关测试
*/
public class ActivitiGatewayTest { ProcessEngine defaultProcessEngine; @Before
public void init() {
defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
} /**
* 部署流程定义
*/
@Test
public void deployment(){
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("pic/gateway/holidayGateway1.bpmn")
.addClasspathResource("pic/gateway/holidayGateway1.png")
.name("请假流程")
.deploy(); System.out.println(deploy);
} /**
* 启动流程实例
*/
@Test
public void startProcessInstance(){ RuntimeService runtimeService = defaultProcessEngine.getRuntimeService(); Map<String,Object> map = new HashMap<>(); Holiday holiday = new Holiday();
holiday.setNum(5F); map.put("holiday",holiday); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1", map); System.out.println(processInstance); } /**
* 提交任务
*/
@Test
public void completTask(){
String assignee = "lisi";
Task task = querySingResultByAssignee(assignee);
TaskService taskService = defaultProcessEngine.getTaskService();
taskService.complete(task.getId());
} /**
* 查询用户唯一任务
* @param assignee
* @return
*/
public Task querySingResultByAssignee(String assignee){
TaskService taskService = defaultProcessEngine.getTaskService();
return taskService.createTaskQuery().processDefinitionKey("myProcess_1").taskAssignee(assignee).singleResult();
}
}

提交完部门经理审批后因为两个判断都成立,于是走ID号小的流程,只会走一个

当多个条件同时成立的时候,会选择ID最小的一个流程走,当条件都不成立的时候,排他网关也没招,只能报错

作者:彼岸舞

时间:2020\09\07

内容关于:Activiti工作流

本文来源于网络,只做技术分享,一概不负任何责任

Activiti7 网关(排他网关)的更多相关文章

  1. Activiti网关--排他网关

    排他网关 1.什么是排他网关 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策. 当流程执行到这个网关,所有分支都会判断条件是否为true,如果为 true 则执行该分 ...

  2. activiti入门3排他网关,并行网管,包含网关,事件网关(转)

    网关用来控制流程的流向 网关可以消费也可以生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量  写个带有分支的一个基本流程 流程图: 部署 ...

  3. activiti入门3排他网关,并行网管,包括网关,事件网关

    网关用来控制流程的流向 网关能够消费也能够生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量  写个带有分支的一个基本流程 流程图: wa ...

  4. Activity并行网关和排他网关

    说一说activiti中的排他网关和并行网关 activiti工作流中我们经常用到的网关有两种: 1. Exclusive Gateway 排他网关 排他网关.png 排他网关(也叫异或(XOR)网关 ...

  5. Activiti第三篇【连接、排他网关、指定任务处理人、组任务】

    连线 上面我们已将学过了流程变量了,可以在[任务服务.运行时服务.流程开始.完成某个任务时设置流程变量],而我们的连接就是流程变量的实际应用了-. 定义流程图 我们并不是所有的流程都是按一条的路径来走 ...

  6. activiti实战系列 排他网关(ExclusiveGateWay)

    流程图 12.2:部署流程定义+启动流程实例 12.3:查询我的个人任务 12.4:完成我的个人任务 说明: 1)     一个排他网关对应一个以上的顺序流 2)     由排他网关流出的顺序流都有个 ...

  7. java中activiti框架中的排他网关使用方法,多条件判断

    当排他网关的判断条件中出现多个条件时,需要注意,设置判断条件时,可能遇到,流向相同的任务,而判断条件的变量个数不同 那么,必须在后面的运行任务时,将所有的涉及到的变量都设置进任务中,只不过,如果这个任 ...

  8. 排他网关(ExclusiveGateWay)

    网关(ExclusiveGateWay) 作者:邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA.具体需求是这样的:当部门申请的金额小于一万块的时候, ...

  9. Activiti7 网关(包含网关)

    什么是包含网关? 包含网关可以看做是排他网关和并行网关的结合体,和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析他们,但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关是一样的 ...

随机推荐

  1. Python turtle库的画笔控制说明

    turtle.penup() 别名 turtle.pu() :抬起画笔海龟在飞行 turtle.pendown() 别名 turtle.pd():画笔落下,海龟在爬行 turtle.pensize(w ...

  2. 8 Java 条件逻辑语句

    生活中,我们经常需要先做判断,然后才决定是否要做某件事情.例如,在上学的时候,如果期末考试成绩在全校能拿到前100名,则奖励一个 iPhone 11 .对于这种“需要先判断条件,条件满足后才执行的情况 ...

  3. Python3 连接 Oracle 数据库

    Python3 连接 Oracle 数据库 需要导出一些稍微复杂的数据,用Python处理很方便 环境 Win10 Python 3.7.0 Oracle 11g 安装依赖 安装 cx_Oracle ...

  4. PYTHON实战完整教程1-配置VSCode开发环境

    一.安装 为降低学习门槛,保证学习目标的聚焦,我们在windows(使用WinServer2019虚拟机)上搭建开发环境.(系列教程最后结束时,也会部署到linux上) 打开Python官网 http ...

  5. 怎么用 Solon 开发基于 undertow jsp tld 的项目?

    Solon 开发 jsp 还是简单的,可以有 jetty 启动器 或者 undertow 启动器.此文用 undertow + jsp + tld 这个套路搞一把: 一. 开始Meven配置走起 用s ...

  6. java进阶(6)--访问控制权限

    一.四种访问控制权限   二.举例同包下访问权限

  7. Android 开发学习进程0.17 Android资源文件selector textview显示两种不同字体

    selector 是安卓资源文件的一种,它可以使按钮等实现不同状态下的不同UI,不用在代码中实现,而使用方式有两种,一种在color文件下 创建.xml可以使按钮等字体在不同状态下的变化,其二是在dr ...

  8. Windows下的Minio启动命令

    1.首先安装Minio到你的 Windows系统的盘符中,例如D盘 2. 打开dos命令行,进入存放minio.exe的文件夹下,输入 minio.exe server /data  命令,意味着启动 ...

  9. express 洋葱模型 路由管理 中间件

    express 路由管理,通过 app.express();  app.METHOD(path,fn(req, res)的方式进行路由的配置.实现了请求的接口的路由的拆分.那么可以将路由配置,分发到不 ...

  10. JavaScript 用七种方式教你判断一个变量是否为数组类型

    JavaScript 如何判断一个变量是否为数组类型 引言 正文 方法一 方法二 方法三 方法四 方法五 方法六 方法七 结束语 引言 我们如何判断一个变量是否为数组类型呢? 今天来给大家介绍七种方式 ...