1. 任务监听器定义
用户任务UserTask的监听器,定义接口org.activiti.engine.delegate.TaskListener
任务监听器用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式
源码:
/**
* @author Tom Baeyens
*/
public interface TaskListener extends Serializable {
//create(创建):当任务已经创建,并且所有任务参数都已经设置时触发
String EVENTNAME_CREATE = "create";
/**assignment(指派):当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,
create事件触发前,首先触发assignment事件。这看起来不是自然顺序,
但是有实际原因的:当收到create事件时,我们通常希望查看任务的所有参数,包括办理人。**/
String EVENTNAME_ASSIGNMENT = "assignment";
//(完成):当任务已经完成,从运行时数据中删除前触发
String EVENTNAME_COMPLETE = "complete";
//(删除):在任务即将被删除前触发。请注意当任务通过completeTask正常完成时也会触发
String EVENTNAME_DELETE = "delete";
/**
* Not an actual event, used as a marker-value for {@link TaskListener}s that should be called for all events,
* including {@link #EVENTNAME_CREATE}, {@link #EVENTNAME_ASSIGNMENT} and {@link #EVENTNAME_COMPLETE} and {@link #EVENTNAME_DELETE}.
*/
String EVENTNAME_ALL_EVENTS = "all";
void notify(DelegateTask delegateTask);
}
结论:assignment事件比create先执行。
xml文件中定义
<userTask id="usertask2" name="User Task" activiti:assignee="c">
<extensionElements>
<activiti:taskListener event="all" class="com.daling.ch1.listener.MyExecutionListener"></activiti:taskListener>
</extensionElements>
</userTask>
2.监听类定义
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
/**
* 任务监听器用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式
*
* 任务监听器支持下列属性:
* event(事件)(必填):任务监听器将被调用的任务事件类型。可用的事件有:
* create(创建):当任务已经创建,并且所有任务参数都已经设置时触发。
* assignment(指派):当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,create事件触发前,首先触发
* assignment事件。这看起来不是自然顺序,但是有实际原因的:当收到create事件时,我们通常希望查看任务的所有参数,包括
* 办理人。
* complete(完成):当任务已经完成,从运行时数据中删除前触发。
* delete(删除):在任务即将被删除前触发。请注意当任务通过completeTask正常完成时也会触发
*
* class:需要调用的代理类。这个类必须实现 org.activiti.engine.delegate.TaskListener 接口
*
*
* expression:(不能与class属性一起使用):指定在事件发生时要执行的表达式。可以为被调用的对象传递 DelegateTask 对象与事件名(使用 task.eventName )作为参数
*
*
*
* delegateExpression:可以指定一个能够解析为 TaskListener 接口实现类对象的表达式。与服务任务类似
*
*
*/
@Slf4j
public class SiteReportUserTask implements TaskListener {
private static final long serialVersionUID = 3654543511891213996L;
@Override
public void notify(DelegateTask delegateTask) {
log.info("creattime: {}",delegateTask.getCreateTime());
log.info("getProcessInstanceId: {}",delegateTask.getProcessInstanceId());
log.info("数据库中的taskId主键: {}",delegateTask.getId());
log.info("任务名称: {}",delegateTask.getName());
delegateTask.setName("修改任务名称");
log.info("获取任务的描述信息: {}",delegateTask.getDescription());
delegateTask.setDescription("修改任务的描述信息");
/**
* lower priority: [0..19] lowest, [20..39] low, [40..59] normal, [60..79] high
* [80..100] highest
任务处理的优先级范围是0-100
*/
log.info("任务处理的优先级范围是0-100: {}",delegateTask.getPriority());
delegateTask.setPriority(1); /** 修改优先级*/
log.info("获取流程实例id: {}",delegateTask.getProcessInstanceId());
log.info("获取流程获取执行id: {}",delegateTask.getExecutionId());
log.info("获取流程定义id: {}",delegateTask.getProcessDefinitionId());
/** 添一个加候选人 */
//void addCandidateUser(String userId);
/** 添加候选人集合 */
//void addCandidateUsers(Collection<String> candidateUsers);
/** 添加候选组 */
//void addCandidateGroup(String groupId);
String eventName = delegateTask.getEventName();
if (EVENTNAME_CREATE.endsWith(eventName)) {
System.out.println("create=========");
}else if (EVENTNAME_ASSIGNMENT.endsWith(eventName)) {
System.out.println("assignment========");
}else if (EVENTNAME_COMPLETE.endsWith(eventName)) {
System.out.println("complete===========");
}else if (EVENTNAME_DELETE.endsWith(eventName)) {
System.out.println("delete=============");
}
}
}
|