Flowable-网关-排他网关

定义

排他网关,也叫异或(XOR)网关,是 BPMN 中使用的最常见的网关之一,用来在流转中实
现发散分支决策。排他网关需要和条件顺序流搭配使用,当流程执行到排他网关,所有流出的顺序
流都会被按顺序求解计算一遍,其中第一个条件解析为 true 的顺序流会被选中(当多个顺序流程的
条件为 true 时,只有第一个会被选中)并且不再计算其它流出分支,让流程沿着第一条被选中的执
行线运行;如果所有顺序流条件计算结果都为 false 且该网关定义了一个默认顺序流,那么该默认
顺序流将被执行;如果所有顺序流条件计算结果都为 false 且没有定义默认顺序流,则抛出异常,
中断执行,在流程设计时应该避免这种情况的发生,至少需要确保有一条分支的顺序流计算结果为true。
排他网关的流程分支的顺序流建议配置条件,未设置条件的顺序流被计算为 true。
排他网关没有合并的效果,只要有一个流入的顺序流到达,该网关流出的顺序流被激活开始执
行计算。如果前置可能会有多个正在执行的分支,排他网关之后的路径将在每个分支到达时被重复
实例化(除非业务需求的确如此,否则应避免这种情况的发生)。

图形标记

排他网关用内部带有“X”图标的标准网关(菱形)表示,“X”图标表示异或(XOR)语义。
排他网关的图形标志如图所示。

在这里插入图片描述

XML内容

排他网关用一行定义了网关,条件表达式定义在流出顺序流中:

<exclusiveGateway id="Gateway_1gse3sj" default="Flow_1gdshzv"/>

示例

在这里插入图片描述

 <process id="ServiceSpringCloudBackServiceProcess" name="服务-Springcloud回调服务" isExecutable="true">
    <startEvent id="a39b8c7712bb742a7aa081cf731563c96" />
    <userTask id="ad7ca5657f18f4e64aa6e309db12fc47b" name="费用申请">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
      <outgoing>Flow_0tmo406</outgoing>
    </userTask>
    <sequenceFlow id="a653af6d1d2774d02afc0301d2f0121e2" sourceRef="a39b8c7712bb742a7aa081cf731563c96" targetRef="ad7ca5657f18f4e64aa6e309db12fc47b" />
    <endEvent id="Event_1vogsar">
      <incoming>Flow_0odeyuq</incoming>
    </endEvent>
    <exclusiveGateway id="Gateway_1gse3sj" default="Flow_1gdshzv">
      <incoming>Flow_0tmo406</incoming>
      <outgoing>Flow_1gdshzv</outgoing>
      <outgoing>Flow_0mdfhgf</outgoing>
    </exclusiveGateway>
    <userTask id="Activity_0b7092y" name="经理">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
      <incoming>Flow_1gdshzv</incoming>
      <outgoing>Flow_0c58ztv</outgoing>
    </userTask>
    <userTask id="Activity_1gvbrzi" name="总监">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
      <incoming>Flow_0c58ztv</incoming>
      <incoming>Flow_0mdfhgf</incoming>
      <outgoing>Flow_0ovnf34</outgoing>
    </userTask>
    <sequenceFlow id="Flow_0c58ztv" sourceRef="Activity_0b7092y" targetRef="Activity_1gvbrzi" />
    <userTask id="Activity_0ol5zjn" name="总经理">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
      <incoming>Flow_0ovnf34</incoming>
      <outgoing>Flow_0odeyuq</outgoing>
    </userTask>
    <sequenceFlow id="Flow_0ovnf34" sourceRef="Activity_1gvbrzi" targetRef="Activity_0ol5zjn" />
    <sequenceFlow id="Flow_0odeyuq" sourceRef="Activity_0ol5zjn" targetRef="Event_1vogsar" />
    <sequenceFlow id="Flow_0tmo406" sourceRef="ad7ca5657f18f4e64aa6e309db12fc47b" targetRef="Gateway_1gse3sj" />
    <sequenceFlow id="Flow_1gdshzv" sourceRef="Gateway_1gse3sj" targetRef="Activity_0b7092y" />
    <sequenceFlow id="Flow_0mdfhgf" name="大于10000" sourceRef="Gateway_1gse3sj" targetRef="Activity_1gvbrzi">
      <conditionExpression xsi:type="tFormalExpression">${money&gt;10000}</conditionExpression>
    </sequenceFlow>
  </process>

在以上代码中,加粗代码定义了排他网关 Gateway_1gse3sj,它流出的条件顺序流有
Flow_1gdshzv、Flow_0mdfhgf,分别定义了条件 默认流、Flow_0mdfhgf。

视频教程

排他网关

演示demo

排他网关

本文中内容和案例出自贺波老师的书《深入Activiti流程引擎:核心原理与高阶实战》,书中的介绍更全面、详细,推荐给大家。
深入Activiti流程引擎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值