BPMN模型与符号-网关

网关

网关用于控制序列流在一个过程中收敛和发散时如何相互作用。如果不需要控制流,则不需要一个网关。术语“网关”意味着有一个门控机制,可以允许或不允许通过门关。当令牌到达网关时,它们可以在输入时合并在一起,或在调用网关机制时在输出时分开。

网关是一种菱形,它已经在许多流程图符号中用于专用分支,并且对大多数建模者都很熟悉。

    ◇网关是必须用一条细线绘制的菱形图(参见图10.102)。

图10.102-A网关

    ◇为网关使用文本、颜色、大小和线条必须遵循第39页“在图表中使用文本、颜色、大小和线条”中定义的规则,但情况除外:

网关与活动一样,能够消耗或生成额外的令牌,有效地控制给定进程的执行语义。主要的区别是,网关并不代表正在完成的“工作”,它们被认为对正在执行的过程的操作措施(成本、时间等)没有任何影响。

网关可以定义所有类型的业务流程序列流行为:决策/分支(排他性、包容性和复杂性)、合并、分叉和连接。因此,虽然菱形符号传统上被用于排他决策,但BPMN扩展了菱形的行为,以反映任何类型的序列流控制。每种类型的网关都将有一个内部指示器或标记,以显示正在使用的网关类型(参见图10.103)。

图10.103 – 不同类型的网关

网关类型图标
排他
事件
平行事件 
包容 
复杂 
平行

网关控制发散和收敛序列流的流动。也就是说,单个网关可以有多个输入流和多个输出流。建模器和建模工具可能希望强制执行只执行其中一个功能的网关为最佳实践。因此,首先需要两个网关依次来进行收敛,然后发散序列流。

网关在本子条款中以抽象级别进行描述。网关的执行语义详见第434页。

序列流程注意事项

注意:虽然网关的形状是一个菱形,但它并不要求输入和输出的序列流必须连接到菱形的四角。序列流可以连接到网关形状的边界上的任何位置。

本子条款适用于所有网关。以下子条款中为每种类型的网关指定了其他序列流连接规则。

    ◇网关可以是序列流的目标。它可以有零(0)、一个(1)或更多的传入序列流。

        ◇如果网关没有传入的序列流,且流程没有启动事件,则应在实例化流程时执行网关的发散行为,具体取决于网关的类型(见下文)。

    ◇网关可能是序列流的源;它可以有零、一个或多个传出的序列流。

    ◇一个网关必须具有多个传入的序列流或多个传出的序列流(即,它必须合并或拆分该流)。

        ◇具有网关方向(gatewayDirection)未指定(unspecified)的网关可能同时有多个传入和传出序列流。

        ◇具有混合(mixed)网关方向(gatewayDirection)的网关必须同时具有多个传入和传出序列流。

        ◇具有聚合(converging)网关方向(gatewayDirection)的网关必须有多个传入序列流,但不能有多个传出序列流。

        ◇具有分发(diverging)网关方向(gatewayDirection)的网关必须有多个传出序列流,但不能有多个传入序列流。

排他网关

分发专用网关(决策)用于在流程流中创建备选路径。这基本上是一个过程的“道路上的分流点”。对于进程的给定实例,只能选择其中一条路径。

决策可以被认为是在过程的特定点提出的问题。这个问题有一组已定义的替代答案。每个答案都与一个与网关的传出序列流相关联的条件表达式相关联。

    ◇排他网关可以使用一个形状像“X”的标记,并放置在网关菱形内(见图10.106),以区别于其他网关。此标记不是必须的(请参见图10.105)。

        ◇使用“X”内部指示器时应一致。也就是说,一个流程图不应该有一些带有指示器的网关和其他没有指示器的网关。

图10.105-没有内部指标的一个基于数据的排他决策(网关)示例

图10.106-具有内部指标的基于数据的排他决策(网关)示例

注意:作为建模首选项,本文档示例中显示的排他网关将使用不包含内部指示器的样式。

可以选择识别默认路径,在没有任何条件表达式(conditional Expressions)求值为true时使用默认路径。如果未指定默认路径,并且在执行该进程时,没有任何条件表达式的计算结果为true,则会发生运行时异常。

注意:一个聚合的排他网关用于合并备选路径。每个传入的序列流令牌都被路由到输出的序列流,而无需同步。

表10.123-排他网关属性和模型关联

属性名描述/用途
 default: SequenceFlow [0..1]当其他输出序列流上的条件表达式( conditionExpression)未计算为true时,将接收标记的序列流。默认的序列流不应该有条件表达式( conditionExpression)。任何此类表达式(Expression)均应被忽略。

包容网关

分发的包含网关(包容性决策)可用于在流程流中创建可选的并行路径。与排他网关不同,所有条件表达式都被求值。对一个条件表达式的真实求值并不排除对其他条件表达式的求值。所有具有真实求值的序列流都将由一个令牌遍历。由于每条路径都被认为是独立的,所以这些路径的所有组合都可以采用,从零到所有。但是,它应该被设计成至少采取一条路径。

◇包含网关必须使用圆形或“O”形状的标记,并放置在网关菱形中(见图10.108)中,以区别于其他网关。

图10.108-一个使用包含网关的示例

可以选择识别默认路径,在没有任何条件表达式求值为true时使用默认路径。如果未指定默认路径,并且在执行该进程时,没有任何条件表达式的计算结果为true,则会发生运行时异常。

一个聚合的包含网关用于合并备选路径和并行路径的组合。到达包含网关的控制流令牌可以与稍后到达此网关的一些其他令牌同步。包含网关的精确同步行为可以在第291页找到。

表10.124-包括网关属性和模型关联

属性名描述/用途
 default: SequenceFlow [0..1]当其他序列流上的条件表达式没有计算为true时,序列流将收到一个令牌。默认的序列流不应该有一个条件表达式。任何此类表达式均应被忽略。

平行网关

并行网关用于同步(合并)并行流和创建并行流。

◇平行网关必须使用加号形状的标记,并放置在网关菱形中(参见图10.110)中,以区别于其他网关。

图10.110-一个使用并行网关的示例

图10.111-同步并行网关的一个示例

平行网关创建并行路径而不检查任何条件;每个输出序列流在执行此网关时接收一个令牌。对于传入流,平行网关将等待所有传入流,然后通过其输出的序列流触发流。

“并行网关”元素继承了网关的属性和模型关联(请参见表8.46),但不添加其他属性或模型关联。

复杂网关

复杂网关可用于复杂的同步行为进行建模。一个表达式激活条件(activationCondition)用于描述精确的行为。

例如,此表达式可以指定需要5个传入序列流中的3个上的令牌来激活网关。网关产生的令牌是由输出序列流上的条件决定的,如包含网关的分发行为。如果令牌在剩余的两个序列流中稍后到达,那么这些令牌将导致网关的重置,并且可以在输出的序列流上产生新的令牌。要确定是否需要在重置之前等待其他令牌,网关将使用包含网关的同步语义。

◇复杂网关必须使用星号形状的标记,并放置在网关菱形中(见图10.113)中,以区别于其他网关。

图10.113-一个使用复杂网关的示例

与其他网关相比,复杂网关有一个内部状态,它由布尔实例属性“等待开始”表示,初始状态是真,激活后变成假。

此属性可用于输出序列流的条件下,以指定激活时产生标记的位置和重置时产生标记的位置。建议每个输出的序列流在激活或重置时获得一个令牌,但不是两者都获得。至少一个输出序列流应该在激活时接收一个令牌,但在重置时不能产生一个令牌。

表10.125-复杂网关模型关联

属性名描述/用途
activationCondition: Expression [0..1]确定将同步哪个输入令牌组合以激活网关。
 default: SequenceFlow [0..1]当其他序列流上的条件表达式没有计算为true时,序列流将收到一个令牌。默认的序列流不应该有一个条件表达式。任何此类表达式均应被忽略。

表10.126-与复杂网关相关的实例属性

属性名描述/用途
activationCount: integer指在运行时,在复杂网关的传入序列流上出现的令牌的数量。
waitingForStart: boolean = true表示复杂网关的内部状态。它要么在等待启动(=true),要么在等待重置(=false)。

基于事件的网关

基于事件的网关表示进程中的一个分支点,备选路径基于网关路径中发生的事件,而不是使用进程数据评估表达式(如排他网关或包容网关)。一个特定的事件,通常是消息的接收,决定了将被采取的路径。基本上,决策是由另一个参与者基于处理时看不到的数据做出的,因此,需要使用基于事件的网关。

例如,如果一个公司正在等待客户的响应,如果客户响应“是”,他们将执行一组活动,如果客户响应“否”,他们将执行另一组活动。客户的响应决定了选择了哪条路径。消息的标识决定了所采取的路径。也就是说,“是”消息和“否”消息是不同的消息——也就是说,它们不是在消息的属性中具有不同值的同一消息。消息的接收可以用具有消息触发器或接收任务的中间事件来建模。除了消息之外,还可以使用中间事件的其他触发器,如计时器。

事件网关具有相同的网关的基本形状,即菱形,并在菱形内放置一个标记,以指示网关的变化。

    ◇事件网关是一个必须用一条细线绘制的菱形。

        ◇为事件网关使用文本、颜色、大小和行必须遵循第39页的“在图表中使用文本、颜色、大小和行”中定义的规则。

    ◇事件网关的标记必须看起来像是捕获多个中间事件(请参见图10.115)。

图10.115-基于事件的网关

与其他网关不同,事件网关的行为是由元素的配置决定的,而不是单个网关。

    ◇一个事件网关必须有两个或两个以上的传出序列流。

        ◇事件网关的传出序列流不能带有条件表达式。

位于网关的输出序列流的目标端上的对象是网关配置的一部分。

    ◇基于事件的网关配置为使输出序列流以任意组合的中间事件或接收任务(参见图10.116和图10.117),除了以下除外:

        ◇如果在配置中使用了消息中间事件,则在该配置中不能使用接收任务,反之亦然。

            ◇事件网关配置中使用的接收任务事件不能有任何附加任务边界中间事件。

        ◇只有以下中间事件触发器是有效的:消息、信号、定时器、条件的和多重(它们只能包括前面提到的触发器)。

    ◇事件网关配置中的目标元素不能有任何其他的传入序列流(除来自事件网关的序列流之外)。

图10.116-一个使用消息中间事件的基于事件的网关示例

图10.117-一个使用接收任务的基于事件的网关示例

当事件网关配置中的第一个事件被触发时,将使用该事件之后的路径(将发送事件的传出序列流)。事件网关配置的所有剩余路径都将不再有效。基本上,事件网关配置是一个竞争条件,其中被触发的第一个事件获胜。

事件网关可以在进程开始时使用。网关的行为和标记将会改变。

事件网关可用于实例化一个进程。默认情况下,网关的实例化属性为false,但如果设置为true,则在触发网关配置的第一个事件时,进程将被实例化。

    ◇如果事件网关的实例化属性设置为true,则事件网关的标记看起来像多个启动事件(参见图10.118)。

图10.118-启动进程的基于事件的专用网关

为了使事件网关实例化进程,它必须不能有任何传入序列流。

在某些情况下,建模者可能希望进程由一组消息之一实例化,同时仍然需要所有消息作为同一进程实例的工作对象。要处理这个问题,还有事件网关的另一个变体。

    ◇如果事件网关的实例化属性(instantiate)设置为true,并且“事件网关类型(eventGatewayType)”属性设置为“并行”,则事件网关的标记看起来为并行多重启动事件(参见图10.119)。

        ◇事件网关的实例化(instantiate)属性必须设置为true,以便将事件网关类型(eventGatewayType)属性设置为并行(Parallel)(即,对于不实例化进程的事件网关必须为独占——一个标准的并行网关可用于在进程中间包含并行事件)。

图10.119-要启动进程的基于并行事件的网关

并行事件网关也是一种竞争条件。但是,在这种情况下,当触发第一个事件并且已实例化进程时,网关配置中的其他事件不会被禁用。其他事件仍在等待,期待在进程(正常)完成之前触发。在这种情况下,触发网关配置中的事件的消息必须共享相同的相关信息。

表10.127-事件基础网关属性和模型关联

属性名描述/用途
instantiate: boolean = false当为true时,接收其中一个事件将实例化进程实例。
eventGatewayType: EventGatewayType = Exclusive{Exclusive| Parallel }事件网关类型(eventGatewayType)确定用于实例化进程时的网关的行为(如上所述)。只有当实例化属性(instantiate)设置为true时,该属性才能设置为并行(Parallel)。

基于事件的网关可以在进程开始时使用,而不必作为序列流的目标。在一个进程开始时,可以有多个这样的基于事件的网关。普通的开始事件和基于事件的网关可以一起使用。

Avatar
Author: 毛师傅

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注