目录
二、 条件顺序流 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>