flowable uel表达式
时间: 2023-08-23 19:16:21 浏览: 72
Flowable使用UEL(Unified Expression Language)进行表达式解析。UEL在Flowable中有两种类型的表达式:值表达式和方法表达式。值表达式可以用于Java服务任务、执行监听器、任务监听器和条件顺序流等。Flowable通过抽象使得值表达式和方法表达式都可以在需要表达式的地方使用。注意,如果UEL表达式中引用的流程变量名不存在,则会报错。如果流程变量值为空null,则流程不按照UEL表达式执行,而是直接结束。如果所有的UEL表达式都不满足条件,则流程也会结束。如果连线没有设置条件,流程会走flow序号较小的那条线。
相关问题
flowable 条件表达式生成
Flowable 中的条件表达式可以使用表达式语言来实现,常用的表达式语言有 EL 表达式和 JUEL 表达式。在 Flowable 中,条件表达式可以在多个地方使用,例如在分支条件中、任务监听器中等。
下面是一个简单的例子,展示了如何在 Flowable 中使用 JUEL 表达式来实现条件表达式:
```
<sequenceFlow id="flow1" sourceRef="start" targetRef="task1">
<conditionExpression xsi:type="tFormalExpression">
${input == 'approve'}
</conditionExpression>
</sequenceFlow>
```
在这个例子中,如果变量 `input` 的值等于 'approve',那么就会选择走向 `task1` 的流程。如果不等于 'approve',则会选择其他的流程。
你也可以使用其他的表达式语言来实现条件表达式,只需要在 `conditionExpression` 标签中指定对应的表达式语言即可。例如,如果要使用 EL 表达式,可以这样写:
```
<sequenceFlow id="flow1" sourceRef="start" targetRef="task1">
<conditionExpression xsi:type="tFormalExpression" language="http://www.w3.org/TR/1999/REC-xpath-19991116">
${input == 'approve'}
</conditionExpression>
</sequenceFlow>
```
需要注意的是,不同的表达式语言可能有不同的语法和规则,需要根据具体情况进行调整。另外,在编写条件表达式时,也需要考虑到变量的作用域和类型等问题。
flowable 投票表达式
在 flowable 中实现投票节点的投票表达式可以通过任务监听器或者流程变量来实现。以下是两种实现方式:
1. 任务监听器方式:
在投票节点上添加任务监听器,监听器可以在任务完成时触发。在监听器中可以编写投票表达式,如下所示:
```
public class VoteTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
// 获取投票结果
Boolean voteResult = (Boolean) delegateTask.getVariable("voteResult");
// 获取投票比例
Integer voteRatio = (Integer) delegateTask.getVariable("voteRatio");
// 获取已投票数
Integer votedCount = (Integer) delegateTask.getVariable("votedCount");
// 获取总票数
Integer totalCount = (Integer) delegateTask.getVariable("totalCount");
// 判断是否通过投票
if (voteResult && votedCount >= totalCount * voteRatio / 100) {
// 投票通过
delegateTask.setVariable("result", "approved");
} else {
// 投票不通过
delegateTask.setVariable("result", "rejected");
}
}
}
```
2. 流程变量方式:
在投票节点上添加流程变量,变量可以在流程中传递和计算。在投票节点的出口条件中使用表达式来计算投票结果,如下所示:
```
${approvedCount >= totalCount * voteRatio / 100}
```
其中 approvedCount 为通过投票的数量,totalCount 为总投票数量,voteRatio 为投票比例。
以上是两种实现方式,可以根据具体业务需求选择适合的方式来实现投票节点的投票表达式。