执行监听器、任务监听器
Flowable 提供了执行监听器(Execution Listener)和任务监听器(Task Listener)两种扩展机制,用于在流程/任务的特定事件点执行自定义逻辑。
1. 执行监听器
执行监听器在流程节点执行时触发,支持 start(开始)和 end(结束)两个事件。
1.1 Java 类方式
实现 org.flowable.engine.delegate.JavaDelegate 接口:
java
@Slf4j
@Component
public class MyExecutionListener implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
log.info("节点 {} 执行", execution.getCurrentActivityId());
// 自定义逻辑
}
}1.2 委托表达式
使用 ${bean.method(execution)} 格式,调用 Spring Bean 的方法。
1.3 Spring 表达式
直接使用 SpEL 表达式,如 ${myService.doSomething()}。
2. 任务监听器
任务监听器在用户任务的特定事件点触发,支持更多事件类型:
| 事件 | 触发时机 |
|---|---|
| create | 任务创建时 |
| assignment | 任务分配审批人时 |
| complete | 任务完成时 |
| delete | 任务删除时 |
| update | 任务更新时 |
| timeout | 任务超时时 |
2.1 Java 类方式
实现 org.flowable.task.service.delegate.TaskListener 接口:
java
@Slf4j
@Component
public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
log.info("任务 {} 事件: {}",
delegateTask.getName(), delegateTask.getEventName());
}
}2.2 委托表达式
同执行监听器,使用 ${bean.method(task)} 格式。
2.3 Spring 表达式
直接使用 SpEL 表达式。
3. 流程监听器模板
RuoYi Office 提供了流程监听器模板管理功能,便于复用监听器配置。
3.1 使用场景
当多个流程需要使用相同的监听器时,可以创建模板,在流程设计时直接选择。
3.2 表结构
监听器模板存储在 bpm_process_listener 表:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint | 编号 |
| name | varchar(100) | 名称 |
| type | varchar(50) | 类型(executionListener/taskListener) |
| status | tinyint | 状态 |
| event | varchar(50) | 监听事件 |
| value_type | varchar(50) | 值类型(class/delegateExpression/expression) |
| value | varchar(500) | 监听器值 |
3.3 管理界面
在「流程中心 → 流程监听器」页面管理监听器模板。