返回介绍

8.3. 顺序流

发布于 2023-09-17 23:40:35 字数 3584 浏览 0 评论 0 收藏 0

8.3.1. 描述

顺序流(sequence flow)是流程中两个元素间的连接器。在流程执行过程中,一个元素被访问后,会沿着其所有出口顺序流继续执行。这意味着BPMN 2.0的默认是并行执行的:两个出口顺序流就会创建两个独立的、并行的执行路径。

8.3.2. 图示

顺序流,用从源元素指向目标元素的箭头表示。箭头总是指向目标元素。

bpmn.sequence.flow

8.3.3. XML表示

顺序流需要有流程唯一的id,并引用存在的目标元素。

<sequenceFlow sourceRef="theStart" targetRef="theTask" />

8.3.4. 条件顺序流

描述

在顺序流上可以定义条件(conditional sequence flow)。当离开BPMN 2.0活动时,默认行为是计算其每个出口顺序流上的条件。当条件计算为true时,选择该出口顺序流。如果该方法选择了多条顺序流,则会生成多个执行,流程会以并行方式继续。

请注意:上面的介绍针对BPMN 2.0活动(与事件),但不适用于网关(gateway)。不同类型的网关,会用不同的方式处理带有条件的顺序流。

图示

条件顺序流用起点带有小菱形的顺序流表示。在顺序流旁显示条件表达式。

bpmn.conditional.sequence.flow

XML表示

条件顺序流的XML表示格式为含有conditionExpression(条件表达式)子元素的普通顺序流。请注意目前只支持tFormalExpressions。可以省略xsi:type=""定义,默认为唯一支持的表达式类型。

<sequenceFlow sourceRef="theStart" targetRef="theTask">
  <conditionExpression xsi:type="tFormalExpression">
  <![CDATA[${order.price > 100 && order.price < 250}]]>
  </conditionExpression>
</sequenceFlow>

目前conditionalExpressions只能使用UEL。详细信息可以在表达式章节找到。使用的表达式需要能解析为boolean值,否则当计算条件时会抛出异常。

  • 下面的例子,通过典型的JavaBean的方式,使用getter引用流程变量的数据。

<conditionExpression xsi:type="tFormalExpression">
  <![CDATA[${order.price > 100 && order.price < 250}]]>
</conditionExpression>
  • 这个例子调用了一个解析为boolean值的方法。

<conditionExpression xsi:type="tFormalExpression">
  <![CDATA[${order.isStandardOrder()}]]>
</conditionExpression>

Flowable发行版中包含了下列示例流程,用于展示值表达式与方法表达式的使用(参见org.flowable.examples.bpmn.expression)。

bpmn.uel expression.on.seq.flow

8.3.5. 默认顺序流

描述

所有的BPMN 2.0任务与网关都可以使用默认顺序流(default sequence flow)。只有当没有其他顺序流可以选择时,才会选择默认顺序流作为活动的出口顺序流。流程会忽略默认顺序流上的条件。

图示

默认顺序流用起点带有“斜线”标记的一般顺序流表示。

bpmn.default.sequence.flow

XML表示

活动的默认顺序流由该活动的default属性定义。下面的XML片段展示了一个排他网关(exclusive gateway),带有默认顺序流flow 2。只有当conditionAconditionB都计算为false时,才会选择默认顺序流作为网关的出口顺序流。

<exclusiveGateway name="Exclusive Gateway" default="flow2" />

<sequenceFlow sourceRef="exclusiveGw" targetRef="task1">
  <conditionExpression xsi:type="tFormalExpression">${conditionA}</conditionExpression>
</sequenceFlow>

<sequenceFlow sourceRef="exclusiveGw" targetRef="task2"/>

<sequenceFlow sourceRef="exclusiveGw" targetRef="task3">
  <conditionExpression xsi:type="tFormalExpression">${conditionB}</conditionExpression>
</sequenceFlow>

对应下面的图示:

bpmn.default.sequence.flow.example

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文