项目实践工作流之Activiti学习(三十六)

2023-11-18 18:37:56 浏览数 (2)

办理组任务

4.1.1.1 组任务办理流程

第一步:查询组任务

指定候选人,查询该候选人当前的待办任务。

候选人不能办理任务。

第二步:拾取(claim)任务

该组任务的所有候选人都能拾取。

将候选人的组任务,变成个人任务。原来候选人就变成了该任务的负责人。

***如果拾取后不想办理该任务?

需要将已经拾取的个人任务归还到组里边,将个人任务变成了组任务。

第三步:查询个人任务

查询方式同个人任务部分,根据 assignee 查询用户负责的个人任务。

第四步:办理个人任务

4.1.1.2 用户查询组任务

根据候选人查询组任务

代码语言:javascript复制
@Test
public void findGroupTaskList() {
// 流程定义key
String processDefinitionKey = "holiday4";
// 任务候选人
String candidateUser = "zhangsan";
// 创建TaskService
TaskService taskService = processEngine.getTaskService();
//查询组任务
List<Task> list = taskService.createTaskQuery()//
.processDefinitionKey(processDefinitionKey)//
.taskCandidateUser(candidateUser)//根据候选人查询
.list();
for (Task task : list) {
System.out.println("----------------------------");
System.out.println("流程实例id:"   task.getProcessInstanceId());
System.out.println("任务id:"   task.getId());
System.out.println("任务负责人:"   task.getAssignee());
System.out.println("任务名称:"   task.getName());
}
}

4.1.1.3 用户拾取组任务

候选人员拾取组任务后该任务变为自己的个人任务。

代码语言:javascript复制
@Test
public void claimTask(){
TaskService taskService = processEngine.getTaskService();
//要拾取的任务id
String taskId = "6302";
//任务候选人id
String userId = "lisi";
//拾取任务
//即使该用户不是候选人也能拾取(建议拾取时校验是否有资格)
//校验该用户有没有拾取任务的资格
Task task = taskService.createTaskQuery()//
.taskId(taskId)
.taskCandidateUser(userId)//根据候选人查询
.singleResult();
if(task!=null){
taskService.claim(taskId, userId);
System.out.println("任务拾取成功");
}
}

说明:即使该用户不是候选人也能拾取,建议拾取时校验是否有资格

组任务拾取后,该任务已有负责人,通过候选人将查询不到该任务

0 人点赞