首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flowable UEL 表达式速查表

Flowable UEL 表达式速查表

原创
作者头像
用户7561536
发布于 2026-10-08 17:50:38
发布于 2026-10-08 17:50:38
440
举报

🎯 一、核心上下文对象

对象

作用域

说明

execution

全局

当前执行实例,最常用

task

用户任务

仅在任务监听器或分配中可用

authenticatedUserId

全局

当前登录用户 ID(需提前设置)


🔧 二、execution 常用属性与方法

代码语言:java
复制
execution.processInstanceId           // 流程实例 ID
execution.id                          // 执行 ID
execution.currentActivityId           // 当前节点 ID
execution.processInstanceBusinessKey  // 业务主键
execution.tenantId                    // 租户 ID
execution.parentId                    // 父执行 ID(子流程)
execution.superExecutionId            // 调用活动的父流程 ID

✅ 变量访问

代码语言:java
复制
execution.variable('name')            // 获取变量
execution.variables                   // 所有变量(Map)
execution.setVariable('key', value)   // 设置变量(在监听器中)

📝 三、task 任务对象(仅限用户任务)

代码语言:java
复制
task.id                    // 任务 ID
task.assignee              // 受理人
task.name                  // 任务名称
task.createTime            // 创建时间
task.dueDate               // 到期时间
task.priority              // 优先级(0-100)
task.owner                 // 任务所有者
task.taskDefinitionKey   // 任务定义 Key

🔄 四、多实例专用变量

变量

说明

nrOfInstances

总实例数

nrOfActiveInstances

活跃实例数

nrOfCompletedInstances

已完成实例数

loopCounter

当前索引(从 0 开始)

示例:

代码语言:xml
复制
<completionCondition>${nrOfCompletedInstances >= 2}</completionCondition>
<completionCondition>${nrOfCompletedInstances / nrOfInstances >= 0.6}</completionCondition>

⚙️ 五、服务对象调用

服务

用途

示例

runtimeService

启动流程、查询执行

${runtimeService.startProcessInstanceByKey('subProc')}

taskService

操作任务

${taskService.complete(task.id)}

historyService

查询历史

${historyService.createHistoricTaskInstanceQuery().count()}

identityService

用户/组查询

${identityService.createUserQuery().userId('admin').singleResult()}


🧩 六、Spring Bean 与工具类调用

类型

示例

自定义服务

${approvalService.getApprover(dept, amount)}

规则引擎

${ruleEngine.validate(appData)}

工具类

${DateUtils.addDays(createDate, 3)}

静态方法

${StringUtils.isEmpty(name)}

✅ 要求:Bean 必须注册到 Spring 容器。


📥 七、在 BPMN 元素中的使用场景

1. 用户任务分配

代码语言:xml
复制
<userTask flowable:assignee="${approver}"/>
<userTask flowable:candidateUsers="${user1, user2}"/>
<userTask flowable:candidateGroups="${roleService.getGroups(dept)}"/>

2. 动态到期时间

代码语言:xml
复制
<userTask flowable:dueDate="${DateUtils.addBusinessDays(createDate, 5)}"/>

3. 条件序列流

代码语言:xml
复制
<conditionExpression>${amount > 10000}</conditionExpression>
<conditionExpression>${status == 'APPROVED' && urgency == 'HIGH'}</conditionExpression>

4. 服务任务执行

代码语言:xml
复制
<serviceTask flowable:expression="${orderService.process(execution.processInstanceId)}"/>

5. 监听器(执行/任务)

代码语言:xml
复制
<flowable:executionListener event="start" expression="${logger.info('流程启动')}"/>
<flowable:taskListener event="complete" expression="${notification.send(task.assignee)}"/>

6. 边界事件动态超时

代码语言:xml
复制
<boundaryEvent>
  <timerEventDefinition>
    <timeDuration>${timeoutDuration}</timeDuration>
  </timerEventDefinition>
</boundaryEvent>

7. 表单字段动态值

代码语言:xml
复制
<flowable:formProperty id="total" value="${execution.variable('amount') * 1.1}"/>

🛡️ 八、最佳实践与安全建议

项目

建议

性能

避免在表达式中执行远程调用或复杂计算

空安全

使用 ?. 和 ?::${user?.name ?: '未知'}

默认值

${priority ?: 50}

日志调试

${logger.debug('变量: ' + execution.variables)}

安全

禁止拼接用户输入:❌ ${input + '==true'}

可读性

复杂逻辑封装到 Spring Bean


💡 九、常用表达式模板

场景

表达式

动态审批人

${approvalService.getApprover(department, amount)}

高额审批路由

${amount > 10000}

基于历史判断

${historyService.createHistoricTaskInstanceQuery().taskAssignee(authenticatedUserId).count() > 0}

设置发起人

${execution.setVariable('starter', authenticatedUserId)}

任务完成通知

${notificationService.notify(task.assignee, '已完成')}

日期计算

${DateUtils.addDays(execution.variable('startDate'), 7)}


📚 十、参考资料


✅ 使用建议:

  1. 将此速查表打印张贴在开发区
  2. 导出为 PDF 发送给团队成员
  3. 在 IDE 中配置代码片段(Live Templates)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 🎯 一、核心上下文对象
  • 🔧 二、execution 常用属性与方法
    • ✅ 变量访问
  • 📝 三、task 任务对象(仅限用户任务)
  • 🔄 四、多实例专用变量
    • 示例:
  • ⚙️ 五、服务对象调用
  • 🧩 六、Spring Bean 与工具类调用
  • 📥 七、在 BPMN 元素中的使用场景
    • 1. 用户任务分配
    • 2. 动态到期时间
    • 3. 条件序列流
    • 4. 服务任务执行
    • 5. 监听器(执行/任务)
    • 6. 边界事件动态超时
    • 7. 表单字段动态值
  • 🛡️ 八、最佳实践与安全建议
  • 💡 九、常用表达式模板
  • 📚 十、参考资料
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档