排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。 当流程执行到这个网关,所有分支都会判断条件是否为 true,如果为 true 则执行该分支, 注意,排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只 选择一条分支去执行)
为什么要用排他网关?
不用排他网关也可以实现分支,如下图:
注意:如果没有使用排他网关,下多个节点条件都满足的话,那么就会其他所有节点都走,如果使用了排他网关,那么就只会走节点ID小的节点其他节点是不会走的。
====================================================
============Activiti:并行网关=============
====================================================
并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的:
fork 分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
join 汇聚: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。
====================================================
============Activiti:包含网关=============
====================================================
包含网关可以看做是排他网关和并行网关的结合体。和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。包含网关的功能是基于进入和外出顺序流的:
l 分支:
所有外出顺序流的条件都会被解析,结果为 true 的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。
l 汇聚:
所有并行分支到达包含网关,会进入等待状态, 直到每个包含流程 token 的进入顺序流的分支都到达。这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在汇聚之后,流程会穿过包含网关继续执行。
详解:表示如果我们的userType=1那么包含网关只会走常规体检项目和抽血化验节点,如果我们的包含网关为2那么其他节点都会走。
注意:在分支时,需要判断条件,符合条件的分支,将会执行,符合条件的分支最终才进行汇聚。