flowable中代码调用任务监听器

flowable中代码调用任务监听器

背景

flowable-ui中可以通过xml对用户任务的任务监听器进行定义,包括任务指派、任务创建、任务完成等状态变化的时候,触发相应事件,相应监听器会执行相关代码。
在需求中,需要自定义事件,,然后通过按钮触发的方式主动触发,执行相应的监听器逻辑。

逻辑

通过查看flowable的源码,发现监听器的触发是通过该类实现的(org.flowable.engine.impl.bpmn.listener.ListenerNotificationHelper) ,所以只参考方法逻辑,进行调用即可。
参照flowable中方法执行的命令模式,自定义cmd类,注入相应参数执行即可

具体代码

任务事件触发执行类

package com.zxy.manage.flow.cmd;

import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.cmd.NeedsActiveTaskCmd;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;

/**
 * @date 2023/5/9 17:21
 * 任务事件触发cmd
 * 用于手动触发任务的相关事件,包括:
 * 1、催办事件
 */
public class TaskEventNotifyCmd extends NeedsActiveTaskCmd<Void> {
    protected String eventType;

    private IOperationLogService operationLogService;

    public TaskEventNotifyCmd(String taskId, String eventType, IOperationLogService operationLogService) {
        super(taskId);
        this.eventType = eventType;
        this.operationLogService = operationLogService;
    }

    @Override
    protected Void execute(CommandContext commandContext, TaskEntity task) {
        ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
        processEngineConfiguration.getListenerNotificationHelper().executeTaskListeners(task, eventType);
        if (FlowConstant.TASK_EVENT_URGE_TASK.equals(eventType)) {
            // 记录操作日志
            operationLogService.saveTaskLog(task, OperationLogEnum.TASK_URGE);
        }
        return null;
    }
}

cmd执行方法

    @Autowired
    private ManagementService managementService;

    public void taskEventNotify(String taskId, String eventType) {
        TaskEventNotifyCmd taskEventNotifyCmd = new TaskEventNotifyCmd(taskId, eventType, operationLogService);
        managementService.executeCommand(taskEventNotifyCmd);
    }

联系作者

如果有任何疑问,请邮件联系作者。
zhuxuanyong@163.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Flowable 是一个开源的工作流引擎,它可以帮助我们设计和执行各种类型的工作流程。在 Flowable ,我们可以通过设置任务监听器来对任务的生命周期进行监听和处理。 要设置任务监听器,需要按照以下步骤进行操作: 1. 创建一个实现了 org.flowable.engine.delegate.TaskListener 接口的监听器类,该接口定义了任务监听器的回调方法。 2. 在该监听器,实现需要的任务生命周期回调方法,如 `notify` 方法。你可以根据自己的需求在这些方法编写相应的逻辑。 3. 在流程定义文件(BPMN 文件),为任务节点添加监听器属性,并引用上一步创建的监听器类。 具体示例请参考以下代码: ```java import org.flowable.engine.delegate.DelegateTask; import org.flowable.engine.delegate.TaskListener; public class MyTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { // 在这里编写任务生命周期回调时需要执行的逻辑 // 可以获取任务相关信息,如任务ID、任务名称、任务负责人等 // delegateTask.getId(); // delegateTask.getName(); // delegateTask.getAssignee(); } } ``` 然后,在流程定义文件的任务节点添加监听器属性: ```xml <userTask id="task1" name="My Task" flowable:assignee="${assignee}"> <extensionElements> <flowable:taskListener event="create" expression="${myTaskListener}" /> </extensionElements> </userTask> ``` 在上述代码,`${assignee}` 是一个表达式,用于设置任务的负责人。`${myTaskListener}` 是一个表达式,用于引用上面创建的监听器类。 这样,当流程执行到该任务节点时,任务监听器的相应方法将被调用,并可以执行你定义的逻辑。 希望以上信息对你有帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

siihmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值