Skip to content

执行监听器、任务监听器 ​

这篇解决什么 ​

在节点上挂一段 Java,让流程走到 start / end / create / complete 时回调。读完能对上菜单里的监听器模板、三种 valueType,以及改完为什么必须重新发布。

默认端口 48080,管理端前缀 /admin-api。PC 开发页 http://127.0.0.1:5800。模板在流程中心 → 流程设置 → 流程监听器。画布里的监听器面板可以手填,也可以从模板挑。

示意图:模板是设计期目录。发布后引擎按 BPMN 上的 class / expression 回调,不再回表查模板。

从哪改 ​

名称说明仓库路径
模板接口@RequestMapping("/bpm/process-listener")ruoyi-office/yudao-module-bpm/.../controller/admin/definition/BpmProcessListenerController.java
模板表bpm_process_listener.../dal/dataobject/definition/BpmProcessListenerDO.java
保存校验class 要能加载,表达式必须 ${...}.../service/definition/BpmProcessListenerServiceImpl.java
类型execution / task.../enums/definition/BpmProcessListenerTypeEnum.java
值类型class / delegateExpression / expressionBpmProcessListenerValueTypeEnum
内置任务监听SIMPLE 用户任务自动挂 ${bpmUserTaskListener}.../service/task/listener/BpmUserTaskListener.java
调用活动${bpmCallActivityListener}.../service/task/listener/BpmCallActivityListener.java
Demo三种执行、三种任务各一份.../framework/flowable/core/listener/demo/
PC 列表路由 /bpm/manager/process-listenerruoyi-office-vben/apps/web-antd/src/views/bpm/processListener/index.vue
选择弹窗执行监听 / 任务监听分开查.../processListener/components/select-modal.vue
BPMN 面板ElementListeners.vue / UserTaskListeners.vue.../bpmn-process-designer/package/penal/listeners/

官方菜单:2726 流程监听器。按钮 bpm:process-listener:query / create / update / delete。

只改模板不够

监听器写进 BPMN XML。保存模型再发布,运行中的实例仍走旧定义。SIMPLE 设计器不会把自定义监听器画成独立节点,复杂回调用 BPMN。

两种监听 ​

Flowable 手册把监听分成执行监听和任务监听。菜单的「类型」对应这两类,事件下拉不一样。

名称说明仓库路径
执行监听流程、活动、网关的 start / endFlowable 执行监听器
任务监听用户任务 create / assignment / complete / delete / update / timeoutFlowable 任务监听器

BpmProcessListenerTypeEnum.TASK 的显示名写成了「任务执行器」,界面和表字段仍用 task。按任务监听理解即可。

流程监听器列表

本系统截图:流程中心 → 流程设置 → 流程监听器。类型、事件、值类型三列决定设计器能选出什么。空表也可以先「新增」再回 BPMN 面板挑选。

三种写法 ​

保存模板时,BpmProcessListenerServiceImpl#validateCreateProcessListenerValue 会验值。

名称说明仓库路径
class填全限定类名。执行监听必须实现 JavaDelegate,任务监听必须实现 TaskListenerDemoDelegateClassExecutionListener / DemoDelegateClassTaskListener
delegateExpression${beanName},类还要注册成 Spring BeanDemoDelegateExpressionExecutionListener
expression${bean.method(execution)},普通方法即可DemoSpringExpressionExecutionListener

class 找不到类 → PROCESS_LISTENER_CLASS_NOT_FOUND。接口不对 → PROCESS_LISTENER_CLASS_IMPLEMENTS_ERROR。后两种不以 ${ 开头、不以 } 结尾 → PROCESS_LISTENER_EXPRESSION_INVALID。

执行监听 Demo:

text
cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.demo.exection.DemoDelegateClassExecutionListener
${demoDelegateExpressionExecutionListener}
${demoSpringExpressionExecutionListener.execute(execution)}

包名里的 exection 是历史拼写,不要改成 execution 再去找类。

内置监听 ​

SIMPLE 转 BPMN 时,SimpleModelUtils 会给用户任务补 create / assignment / complete 三个任务监听,实现都是 ${bpmUserTaskListener}。调用活动补 start 执行监听 ${bpmCallActivityListener}。

名称说明仓库路径
用户任务创建待办、指派、完成时同步状态BpmUserTaskListener.DELEGATE_EXPRESSION
调用活动子流程启动BpmCallActivityListener

自己加的监听不要覆盖这两个 Bean 名。业务回调另写类,挂到节点上。

示意图:发布切开设计和运行。改 Java 类要重启应用;改 XML 要重新发布模型。

配置与操作 ​

管理员在 流程监听器 登记 class / expression 模板,再到 BPMN 节点挂上。SIMPLE 用户任务发布时会自动挂 ${bpmUserTaskListener},不要覆盖这个 Bean 名。

改 Java 监听实现要重启应用;只改节点上挂的表达式或类名,重新发布模型。业务回写另走 FlowBillService,不要在演示监听里写库存。

开启见 流程功能设计。截图见上文列表。

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版