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();
}
}