排他网关

当流程执行到这个网关,所有分支都会判断条件是否为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);
    }
}

流程图:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flowable是一个开源的业务流程管理引擎,网关是Flowable中一种常用的网关类型,用于在业务流程中进行条件分支。 网关通过判断分支条件来选择只满足条件的一条路径进行流程流转。在Flowable中,可以通过XML或者Java代码配置网关的条件和分支路径。 配置网关时,需要先定义网关节点,并设置节点的唯一标识。然后,通过设置网关节点的出口条件,来定义网关的分支条件。 在XML配置中,可以使用<sequenceFlow>元素来设置分支条件。每个<sequenceFlow>元素都可以设置一个条件表达式,用来判断该分支是否符合条件。条件表达式可以使用Flowable提供的表达式语言,如${var == 1}或${var > 10}。 在Java代码配置中,可以使用Flowable提供的API来设置分支条件。通过调用org.flowable.bpmn.model.SequenceFlow类的条件方法来设置条件表达式,如sequenceFlow.setConditionExpression("${var == 1}")。 配置网关时,还可以设置默认的分支路径。当所有的分支条件均不满足时,流程就会沿着设置的默认路径进行流转。设置默认路径时,只需要在<sequenceFlow>元素的条件中不写表达式即可。 网关在流程运行时的行为是,首先会根据各个分支条件表达式的结果进行判断,确定满足条件的分支。然后,仅选择满足条件的一条路径,并根据该路径的出口流转至下一个节点。 总之,网关是Flowable中一种常用的网关类型,用于根据条件进行业务流程的分支判断和流转。通过XML或Java代码配置分支条件和默认路径,可以实现业务流程的灵活控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值