监听事件分为:执行监听、任务监听。

1. 执行监听事件写法

<flowable:executionListener class="" expression="表达式"  delegateExpression="委托表达式" event="事件">
          <flowable:field name="参数名" stringValue="字符串" expression="表达式" />
</flowable:executionListener>

<!--
类:示例 com.company.MyCustomListener,自定义类必须实现 org.flowable.engine.delegate.ExecutionListener接口

表达式:示例 ${myObject.callMethod(task, task.eventName)} 

委托表达式:示例 ${myListenerSpringBean} ,该 springBean 需要实现 org.flowable.engine.delegate.ExecutionListener接口

event: 事件执行的时刻(包括:
                   start 开始、take 启用、end 结束)
-->

2. 任务监听事件写法

<flowable:taskListener class="" expression="表达式"  delegateExpression="委托表达式" event="事件">
          <flowable:field name="参数名" stringValue="字符串" expression="表达式" />
</flowable:taskListener>

<!--任务监听事件:taskListener
自定义类必须实现 org.flowable.task.service.delegate.TaskListener接口
            event: 事件执行的时刻(包括:
                   create(创建):当任务已经创建,并且所有任务参数都已经设置时触发。
                   assignment(指派):当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,在触发create事件之前,会首先触发assignment事件。
                   complete(完成):当任务已经完成,从运行时数据中删除前触发。
                   delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发。)
    任务执行参数:field(可配置多个)
-->

3. 创建流程

目的,创建一个(开始—>审核—>结束)流程,并在审核节点设置一个【任务监听】事件。

xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
             xmlns:flowable="http://flowable.org/bpmn"
             targetNamespace="http://www.flowable.org/processdef">

  <process id="process_audit3" name="审核流程">

    <startEvent id="startNode1" name="开始">
      <outgoing>Flow_0ksehsm</outgoing>
    </startEvent>

    <endEvent id="Event_08rzeth" name="结束">
      <incoming>Flow_18upiqx</incoming>
    </endEvent>

    <sequenceFlow id="Flow_0ksehsm" sourceRef="startNode1" targetRef="Activity_0ipmowu" />
    <sequenceFlow id="Flow_18upiqx" sourceRef="Activity_0ipmowu" targetRef="Event_08rzeth" />

    <userTask id="Activity_0ipmowu" name="审核" flowable:assignee="1">
      <extensionElements>
        <flowable:taskListener class="org.flowable.audit.TaskEvent" event="complete">
          <flowable:field name="message" stringValue="执行完成" />
        </flowable:taskListener>
      </extensionElements>

      <incoming>Flow_1huwgzm</incoming>
      <outgoing>Flow_18upiqx</outgoing>
    </userTask>

  </process>

</definitions>

4. 事件执行类

注意xml文件中的任务监听类,需要在项目中相应位置建立。
在这里插入图片描述
在这里插入图片描述
任务监听类需要实现TaskListener

package org.flowable.audit;

import org.flowable.engine.impl.el.FixedValue;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;
import org.springframework.stereotype.Component;

@Component
public class TaskEvent implements TaskListener {

    // 名称要与流程定义中的参数名称一致
    private FixedValue message;

    @Override
    public void notify(DelegateTask delegateTask) {
        // 获取监听事件中的参数
        String val = message.getExpressionText();
        System.out.println("获取到的任务执行参数为:" + val);
    }
}

5. 启动流程

启动项目后,启动流程
在这里插入图片描述

现在流程到达了审核节点
在这里插入图片描述

然后根据taskId审批通过此节点
在这里插入图片描述
查看控制台
在这里插入图片描述
可以看到审批通过时,执行了监听事件。

完事。

下一节写啥呢 ?
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐