<bpmn2:conditionExpression> 委托表达式实现案例
时间: 2024-02-27 08:55:41 浏览: 265
以下是一个使用委托表达式实现动态条件表达式的案例:
1. 定义一个 SpEL 表达式:`${order.amount > 1000}`,用于计算订单金额是否大于 1000。
2. 在 BPMN 2.0 流程定义中使用 `<bpmn2:conditionExpression>` 元素定义条件表达式,并使用委托表达式的方式引用上一步中定义的 SpEL 表达式:
```
<bpmn2:sequenceFlow id="flow1" sourceRef="start" targetRef="task1">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[${orderAmountExpression}]]></bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
```
这里的 `${orderAmountExpression}` 就是上一步中定义的 SpEL 表达式的名称。
3. 在 Java 代码中实现 `org.flowable.engine.delegate.Expression` 接口,并实现 `getValue(DelegateExecution execution)` 方法,用于计算 SpEL 表达式的值:
```
@Component("orderAmountExpression")
public class OrderAmountExpression implements Expression {
@Override
public Object getValue(DelegateExecution execution) {
Order order = (Order) execution.getVariable("order");
return order.getAmount() > 1000;
}
}
```
这里的 `Order` 是一个订单对象,`execution` 参数是 `DelegateExecution` 类型的对象,可以用于获取流程变量等信息。
这样就可以实现动态条件表达式了。当流程执行到 `<bpmn2:sequenceFlow>` 元素时,会自动调用委托表达式中定义的 SpEL 表达式来计算条件表达式的值,从而决定流程的走向。
阅读全文