精华内容
下载资源
问答
  • 排他网关

    2021-01-09 11:30:15
    排他网关只会选择一个为true的分支执行。(即使有两个分支条件都为 true,排他网关也会只选择一条分支去执行) xml文件 <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns=...

    当流程执行到这个网关,所有分支都会判断条件是否为true,如果为 true 则执行该分支。排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只选择一条分支去执行)

    xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
      xmlns:activiti="http://activiti.org/bpmn" targetNamespace="Examples"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL
                 http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
    
      <process id="exclusiveTask" name="排他网关">
        <startEvent id="leave" name="排他网关"/>
        <sequenceFlow sourceRef="leave" targetRef="exclusiveGateway1"/>
        <exclusiveGateway id="exclusiveGateway1" name="Exclusive Gateway"/>
        <userTask id="userTask1" name="精英"/>
        <userTask id="userTask2" name="优秀"/>
        <userTask id="userTask3" name="普通"/>
        <sequenceFlow id="flow2" sourceRef="exclusiveGateway1"  targetRef="userTask1">
          <conditionExpression xsi:type="tFormalExpression">
            <![CDATA[${score >= 90}]]>
          </conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow3" sourceRef="exclusiveGateway1" targetRef="userTask2">
          <conditionExpression xsi:type="tFormalExpression">
            <![CDATA[${score >= 75 && score < 90}]]>
          </conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow4" sourceRef="exclusiveGateway1" targetRef="userTask3">
          <conditionExpression xsi:type="tFormalExpression">
            <![CDATA[${score < 75}]]>
          </conditionExpression>
        </sequenceFlow>
        <!-- 默认数据流 -->
        <sequenceFlow id="flow5" sourceRef="exclusiveGateway1" targetRef="userTask1"/>
    
    
        <sequenceFlow id="flow6" sourceRef="userTask1" targetRef="processEnd"/>
        <sequenceFlow id="flow7" sourceRef="userTask2" targetRef="processEnd"/>
        <sequenceFlow id="flow8" sourceRef="userTask3" targetRef="processEnd"/>
        <endEvent id="processEnd" />
      </process>
    
    </definitions>

    代码:

    package com.lala.gateway;
    
    import common.ProcessEngineUtil;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    
    public class Exclusive {
        public static void main(String[] args) {
            ProcessEngineUtil processEngineUtil = new ProcessEngineUtil("exclusibe.bpmn20.xml");
            ProcessEngine processEngine = processEngineUtil.getProcessEngine();
    
            Map<String, Object> variables = new HashMap<>();
            variables.put("key1", "3");
            variables.put("score", "74");
            ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("exclusiveTask", variables);
    
    
            List<Task> tasks = processEngine.getTaskService().createTaskQuery().list();
            for (Task task : tasks) {
                System.out.println("task.name = {}" + task.getName());
                processEngine.getTaskService().complete(task.getId());
            }
            processEngineUtil.draw(processInstance);
        }
    }
    

    流程图:

     

     

    展开全文
  • 排他网关 并行网关

    排他网关
    排他网关

    /**
     * 排他网关
     * @param id  排他网关id
     * @return
     */
    protected static ExclusiveGateway createExclusiveGateway(String id) {
        ExclusiveGateway exclusiveGateway = new ExclusiveGateway();
        exclusiveGateway.setId(id);
        return exclusiveGateway;
    }
    

    并行网关
    并行网关

        /**
         * 并行网关
         * @param id  并行网关id
         * @return
         */
        protected static ParallelGateway createParallelGateway(String id) {
            ParallelGateway parallelGateway = new ParallelGateway();
            parallelGateway.setId(id);
            return parallelGateway;
        }
    
    展开全文
  • 什么是排他网关? 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用于在流程中实现决策,当流程执行到这个网关,所有分支都会判断条件是否为true,如果为true则执行该分支 注意:排他网关只会选择一个为true的分支...

    什么是排他网关?

    排他网关(也叫异或(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工作流

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

    展开全文
  • 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件 解析为true的顺序流(或者没有设置条件,概念上...

    activiti工作流中我们经常用到的网关有两种:

    1. Exclusive Gateway 排他网关

    排他网关.png

    排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件
    解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选
    中,让流程继续运行。

    注意这里的外出顺序流 与 BPMN 2.0 通常的概念是不同的。通常情况下,所有条件结果> 为true的顺序流 都会被选中,以并行方式执行,但排他网关只会选择一条顺序流执行。
    就是说,虽然多个顺序流的条件结果为true, 那么XML中的第一个顺序流(也只有这一
    条)会被选中,并用来继续运行流程。 如果没有选中任何顺序流,会抛出一个异常

    排他网关定义非常直接,在xml里面就一句

    <exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" />
    
    <sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="theTask1">
      <conditionExpression xsi:type="tFormalExpression">${input == 1}</conditionExpression>
    </sequenceFlow>
    
    <sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="theTask2">
      <conditionExpression xsi:type="tFormalExpression">${input == 2}</conditionExpression>
    </sequenceFlow>
    
    <sequenceFlow id="flow4" sourceRef="exclusiveGw" targetRef="theTask3">
      <conditionExpression xsi:type="tFormalExpression">${input == 3}</conditionExpression>
    </sequenceFlow>
    

    排他网关示意图.png

    上图是使用activiti modeler在线设计时候的截图

    排他网关有点像java里面 if ... else if ... 每一个分支线上都要指定一个条件,可以有多条分支线,分支线的的变量需要在网关之前就设置到流程变量中。

    ** 举个栗子,可以在我上面图里面usertask这个节点添加一个执行监听器 **

    添加执行监听器.png

    添加执行监听器.png

    执行监听器代码

    @Service("taskFinishedLicenser")
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    public class TaskFinishedLicenser implements ExecutionListener {
        private static final long serialVersionUID = 2105979050046650949L;
    
        @Override
        public void notify(DelegateExecution execution){
            try{
                //set global flow varible
                execution.getEngineServices().getRuntimeService().setVariableLocal(execution.getProcessInstanceId(),"input",1);
            }catch(Exception e){
                execution.getEngineServices().getRuntimeService().setVariableLocal(execution.getProcessInstanceId(),"input",2);
                logger.error(e.getMessage());
            }
        }
    }
    

    设置了流程变量后,分支条件获取的时候就可以读取到变量了。

    2. Parallel Gateway 并行网关

    并行网关.png

    网关也可以表示流程中的并发情况。最简单的并发网关是 并行网关,它允许将流程分成
    多条分支,也可以把多条分支 汇聚到一起。
    并行网关的功能是基于进入和外出的顺序流的:

    • 分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
    • 汇聚: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。

    注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功
    能。这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。

    与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

    这里需要强调的是,** 并行网关一定是成对出现的,有分支也要有汇聚 **

    ** 一个分支执行完毕后,需要等待其他分支全部执行完流程才会走到下一个节点 **

    还有一个有意思的点是,流程开始执行后,点击流程监控发现,执行到并行网关中间的节点时,当前执行节点是显示在并行网关节点上,并不会显示到中间具体的一个节点,所以activiti是把两个并行节点间的所有任务节点,看作是一个事务。

    并行网关.png

    <startEvent id="theStart" />
    <sequenceFlow id="flow1" sourceRef="theStart" targetRef="fork" />
    
    <parallelGateway id="fork" />
    <sequenceFlow sourceRef="fork" targetRef="receivePayment" />
    <sequenceFlow sourceRef="fork" targetRef="shipOrder" />
    
    <userTask id="receivePayment" name="Receive Payment" />  
    <sequenceFlow sourceRef="receivePayment" targetRef="join" />
    
    <userTask id="shipOrder" name="Ship Order" /> 
    <sequenceFlow sourceRef="shipOrder" targetRef="join" />
    
    <parallelGateway id="join" />
    <sequenceFlow sourceRef="join" targetRef="archiveOrder" />
    
    <userTask id="archiveOrder" name="Archive Order" /> 
    <sequenceFlow sourceRef="archiveOrder" targetRef="theEnd" />
    
    <endEvent id="theEnd" />



    作者:程序鱼
    链接:https://www.jianshu.com/p/51d9052c3799
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • 说一说activiti中的排他网关和并行网关 activiti工作流中我们经常用到的网关有两种: 1. Exclusive Gateway 排他网关 排他网关.png 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的...
  • 1、排他网关 一个排他网关对应一个以上的顺序流,由排他网关流出的顺序流都有个conditionExpression元素,在内部维护 返回boolean类型的决策结果。决策网关只会返回一条结果。当流程执行到排他网关时,流程引擎会...
  • 排他网关/并行网关

    2019-05-27 18:52:07
    1.排他网关 1.画图生成bpmn文件 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <definitions xmlns=...
  • flowable 排他网关

    2020-08-01 13:30:35
    再设置排他网关的流条件: bpmn20.xml : 中的配置 <sequenceFlow id="sid-94D550DD-DD5D-4251-9AAF-414D363A168B" sourceRef="sid-503576A8-9907-462E-9CEF-A314A1D5FA24" targetRef="buildTask"> <...
  • !... 如图 想要的效果是,在任务分发给会计1和风控1后,如果风控审核不通过,需要直接结束流程,但是...流程在没有聚合时,排他网关流向结束节点并没有生效,实例仍然存在,请问怎么实现业务? flowable版本6.5.0
  • Flowable条件表达式、排他网关、并行网关1. 条件表达式2. 排他网关3. 并行网关 1. 条件表达式 使用流程变量,设置连线需要的流程变量名称及条件${info==‘重要’},${}中的内容为boolean类型,用于判断是否执行该...
  • activiti入门3排他网关 并行网管 包含网关 事件网关
  • activiti笔记4-排他网关、并行网关
  • Activiti的排他网关、并行网关、

    千次阅读 2017-05-05 11:50:16
    排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在> 流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念...
  • 目录排他网关并行网关 排他网关 业务场景 某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的:当部门申请的金额小于一万块的时候,财务部可以直接决策。当部分申请的金额大于一万块并且小于三十万的...
  • 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件 解析为true的顺序流(或者没有设置条件,概念上...
  • Activiti排他网关

    千次阅读 2017-03-14 16:14:58
    执行到该网关,根据条件只能走一条执行线路; 根据请假天数,来具体让谁来审批, 请假天数小于3天,项目组长审批;...最后选中排他网关,设置默认执行的线路;默认就是请假天数多不满足以上条件就
  • 排他网关定义: 排他网关指当流程 执行到这个网关时,所有分支都会判断条件是否为 true,如果为 true 则执行该分支,如果分支都为true,只选择一个分支去执行。 注意,排他网关只会选择一个为 true 的分支执行(即使...
  • 15 Flowable-BPMN操作流程之排他网关背景定义流程准备流程文件控制器流程验证代码下载打赏版权 背景 流程在审批的过程中需要进行一些判断然后再看下一步怎么走,完成判断逻辑的是网关,排他网关就是其中的一种。 ...
  • 排他网关 排他网关也叫异或网关,用于流程中的决策。当流程运行到此处时,所有对外顺序流都会被梳理一遍,结果输出为true的顺序流会被选择并执行。弱所有顺序流都为false则会抛出异常。排他网关的图像为。 接下来...
  • Activiti 学习笔记八:排他网关(ExclusiveGateWay)
  • Activiti6.0(五)排他网关的使用

    千次阅读 2020-02-05 15:56:40
    上一篇中有讲到在有多条出线时,可以在流程线上使用流程变量来控制,Activiti的排他网关本质上也是通过给网关后的每条出线设置条件,除去默认出线后然后从上至下进行判断,当条件为true或者无条件时则认为满足,直接...
  • 1.流程图 2.部署流程定义+启动流程实例 3.查询我的个人任务 4.完成我的个人任务 ...当流程执行到排他网关时,流程引擎会自动检索网关出口,从上到下检索如果发现第一条决策结果为true或者没有设...
  • 排他网关相关代码 package com.activiti; import java.util.HashMap; import java.util.List; import java.util.Map; import org.activiti.engine.ProcessEngine; import org.activiti.engine.Process...
  • 工作流框架--activiti(四)--排他网关和并行网关

    万次阅读 热门讨论 2017-04-11 07:56:08
    接下来介绍activiti的排他网关和并行网关: 排他网关(ExclusiveGateway):  用来在流程中实现决策。当流程执行到排他网关,所有数据就会被执行一遍,满足条件的就会让流程继续运行。 需要注意的是:排他...
  • activiti实战系列 排他网关(ExclusiveGateWay)

    万次阅读 多人点赞 2016-04-16 08:39:21
    流程图     12.2:部署流程定义+启动流程实例 ...2) 由排他网关流出的顺序流都有个conditionExpression元素,在内部维护返回boolean类型的决策结果。 3) 决策网关只会返回一条结果。当流程
  • 排他网关(ExclusiveGateWay) 流程图 部署流程定义+启动流程实例 查询我的个人任务 完成我的个人任务 并行网关(parallelGateWay) 流程图 部署流程定义+启动流程实例 查询我的个人任务 完成...
  • 关于activiti的排他网关的用法欢迎来评价 排他网关 描述 排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 ...
  • 排他网关类似于程序开发中的if操作,只有判断条件为true的时候才会执行的,在Activiti中排他网关的xml代码的基本格式为 <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></...
  • activiti(7.0)排他网关

    2019-01-12 09:18:05
    import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.TaskService; import org.activiti.engine.... * 测试排他网关的存在的意义 * 1.测试没有...
  • activiti入门3排他网关,并行网管,包含网关,事件网关

    万次阅读 多人点赞 2014-10-24 15:53:07
    网关用来控制流程的流向 网关可以消费也可以生成token。 网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。 这里主要 介绍下 排他网关, 并行网关 , 和包含网关

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 311
精华内容 124
关键字:

排他网关