排他网关(exclusive gateway)(也叫异或网关 XOR gateway,或者更专业的,基于数据的排他网关 exclusive data-based gateway),用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个
条件计算为true
的顺序流(当没有设置条件时,认为顺序流为true)继续流程。
请注意这里出口顺序流的含义与BPMN 2.0中的一般情况不一样。一般情况下,会选择
所有条件计算为true
的顺序流,并行执行。而使用排他网关时,
只会选择一条顺序流
。当多条顺序流的条件
都计算为true时
,会且仅会选择在XML中
最先定义的顺序流
继续流程。如果没有可选的顺序流,
会抛出异常
。
网关也可以建模流程中的并行执行。在流程模型中引入并行的最简单的网关,就是并行网关(parallel gateway)。它可以将执行分支(fork)为多条路径,也可以合并(join)多条入口路径的执行。
并行网关的功能取决于其入口与出口顺序流:
-
分支:所有的出口顺序流都并行执行,为每一条顺序流创建一个并行执行。
-
合并:所有到达并行网关的并行执行都会在网关处
等待,直到每一条入口顺序流都到达了有个执行
。然后流程经过该合并网关继续。
请注意,如果并行网关同时具有多条入口与出口顺序流,可以同时具有分支与合并的行为。在这种情况下,网关首先合并所有入口顺序流,然后分裂为多条并行执行路径。与其他网关类型有一个重要区别:
并行网关不计算条件。如果连接到并行网关的顺序流上定义了条件,会直接忽略该条件。
可以把包容网关(inclusive gateway)看做排他网关与并行网关的组合。
与排他网关一样,可以在包容网关的出口顺序流上定义条件
,包容网关会
计算条件
。然而主要的区别是,
包容网关与并行网关一样,可以同时选择多于一条出口顺序流。
包容网关的功能取决于其入口与出口顺序流:
-
分支:流程会计算所有出口顺序流的条件。对于每一条计算为true的顺序流,流程都会创建一个并行执行。
-
合并:所有到达包容网关的并行执行,都会在网关处等待。直到每一条具有流程标志(process token)的入口顺序流,都有一个执行到达。这是与并行网关的重要区别。换句话说,包容网关只会等待可以被执行的入口顺序流。在合并后,流程穿过合并并行网关继续。
请注意,如果包容网关同时具有多条入口与出口顺序流,可以同时具有分支与合并的行为。在这种情况下,网关首先合并所有具有流程标志的入口顺序流,然后为每一个条件计算为true的出口顺序流分裂出并行执行路径。
包容网关的汇聚行为比并行网关更复杂。所有到达包容网关的并行执行,都会在网关等待,直到所有“可以到达”包容网关的执行都“到达”包容网关。 判断方法为:计算当前流程实例中的所有执行,检查从其位置是否有一条到达包容网关的路径(忽略顺序流上的任何条件)。如果存在这样的执行(可到达但尚未到达),则不会触发包容网关的汇聚行为。
其实就是可以在多条线路上加上条件,也可以有些不加上条件,不加条件的就一定执行,加了条件的按条件执行,然后合并汇聚这些执行的线路,在往下走。比如一个请假审批,请假超过多少天的要部门主管审批,没超过多少天的要科长审批,但是无论怎样都要人事主管审批(不加条件)。
一个人要花很长时间才能从他所有的错误中吸取全部教训。人们常说凡事都有两面,但股市只有一面,不是多头的一面或空头的一面,而是正确的一面。我将这条基本原则牢记心间所花的时间远远超过学习股票投机游戏中大多数技术层面的东西所需要的时间。
排他网关排他网关(exclusive gateway)(也叫异或网关 XOR gateway,或者更专业的,基于数据的排他网关 exclusive data-based gateway),用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件计算为true的顺序流(当没有设置条件时,认为顺序流为true)继续流程。请注意这里出口顺序流的含义与BPMN 2.0中的一般情况不一样。一般情况下,会选择所有条件计算为true的顺序流,并行执行。而使用排他网关时
bpmn20.xml : 中的配置
<sequenceFlow id="sid-94D550DD-DD5D-4251-9AAF-414D363A168B" sourceRef="sid-503576A8-9907-462E-9CEF-A314A1D5FA24" targetRef="buildTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[$
15
Flowable
-BPMN操作流程之
排
他
网关
背景定义流程准备流程文件控制器流程验证代码下载打赏版权
流程在审批的过程中需要进行一些判断然后再看下一步怎么走,完成判断逻辑的是
网关
,
排
他
网关
就是其中的一种。
排
他
网关
(也叫异或(XOR)
网关
,或更技术性的叫法 基于数据的
排
他
网关
), 用来在流程中实现决策。 当流程执行到这个
网关
,所有外出顺序流都会被处理一遍。 其中条件解析为true的...
Flowable
源码地址:https://github.com/
flowable
/
flowable
-engine
Flowable
-6.7.2 源码注释地址:https://github.com/solojin/
flowable
-6.7.2-annotated
网关
解析处理器,包路径:org.
flowable
.engine.impl.bpmn.parser.handler
Excl
usive
Gateway
ParseHandler
排
他
网关
*
排
他
网关
* @author Joram Ba
之前基于
flowable
为公司开发了套轻量级的OA系统,最近有个需求,要求在正式发起审批前或者流程被驳回后重新发起前预测审批路径,参考了下https://blog.51cto.com/10983441/2501052这篇文章,做了一些修改和补充。
1. 首先拿到BpmnModel,所有流程定义信息都可以通过BpmnModel获取;若流程尚未发起,则用modelId查询最新部署的流程定义数据;若流程已经发起,可以通过流程实例的processDefiitionId查询流程定义的历史数据。
private
1、
Flowable
是什么
Flowable
是一个使用Java编写的轻量级业务流程引擎。
Flowable
流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据,等等。这个章节将用一个可以在你自己的开发环境中使用的例子,逐步介绍各种概念与API。
Flowable
可以十分灵...
前面在定义流程xml文件,并进行部署的过程中,遇到过“[Validation set: '
flowable
-executable-process' | Problem: '
flowable
-
excl
usive
-
gateway
-no-outgoing-seq-flow'] :
Excl
usive
gateway
has no outgoing sequence flow ” 问题,发现是定义流程xml关于
网关
的部分有误导致的。
现在已经部署好有
网关
的流程后,正在提交
网关
节点前...
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代码配置分支条件和默认路径,可以实现业务流程的灵活控制。
Python每日一记99>>>TypeError: Index(...) must be called with a collection of some kind, 1 was passed错误解决
15199