1.组任务的分配
在流程定义中Candidate Users 可以分配多个人,(zhangsan,lisi,wangwu)用逗号隔开;
这样zhangsan,lisi,wangwu,都有相同的待办任务,但是对应的Assignee位NULL
2.拾取任务
通过以下代码zhangsan用户可以拾取任务,任务拾取完毕后对应表中的Assignee变成zhangsan但是任务并没有完成
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到TaskService对象
TaskService taskService = processEngine.getTaskService();
//3.设置一些参数,流程定义的key,候选用户
String key = "myProcess_1";
String candidate_users="zhangsan";
//4.执行查询
Task task = taskService.createTaskQuery()
.processDefinitionKey(key)
.taskCandidateUser(candidate_users)//设置候选用户
.singleResult();
if(task!=null){
taskService.claim(task.getId(),candidate_users);//第一个参数任务ID,第二个参数为具体的候选用户名
System.out.println("任务拾取完毕!");
}
3.查询个人任务
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到TaskService对象
TaskService taskService = processEngine.getTaskService();
//3.设置一些参数,流程定义的key,用户
String key = "myProcess_1";
String assignee="zhangsan";
//4.执行查询
List<Task> list = taskService.createTaskQuery()
.processDefinitionKey(key)
.taskAssignee(assignee) //设置任务的负责人
.list();
//5.输出
for(Task task :list){
System.out.println(task.getProcessInstanceId());
System.out.println(task.getId());
System.out.println(task.getName());
System.out.println(task.getAssignee());//任务的执行人
}
4.处理任务
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到TaskService对象
TaskService taskService = processEngine.getTaskService();
//3.设置一些参数,流程定义的key,用户
String key = "myProcess_1";
String assignee="zhangsan";
//4.执行查询
Task task = taskService.createTaskQuery()
.processDefinitionKey(key)
.taskAssignee(assignee) //设置任务的负责人
.singleResult();
//5.执行当前的任务
if(task!=null){
taskService.complete(task.getId());
System.out.println("任务执行完毕!");
}
5.归还组任务
用户拾取成功任务后,如果不想处理此任务可以归回到组任务
taskService.setAssignee(task.getId(),null)
6.交接组任务
用户不想处理此任务可以交给其他的候选人处理
taskService.setAssignee(task.getId(),"lisi")