分配个人任务的三种方式
1. 直接指定办理人
@Test
public void findMyTaskList(){
String userId = "kelly";
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskAssignee(userId)//指定个人任务查询
.list();
for(Task task:list ){
System.out.println("id="+task.getId());
System.out.println("name="+task.getName());
System.out.println("assinee="+task.getAssignee());
System.out.println("createTime="+task.getCreateTime());
System.out.println("executionId="+task.getExecutionId());
}
}
2. 使用流程变量指定办理人
@Test
public void StartProcess(){
//启动流程实例
/**
* 启动流程实例的同时,设置流程变量,使用流程变量的方式设置下一个任务的办理人
* 流程变量的名称,就是在task.bpmn中定义#{userID}的userID
* 流程变量的值,就是任务的办理人
*/
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("userID", "kelly");
ProcessInstance pi = processEngine.getRuntimeService()//
.startProcessInstanceByKey("task",variables);
//使用流程定义的key的最新版本启动流程
}
/**查询我的个人任务*/
@Test
public void findPersonalTaskList(){
//任务办理人
String assignee = "kelly";
List<Task> list = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee(assignee)//个人任务的查询
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
}
}
}
3.使用Listener 监听器 TaskListenerImpl,用来设置任务的办理人
任务监听器类需要实现: org.flowable.engine.delegate.TaskListener
流程监听器需要实现: org.flowable.engine.delegate.ExecutionListener;
//数据在ACT_RU_TASK表中也正常,
//但是在ACT_HI_TASKINS表中的ASSIGENEE_审批人字段是空的,所以查询历史时查不出来,
public class UserTaskListner implements TaskListener{
/**设置任务的办理人(个人任务和组任务)*/
@Override
public void notify(DelegateTask delegateTask) {
//指定个人任务
delegateTask.setAssignee("kelly");
}
}
//改进的监听类
@Component
public class UserTaskListner implements TaskListener, ExecutionListener {
@Override
public void notify(DelegateTask delegateTask) {
// activiti监听器无法实例化(SpringBoot) SpringUtil一个工具类,手动获取Bean
TaskService taskService = SpringUtil.getObject(TaskService.class);
//监听器分配任务处理人
//这种无论流程图的处理人Assignee填不填都能正常分配
taskService.setAssignee(delegateTask.getId(),"kelly");
}
@Component
public class SpringUtil implements ApplicationContextAware {
/**
* 当前IOC
*
*/
private static ApplicationContext applicationContext;
/**
* 设置applicationContext
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public static <T> T getObject(Class<T> clazz){
return applicationContext.getBean(clazz);
}
@Test
public void findPersonalTaskList(){
//任务办理人
String assignee = "kelly";
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskAssignee(assignee)//个人任务的查询
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
}
}
}
分配组任务的三种方式
1、直接指定办理人
/**查询组任务*/
@Test
public void findGroupTaskList() {
// 任务办理人
String candidateUser = "yzz";
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskCandidateUser(candidateUser)// 参与者,组任务查询
.list();
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任务ID:" + task.getId());
System.out.println("任务的办理人:" + task.getAssignee());
System.out.println("任务名称:" + task.getName());
System.out.println("任务的创建时间:" + task.getCreateTime());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
}
}
}
2、使用流程变量
@Test
public void StartProcess(){
//启动流程实例
/**
* 启动流程实例的同时,设置流程变量,使用流程变量的方式设置下一个任务的办理人
* 流程变量的名称,就是在task.bpmn中定义activiti:candidateUsers="#{userIDs}"的userIDs
* 流程变量的值,就是任务的办理人(组任务)
*/
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("userIDs", "kelly,yzz");
ProcessInstance pi = processEngine.getRuntimeService()//
.startProcessInstanceByKey("task",variables);
//使用流程定义的key的最新版本启动流程
}
/**查询组任务*/
@Test
public void findGroupTaskList(){
//任务办理人
String candidateUser = "yzz";
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskCandidateUser(candidateUser)//参与者,组任务查询
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
}
}
}
3、使用监听器
public class UserTaskListner implements TaskListener {
/**
* 可以设置任务的办理人(个人组人和组任务)
*/
@Override
public void notify(DelegateTask delegateTask) {
//指定组任务
delegateTask.addCandidateUser("kelly");
delegateTask.addCandidateUser("yzz");
}
}
/**查询组任务*/
@Test
public void findGroupTaskList(){
//任务办理人
String candidateUser = "yzz";
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskCandidateUser(candidateUser)//参与者,组任务查询
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
}
}
}