(二)BPMN2.0规范介绍——3顺序流 Sequence Flow

目录

一、定义

二、 条件顺序流 Conditional sequence flow

三、 默认顺序流 Default sequence flow


一、定义

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

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

顺序流需要有流程唯一的id,以及对存在的源与目标元素的引用。

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

 

二、 条件顺序流 Conditional sequence flow

  • 描述:

在顺序流上可以定义条件。当离开BPMN 2.0活动时,默认行为是计算其出口顺序流上的条件。当条件计算为true时,选择该出口顺序流。如果该方法选择了多条顺序流,则会生成多个执行,流程会以并行方式继续。请注意:上面的介绍对BPMN 2.0活动(与事件)有效,但不适用于网关(gateway)。不同类型的网关,会用不同的方式处理带有条件的顺序流

  • 图标:

条件顺序流,用起点带有小菱形的一般顺序流表示。条件表达式挨着顺序流显示。
 

  • java代码:

 

  •  xml表示:

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

<sequenceFlow id="flow" 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>

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

 

 

 

三、 默认顺序流 Default sequence flow

  • 描述:

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

  • 图标:

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

  • java代码:

 

  •  xml表示:

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

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" default="flow2" />
<sequenceFlow id="flow1" sourceRef="exclusiveGw" targetRef="task1">
    <conditionExpression xsi:type="tFormalExpression">${conditionA}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="task2"/>
<sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="task3">
    <conditionExpression xsi:type="tFormalExpression">${conditionB}</conditionExpression>
</sequenceFlow>

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青苔猿猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值