首页 > 其他分享 >【Flowable | 第三篇】flowable工作流使用任务监听器、执行监听器

【Flowable | 第三篇】flowable工作流使用任务监听器、执行监听器

时间:2024-07-20 10:01:17浏览次数:9  
标签:触发 Flowable flowable 任务 事件 监听器 执行 表达式

在这里插入图片描述

文章目录

4.flowable工作流使用任务监听器、执行监听器

4.1任务监听器

  1. 任务监听器,即用于监听任务,可以监听任务的创建、分配、完成、以及删除共四个事件。
  2. TaskListener 的事件类型和执行时机是与任务相关的,它可以访问任务相关的信息,并可以对任务进行操作(例如设置任务的执行人、指定任务的代理人等),因此通常用于处理与任务相关的事件。
  3. 事件触发类型:
    1. create(创建):在任务被创建且所有的任务属性设置完成后才触发
    2. assignment(指派):在任务被分配给某个办理人之后触发
    3. complete(完成):在配置了监听器的上一个任务完成时触发
    4. delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发
  4. 事件类型:
    1. 类 (示例:com.owater.demoflowable.listener.FlowExecutionListener)
    2. 表达式(使用的是Spring EL表达式)
    3. 委托表达式

4.2执行监听器

  1. 执行监听器,针对整个流程实例的事件监听器,它可以监听流程实例启动、结束、活动开始、活动结束、连线选择等事件。
  2. ExecutionListener 的事件类型和执行时机都是固定的,它不能直接访问任务相关的信息(例如任务的候选人、任务的执行者等),因此通常用于处理与流程实例相关的事件。
  3. 事件触发类型: 启动(start)、结束(end)、在用(take)
  4. 事件类型:
    1. 类(示例:com.owater.demoflowable.listener.FlowExecutionListener)
    2. 表达式(使用的是Spring EL表达式)
    3. 委托表达式

img

  1. 区分点:
    1. 能否访问任务相关信息(任务候选人、任务执行者):
      1. 执行监听器是针对整个流程实例的事件监听器,它可以监听流程实例启动、结束、活动开始、活动结束、连线选择等事件;执行时机都是固定的,它不能直接访问任务相关的信息
      2. 任务监听器可以访问
  2. 作用:
    1. 动态分配节点处理人。通过前一个节点设置的变量,在运行到下一个节点时设置对应的处理人;
    2. 当流程运行到某个节点时,发送邮件或短信给待办用户;

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)选择类的类型
  1. 选择监听器触发事件
  2. 选择类型:类/表达式/委托表达式
  3. 类:填写监听器所在包路径+类名

image-20240717210007603

image-20240717210127019

image-20240717210218280

(2)使用表达式类型

image-20240717211629825

  1. Flowable 的表达式语法类似Spring EL,
  2. ${testExpress.test()} testExpress代表对象名,因为@Component生成的对象名默认以类名称命名
  3. testExpress.test() 代表调用testExpress的test()方法
@Slf4j
@Component
public class TestExpress {

    public void test() {
        log.info("TestExpress被调用了");
    }

}
(3)使用委托表达式

image-20240717211805590

  1. ${flowTaskListener} 映射 命名为 flowTaskListener 的对象

    @Slf4j
    @Component
    public class FlowTaskListener implements TaskListener {
    
        @Override
        public void notify(DelegateTask delegateTask) {
            log.info("任务监听器:{}", delegateTask);
        }
    
    }
    
    

4.3测试

  1. 填写一个请假表单,流程到达组长审批 节点,触发任务监听器和执行监听器
  2. 首先触发start事件,调用我们自定义的执行监听器,随后触发assignment和create事件,执行自定义任务监听器的内容

image-20240717204543506

  1. 当组长审批节点 提交后,观看控制台输出:首先触发complete事件再触发delete事件,最后触发end事件

image-20240717210607506

4.4小结

  1. ExecutionListener 和 TaskListener 都是 Flowable 提供的事件监听器,TaskListener 是针对任务的事件监听器,ExecutionListener 是针对整个流程实例的事件监听器
  2. 任务监听器有四个触发事件:指派、创建、完成、删除
  3. 执行监听器有三个触发事件:开始、结束、启用
  4. 若一个任务节点同时设置任务/执行监听器,触发顺序如下:
    1. 流程到达该节点:执行监听器的开始事件——>任务监听器的指派、创建事件
    2. 该节点提交:任务监听器的完成、删除事件——>执行监听器的结束事件
  5. 后面将学习flowable的任务多实例、节点会签/或签、审批动作(委托、转办、退回、终止等)

标签:触发,Flowable,flowable,任务,事件,监听器,执行,表达式
From: https://blog.csdn.net/weixin_61440595/article/details/140506028

相关文章

  • Flowable流程引擎核心事件详细解释说明并附上示例代码FlowableEventType
    Flowable核心事件详细解释说明并附上示例代码Flowable的核心事件类型下表列出引擎中的所有事件类型。每种类型对应org.flowable.engine.common.api.delegate.event.FlowableEventType中的一个枚举值。事件名称说明事件类ENGINE_CREATED本监听器所属的流程引擎已经创建,并......
  • Flowable流程引擎学习实践
    实操版本V6.7.2一、Flowable是什么Flowable是一个使用Java编写的轻量级业务流程引擎,使用ApacheV2license协议开源。2016年10月,Activiti工作流引擎的主要开发者离开Alfresco公司并在Activiti分支基础上开启了Flowable开源项目。基于Activitiv6beta4发布......
  • 过滤器和拦截器以及监听器
    过滤器(Filter)1过滤器是Web应用中的一个组件,它能够对客户端和服务器之间的请求(Request)和响应(Response)进行拦截和处理2过滤器基于函数回调机制,依赖于Servlet容器3过滤器可以对几乎所有的请求起作用,可以在请求到达Servlet之前或响应发送给客户端之后对请求和响应进行加工处理......
  • 微信小程序-自定义组件数据监听器observers
    一.监测自定义组件data值定义data值,在.js文件里面定义data值data:{num:10,count:100,obj:{name:'tom',age:10},arr:[1,2,3]}只有在data值进行改变后才会触发到数据监听的回调函数,如果数据没有改变回调函数不会被触发ob......
  • SpringBoot 项目启动后监听器执行操作:ContextRefreshEvent
    一Springboot运行时,会依次发送以下事件1. ApplicationStartingEvent 2. ApplicationEnvironmentPreparedEvent:当Environment已经准备好,在context创建前3. ApplicationContextInitializedEvent:在ApplicationContext创建和ApplicationContextInitializer都被调用后,但是......
  • springboot与flowable(3):启动、审批、各个Service服务
    一、启动流程        流程定义与实例的关系类似于Java的类与对象,通过定义的id创建流程实例,编写测试代码:packageorg.example.flowabledemo2;importorg.flowable.engine.RuntimeService;importorg.flowable.engine.runtime.ProcessInstance;importorg.ju......
  • 基于jeecgboot-vue3的Flowable流程-流程处理(一)
    因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。这部分修正一些流程处理中VForm3线上的一些bug问题1、初始化流程提交与现实的前端页面代码<!--初始化流程加载默认VForm3表单信息--><el-col:span="16":offset="4"v-if="formConfOpen">......
  • 06_第六章 会话_过滤器_监听器
    第六章会话_过滤器_监听器一会话1.1会话管理概述1.1.1为什么需要会话管理HTTP是无状态协议无状态就是不保存状态,即无状态协议(stateless),HTTP协议自身不对请求和响应之间的通信状态进行保存,也就是说,在HTTP协议这个级别,协议对于发送过的请求或者响应都不做持......
  • 基于jeecgboot-vue3的Flowable流程--抄送我的功能
    因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。1、抄送我的界面代码如下:<template><divclass="p-2"><!--查询区域--><divclass="jeecg-basic-table-form-container"><a-formref="formRef"@keyup.enter.nati......
  • Android studio(创建、监听器intent菜单)
    创建报错connectrunout可以查看这篇文章1.自动创建  2.设置输出日志信息logt+tab键之后会为当前的类自动生成一个TAG常量 关于日志过滤器 这时候在只有Log.v里面的消息,Log.d、i、w、e都没有出现。当输入MainActivity的时候过滤到与其相关的 3.手动创建选......