环境:
排他网关(也称为XOR网关或更专业的基于数据的排他网关)用于对流程中的决策建模。当执行到达此网关时,将按照定义它们的顺序评估所有传出序列流。选择条件评估为真(或没有条件集,在概念上具有在序列流上定义的*'真'*)的第一序列流以继续该过程。
注意,在这种情况下,输出序列流的语义与BPMN 2.0中的一般情况的语义不同。通常,选择条件评估为真的所有序列流以并行方式继续,而在使用排他网关时仅选择一个序列流。如果多个序列流具有计算结果为true的条件,则选择XML中定义的第一个(并且只有那个!)以继续该过程。如果不能选择序列流,则会抛出异常
并行网关还可用于对流程中的并发进行建模。在流程模型中引入并发性的最直接的网关是并行网关,它允许您分叉到多个执行路径或连接多个传入的执行路径。
并行网关的功能基于传入和传出顺序流:
请注意,如果同一并行网关有多个传入和传出顺序流,并行网关可以同时具有分叉和连接行为。在这种情况下,网关将首先连接所有传入的序列流,然后再分成多个并发的执行路径。
可以把**包容网关(inclusive gateway)**看做排他网关与并行网关的组合。与排他网关一样,可以在包容网关的出口顺序流上定义条件,包容网关会计算条件。然而主要的区别是,包容网关与并行网关一样,可以同时选择多于一条出口顺序流。
包容网关的功能取决于其入口与出口顺序流:
请注意,如果包容网关同时具有多条入口与出口顺序流,可以同时具有分支与合并的行为。在这种情况下,网关首先合并所有具有流程标志的入口顺序流,然后为每一个条件计算为true的出口顺序流分裂出并行执行路径。
包容网关的汇聚行为比并行网关更复杂。所有到达包容网关的并行执行,都会在网关等待,直到所有“可以到达”包容网关的执行都“到达”包容网关。 判断方法为:计算当前流程实例中的所有执行,检查从其位置是否有一条到达包容网关的路径(忽略顺序流上的任何条件)。如果存在这样的执行(可到达但尚未到达),则不会触发包容网关的汇聚行为。
基于事件的网关(event-based gateway)提供了根据事件做选择的方式。网关的每一条出口顺序流都需要连接至一个捕获中间事件。当流程执行到达基于事件的网关时,与等待状态类似,网关会暂停执行,并且为每一条出口顺序流创建一个事件订阅。
请注意:基于事件的网关的出口顺序流与一般的顺序流不同。这些顺序流从不实际执行。相反,它们用于告知流程引擎:当执行到达一个基于事件的网关时,需要订阅什么事件。有以下限制:
intermediateCatchEvent(捕获中间事件)
类型的元素(Flowable不支持在基于事件的网关之后连接“接收任务 Receive Task”)。intermediateCatchEvent
,必须只有一个入口顺序流。<exclusiveGateway id="exculusivegateway" name="排他网关"></exclusiveGateway>
<parallelGateway id="fork" name="fork"></parallelGateway>
...
<parallelGateway id="join" name="join"></parallelGateway>
<inclusiveGateway id="fork" name="fork"></inclusiveGateway>
<eventBasedGateway id="gw1" name="基于事件的网关"></eventBasedGateway>
SELECT * FROM flowable.ACT_RU_EXECUTION;
SELECT * FROM flowable.ACT_RU_TASK;
SELECT * FROM flowable.ACT_RU_EXECUTION;
SELECT * FROM flowable.ACT_RU_TASK;
在上面的示例中,在启动流程后,如果流程变量paymentReceived== false和shipOrder == true,则将创建两个任务。如果这些过程变量中只有一个等于true,则只创建一个任务。如果没有条件计算为true,则抛出异常。这可以通过指定默认的传出顺序流来防止。
当执行到达基于事件的网关时,流程执行暂停。流程实例订阅alert信号事件,并创建一个10分钟后触发的定时器。流程引擎会等待10分钟,并同时等待信号事件。如果信号在10分钟内触发,则会取消定时器,流程沿着信号继续执行,激活Handle alert用户任务。如果10分钟内没有触发信号,则会继续执行,并取消信号订阅。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。