包容网关是排他网关和并行网关的综合体。当进行决策判断时,与排他网关所不同的是,所有条件为true的后继分支都会被依次执行,如果所有分支条件决策都为false且该网关定义了一个默认的连线,那么该默认分支将被执行。如果没有可到达的分支,抛出异常,该网关所处的分支被中断,在流程设计上应避免这种情况发生。包容网关有分支和合并两种行为,允许多进多出。
下图给出一个包容网关的示例。网关A评估后继三个分支,如果变量str1等于a执行Service1路径,如果变量str2等于b执行Service2路径,如果变量str3等于c执行Service3路径;网关B做路径合并,流程结束。
判断包容网关的每个分支连线,条件为true的分支被执行。使用包容网关的分支连线必须设置条件规则,未设置规则的连线被评估为false。当一条分支执行时,一个令牌被创建。如上图例子中,网关A会逐个的判断三条路径的条件,依次执行条件达成的路径。
如果后继分支可能存在都不通过的情况,应该合理的选择一个默认路径,否则引擎执行到该网关的分支将被中断于此。
所有到达包容网关的活动分支路径都汇聚于此等待,直到每个有活动令牌的前置分支都执行完毕。如果其中有分支未被执行或中断,包容网关会做出智能判断,不再等待该分支(这是一种类似向上递归的检查,用来推断该分支是否可能被到达。但如果网关嵌套模式复杂,包容网关会认为该路径可能不被到达而放弃等待。
在流程设计上应尽可能避免复杂的网关嵌套,或使用复杂网关实现基于场景的合并算法)。如在上图例子中,网关B会等待被网关A选择的一条或多条路径完成后,结束流程。