ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Flowable 监听器使用指南

Flowable 监听器使用指南 Flowable 监听器使用指南在 Flowable 流程引擎中监听器Listener是扩展流程行为的核心机制之一。它允许开发者在流程执行的特定时刻插入自定义逻辑而无需修改 BPMN 流程图本身。Flowable 主要提供两种监听器执行监听器ExecutionListener和任务监听器TaskListener。理解它们的区别和适用场景是用好 Flowable 的关键。一、执行监听器ExecutionListener执行监听器关注的是流程的流转而非用户任务本身。它监听的是流程实例在执行过程中的生命周期事件比如流程启动、节点进入、节点结束、连线被选中。触发事件类型执行监听器主要有三种事件事件触发时机适用元素start节点或流程开始执行时流程、活动节点end节点或流程执行结束时流程、活动节点take连线被选中通过时顺序流SequenceFlow需要注意start和end作用于流程实例和活动节点而take只对连线有效。可获取的值执行监听器的notify方法接收DelegateExecution对象通过它你可以访问getProcessInstanceId()— 流程实例 IDgetProcessDefinitionId()— 流程定义 IDgetCurrentActivityName()— 当前活动节点的名称getBusinessKey()/getProcessBusinessKey()— 流程实例的业务标识getVariable(String)/getVariables()— 读取流程变量getEventName()— 当前触发的事件名称getParentId()— 父执行 ID用于判断是否处于子流程中典型使用场景执行监听器适合处理流程级别的技术逻辑比如流程启动时初始化业务数据、节点结束时更新外部系统状态、连线被选中时记录流转日志等。由于它不直接关联用户任务因此无法获取任务级别的信息如候选人、办理人等。二、任务监听器TaskListener任务监听器专门针对用户任务监听任务自身的生命周期。如果说执行监听器关心的是“流程走到哪了”任务监听器关心的就是“任务发生了什么”。触发事件类型任务监听器的事件粒度更细事件触发时机create任务被创建所有属性设置完成后assignment任务被分配给某个办理人后complete任务完成、尚未从运行数据中删除时delete任务即将被删除前正常完成也会触发其中assignment事件在create之前触发这是因为引擎需要先确定办理人才能保证create时任务的所有属性都已就绪。可获取的值任务监听器接收DelegateTask对象它提供了丰富的任务级信息getId()— 任务 IDgetName()— 任务名称getDescription()— 任务描述getAssignee()— 当前办理人getOwner()— 任务所有者getProcessInstanceId()— 所属流程实例 IDgetExecutionId()— 关联的执行 IDgetProcessDefinitionId()— 流程定义 IDgetCreateTime()— 任务创建时间getDueDate()— 任务截止日期getPriority()— 任务优先级0-100getVariable(String)/getVariables()— 读取流程变量getEventName()— 触发监听器的事件名称getCandidates()— 候选人/候选组集合更重要的是DelegateTask提供了修改任务状态的能力setAssignee()可以动态指定办理人addCandidateUser()/addCandidateGroup()可以添加候选人或候选组setDueDate()可以设置截止时间。典型使用场景任务监听器最适合处理与用户任务紧密相关的逻辑。最经典的用法是动态分配审批人在任务create时根据表单字段或流程变量计算并设置任务的办理人。其他场景包括任务创建时发送通知、任务分配后记录操作日志、任务完成前校验数据完整性等。三、两者的核心区别理解这两种监听器的分工可以用一句话概括ExecutionListener 面向流程TaskListener 面向任务。维度ExecutionListenerTaskListener监听对象流程实例、活动节点、连线用户任务核心接口DelegateExecutionDelegateTask能否操作任务不能能设置办理人、候选人等能否获取任务信息不能能任务名称、办理人、截止日期等典型用途流程级业务逻辑、状态同步动态分配、通知、任务校验在选择时一个简单的判断标准是如果你的逻辑需要知道“谁在处理这个任务”或者“这个任务是什么”就用 TaskListener如果只关心“流程走到了哪个节点”用 ExecutionListener 即可。四、配置方式说明无论哪种监听器在 BPMN 中都有三种配置方式分别适用于不同的项目结构class 方式直接指定 Java 类的全限定名。适合简单的、无需依赖注入的场景。delegateExpression 方式使用${beanName}指向一个 Spring Bean。在 Spring Boot 项目中推荐这种方式因为可以方便地注入 Service、Repository 等组件。expression 方式直接写表达式如${myService.process(task)}。适合逻辑简单、单次调用的场景不建议在 expression 中写复杂业务逻辑。五、写在最后Flowable 的监听器机制本质上是一种事件驱动的扩展点。它把流程引擎的标准行为与业务自定义逻辑解耦开来引擎负责流转监听器负责在恰当的时机执行你的代码。用好监听器的关键在于选对类型。流程级的动作交给 ExecutionListener任务级的动作交给 TaskListener。如果混淆了两者轻则代码别扭重则出现“在 TaskListener 里拿不到节点信息”或者“在 ExecutionListener 里想改任务办理人改不了”的尴尬局面。希望这份指南能帮你理清 Flowable 监听器的使用脉络。
返回列表