执行监听器
监听流程实例的用的。创建监听实现类
package cn.fg.activiti.listener;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
//流程实例启动前的监听
public class StartListenerImpl implements ExecutionListener {
private static final long serialVersionUID = -2164817372803519157L;
@Override
public void notify(DelegateExecution execution) throws Exception {
System.out.println("进入start监听....................................");
System.out.println("ProcessDefinitionId=" + execution.getProcessDefinitionId());
System.out.println("ProcessInstanceId=" + execution.getProcessInstanceId());
}
}
//流程实例结束后的监听
public class EndListenerImpl implements ExecutionListener {
private static final long serialVersionUID = -2164817372803519157L;
@Override
public void notify(DelegateExecution execution) throws Exception {
System.out.println("进入end监听....................................");
}
}
创建流程图
启动流程实例
String processDefinitionKey = "executionListener";
System.out.println("调用start之前.............");
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
System.out.println("调用start之后.............");
System.out.println("ProcessDefinitionId="+pi.getProcessDefinitionId());
System.out.println("getProcessInstanceId="+pi.getProcessInstanceId());
#输出日志
调用start之前.............
进入start监听....................................
ProcessDefinitionId=executionListener:1:4
ProcessInstanceId=15001
调用start之后.............
ProcessDefinitionId=executionListener:1:4
getProcessInstanceId=15001
综上可以看出,进入监听的时机是调用startProcessInstanceByKey的时候
完成审批任务
String taskId = "7504";
System.out.println("调用complete之前.............");
processEngine.getTaskService().complete(taskId);
System.out.println("调用complete之后.............");
#输出日志
调用complete之前.............
进入end监听....................................
调用complete之后.............
综上可以看出,进入监听的时机是调用complete的时候
使用一个监听类监听start与end
package cn.fg.activiti.listener;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
public class ExecutionListenerImpl implements ExecutionListener {
private static final long serialVersionUID = -2164817372803519157L;
@Override
public void notify(DelegateExecution execution) throws Exception {
String eventName = execution.getEventName(); //监听事件名称
System.out.println("eventName=" + eventName);
if("start".equals(eventName)){
System.out.println("start...............");
}else if("end".equals(eventName)){
System.out.println("end...............");
}
}
}
任务监听器
监听任务用的。创建监听实现类
package cn.fg.activiti.listener;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class TaskListenerImpl implements TaskListener {
private static final long serialVersionUID = 8303932574368902798L;
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("EventName="+delegateTask.getEventName());
}
}
创建流程图(设置审批办理人为张三)
启动流程实例
String processDefinitionKey = "taskListener";
System.out.println("流程实例启动前...........");
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程实例启动后...........");
#输出日志
流程实例启动前...........
EventName=assignment #如果流程图中不设置办理人,这条记录是不会出现的
EventName=create
流程实例启动后...........
完成审批任务
String taskId = "10004";
System.out.println("完成任务前...........");
processEngine.getTaskService().complete(taskId);
System.out.println("完成任务后...........");
完成任务前...........
EventName=complete
完成任务后...........
代码设置Assignee
public void setAssignee(){
String taskId = "22504";
String userId = "万五";
TaskService taskService = processEngine.getTaskService();
System.out.println("setAssignee之前............");
taskService.setAssignee(taskId, userId);
System.out.println("setAssignee之后............");
}
setAssignee之前............
EventName=assignment
setAssignee之后............
由此说明assignment事件是setAssignee时触发的