Flowable源码注释(三十九)任务监听器

本文介绍了Flowable流程引擎中四个重要的任务监听器实现类:UserTaskIdHandler用于记录历史任务ID,UserTaskAssignmentHandler处理任务分配记录,ExpressionTaskListener执行表达式任务监听,而DelegateExpressionTaskListener则用于调度执行delegateExpression定义的任务监听。这些监听器在工作流中起到了关键的事件响应和处理作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flowable源码地址:https://github.com/flowable/flowable-engine

Flowable-6.7.2 源码注释地址:https://github.com/solojin/flowable-6.7.2-annotated

包路径:org.flowable.engine.delegate

TaskListener 为任务监听接口类,实现类有4种

  • UserTaskIdHandler 用户任务ID处理类

  • UserTaskAssignmentHandler 用户任务代理人处理类

  • ExpressionTaskListener 表达式任务监听器

  • DelegateExpressionTaskListener 代理表达式任务监听器

TaskListener 任务监听器接口类

package org.flowable.engine.delegate;

/**
 * 在这里,为了向后兼容,最好使用该任务监听器接口类{@link org.flowable.task.service.delegate.TaskListener}。
 *
 * @author Tom Baeyens
 * @author Joram Barrez
 */
public interface TaskListener extends org.flowable.task.service.delegate.TaskListener {

}

UserTaskIdHandler 用户任务ID处理类

package org.activiti.engine.impl.history.handler;

import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;

/**
 * 为用户任务活动创建任务时调用。允许在历史活动中记录任务id。
 *
 * 负责更新在历史活动表ACT_HI_ACTINST中的任务ID值
 * @author Frederik Heremans
 */
public class UserTaskIdHandler implements TaskListener {

    @Override
    public void notify(DelegateTask task) {
        Context.getCommandContext().getHistoryManager()
                .recordTaskId((TaskEntity) task);
    }

}

UserTaskAssignmentHandler 用户任务代理人处理类

package org.activiti.engine.impl.history.handler;

import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;

/**
 * 负责更新在历史活动表ACT_HI_ACTINST中的任务节点负责人,对应该表的ASSIGNMENT_字段
 * 
 * @author Tom Baeyens
 */
public class UserTaskAssignmentHandler implements TaskListener {

    @Override
    public void notify(DelegateTask task) {
        Context.getCommandContext().getHistoryManager()
                .recordTaskAssignment((TaskEntity) task);
    }

}

ExpressionTaskListener 表达式任务监听器

package org.flowable.cmmn.engine.impl.listener;

import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;

/**
 * 负责调度执行expression方式创建的任务监听器
 *
 * @author Joram Barrez
 */
public class ExpressionTaskListener implements TaskListener {

    protected Expression expression;

    public ExpressionTaskListener(Expression expression) {
        this.expression = expression;
    }

    @Override
    public void notify(DelegateTask delegateTask) {
        expression.getValue(delegateTask);
    }

    /**
     * 返回此任务监听器的表达式文本。
     */
    public String getExpressionText() {
        return expression.getExpressionText();
    }

}

DelegateExpressionTaskListener 代理表达式任务监听器

package org.flowable.cmmn.engine.impl.listener;

import java.util.List;

import org.flowable.cmmn.engine.impl.util.DelegateExpressionUtil;
import org.flowable.cmmn.model.FieldExtension;
import org.flowable.common.engine.api.FlowableIllegalArgumentException;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;

/**
 * 负责调度执行delegateExpression方式创建的任务监听器
 *
 * @author Joram Barrez
 */
public class DelegateExpressionTaskListener implements TaskListener {

    protected Expression expression;
    protected List<FieldExtension> fieldExtensions;

    public DelegateExpressionTaskListener(Expression expression, List<FieldExtension> fieldExtensions) {
        this.expression = expression;
        this.fieldExtensions = fieldExtensions;
    }

    @Override
    public void notify(DelegateTask delegateTask) {
        Object delegate = DelegateExpressionUtil.resolveDelegateExpression(expression, delegateTask, fieldExtensions);

        if (delegate instanceof TaskListener) {
            TaskListener taskListener = (TaskListener) delegate;
            taskListener.notify(delegateTask);
        } else {
            // 委托表达式“+ expression +”未解析为任务监听器的实现
            throw new FlowableIllegalArgumentException("Delegate expression " + expression + " did not resolve to an implementation of " + TaskListener.class);
        }
    }

    /**
     * 返回此任务监听器的表达式文本。
     */
    public String getExpressionText() {
        return expression.getExpressionText();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值