bpmn.js+flowable的任务监听器详解

在使用 bpmn.js 与 Flowable 集成时,任务监听器(Task Listener)是用于处理流程任务生命周期事件的重要机制。它允许你在任务的特定阶段执行自定义逻辑,比如分配任务、创建任务或完成任务。

下面将结合 BPMN 2.0 规范和 Flowable 的实现,详细说明任务监听器的用法及其配置方式。

1. 任务监听器的基本概念

任务监听器(taskListener)是在 BPMN 流程中为某个 userTask 定义的回调函数,当任务发生特定事件时被触发。

支持的事件类型包括:

  • create:任务刚被创建时触发。
  • assignment:任务被分配给某个用户或组时触发。
  • completion:任务完成前触发(在完成操作之前)。
  • delete:任务被删除时触发(较少使用)。
  • update:任务属性更新时触发(Flowable 特有)。

 2. 在 BPMN 文件中配置任务监听器

在 BPMN XML 中,你可以通过以下方式为一个 userTask 添加监听器:

<userTask id="taskId1" name="审批任务">
  <extensionElements>
    <flowable:taskListener event="assignment" class="com.example.AssignmentHandler"/>
    <flowable:taskListener event="create" delegateExpression="${taskCreateListener}"/>
    <flowable:taskListener event="completion" expression="${execution.setVariable('approved', true)}"/>
  </extensionElements>
</userTask>
  • 定义了一个用户任务节点,ID为"taskId1",名称为"审批任务"
  1. <extensionElements> 中的三个监听器配置:
  • assignment事件监听器:当任务被分配给处理人时触发,使用Java类com.example.AssignmentHandler处理
  • create事件监听器:当任务创建时触发,使用Spring表达式${taskCreateListener}指定的Bean处理
  • completion事件监听器:当任务完成时触发,执行表达式${execution.setVariable('approved', true)},设置流程变量"approved"为true

可选属性:

属性说明
event必填,监听的事件类型
class指定 Java 类名,需实现 org.flowable.task.service.delegate.TaskListener 接口
expression使用 EL 表达式执行逻辑
delegateExpression使用 Spring Bean 或表达式动态注入监听器实例

3. bpmn.js 图形界面配置任务监听器

在使用 bpmn.js 编辑 BPMN 流程图时,可以通过属性面板添加任务监听器。

示例步骤:

  1. 打开 bpmn.js 编辑器。
  2. 选择某个 User Task
  3. 在属性面板中找到 Extension Elements
  4. 添加 flowable:taskListener
    • 设置 Event(如 assignment)
    • 设置 Class 或 Delegate Expression
const { modeling } = bpmnJS.get('modeling');
const elementRegistry = bpmnJS.get('elementRegistry');

const userTask = elementRegistry.get('Activity_1');

modeling.updateProperties(userTask, {
  extensionElements: createTaskListeners([
    {
      event: 'assignment',
      class: 'com.example.AssignmentHandler'
    },
    {
      event: 'create',
      delegateExpression: '${taskCreateListener}'
    }
  ])
});

function createTaskListeners(listeners) {
  const factory = bpmnJS.get('bpmnFactory');
  const elements = listeners.map(listener => {
    return factory.create('flowable:TaskListener', listener);
  });

  return factory.create('bpmn:ExtensionElements', {
    values: elements
  });
}

💡 注意:

flowable:taskListener 是 Flowable 特有的扩展属性,不能直接在标准 BPMN 中使用。

bpmn.js 默认不支持 Flowable 的扩展属性,需要加载对应的 bpmn-moddle 插件来支持 Flowable 元素。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值