文章目录
4.flowable工作流使用任务监听器、执行监听器
4.1任务监听器
- 任务监听器,即用于监听任务,可以监听任务的创建、分配、完成、以及删除共四个事件。
- TaskListener 的事件类型和执行时机是与任务相关的,它可以访问任务相关的信息,并可以对任务进行操作(例如设置任务的执行人、指定任务的代理人等),因此通常用于处理与任务相关的事件。
- 事件触发类型:
- create(创建):在任务被创建且所有的任务属性设置完成后才触发
- assignment(指派):在任务被分配给某个办理人之后触发
- complete(完成):在配置了监听器的上一个任务完成时触发
- delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发
- 事件类型:
- 类 (示例:com.owater.demoflowable.listener.FlowExecutionListener)
- 表达式(使用的是Spring EL表达式)
- 委托表达式
4.2执行监听器
- 执行监听器,针对整个流程实例的事件监听器,它可以监听流程实例启动、结束、活动开始、活动结束、连线选择等事件。
- ExecutionListener 的事件类型和执行时机都是固定的,它不能直接访问任务相关的信息(例如任务的候选人、任务的执行者等),因此通常用于处理与流程实例相关的事件。
- 事件触发类型: 启动(start)、结束(end)、在用(take)
- 事件类型:
- 类(示例:com.owater.demoflowable.listener.FlowExecutionListener)
- 表达式(使用的是Spring EL表达式)
- 委托表达式
- 区分点:
- 能否访问任务相关信息(任务候选人、任务执行者):
- 执行监听器是针对整个流程实例的事件监听器,它可以监听流程实例启动、结束、活动开始、活动结束、连线选择等事件;执行时机都是固定的,它不能直接访问任务相关的信息
- 任务监听器可以访问
- 能否访问任务相关信息(任务候选人、任务执行者):
- 作用:
- 动态分配节点处理人。通过前一个节点设置的变量,在运行到下一个节点时设置对应的处理人;
- 当流程运行到某个节点时,发送邮件或短信给待办用户;
4.2配置任务/执行监听器
4.2.1新增任务监听器
package org.dromara.workflow.listener;
/**
* 自定义任务监听器
*/
@Slf4j
@Component()
public class MyTaskListener implements TaskListener {
public void notify(DelegateTask delegateTask) {
System.out.println("============自定义任务监听器 start============");
String taskDefinitionKey = delegateTask.getTaskDefinitionKey();
String eventName = delegateTask.getEventName();
System.out.println("事件名称:" + eventName);
System.out.println("监听器:" + taskDefinitionKey);
System.out.println("============自定义任务监听器 end============");
}
}
4.2.2新增执行监听器
package org.dromara.workflow.listener;
/**
* 自定义执行监听器
*/
@Slf4j
@Component
public class MyExecutionListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
System.out.println("============自定义执行监听器 start============");
String eventName = execution.getEventName();
String currentActivitiId = execution.getCurrentActivityId();
System.out.println("事件名称:" + eventName);
System.out.println("执行器:" + currentActivitiId);
System.out.println("============自定义执行监听器 end============");
}
}
4.2.2任务节点配置任务/执行监听器
(1)选择类的类型
- 选择监听器触发事件
- 选择类型:类/表达式/委托表达式
- 类:填写监听器所在包路径+类名
(2)使用表达式类型
- Flowable 的表达式语法类似Spring EL,
- ${testExpress.test()} testExpress代表对象名,因为@Component生成的对象名默认以类名称命名
- testExpress.test() 代表调用testExpress的test()方法
@Slf4j
@Component
public class TestExpress {
public void test() {
log.info("TestExpress被调用了");
}
}
(3)使用委托表达式
-
${flowTaskListener} 映射 命名为 flowTaskListener 的对象
@Slf4j @Component public class FlowTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { log.info("任务监听器:{}", delegateTask); } }
4.3测试
- 填写一个请假表单,流程到达组长审批 节点,触发任务监听器和执行监听器
- 首先触发start事件,调用我们自定义的执行监听器,随后触发assignment和create事件,执行自定义任务监听器的内容
- 当组长审批节点 提交后,观看控制台输出:首先触发complete事件再触发delete事件,最后触发end事件。
4.4小结
- ExecutionListener 和 TaskListener 都是 Flowable 提供的事件监听器,TaskListener 是针对任务的事件监听器,ExecutionListener 是针对整个流程实例的事件监听器
- 任务监听器有四个触发事件:指派、创建、完成、删除
- 执行监听器有三个触发事件:开始、结束、启用
- 若一个任务节点同时设置任务/执行监听器,触发顺序如下:
- 流程到达该节点:执行监听器的开始事件——>任务监听器的指派、创建事件
- 该节点提交:任务监听器的完成、删除事件——>执行监听器的结束事件
- 后面将学习flowable的任务多实例、节点会签/或签、审批动作(委托、转办、退回、终止等)