目录
前言
用户启动了流程定义,就相当于领取了一个任务了。用户通过完成任务,推动流程的前进。
本节不讨论Task与ProcessDefinition的关系。
1. 任务权限
1.1 任务候选人CandidateUser(组)
package com.study.c9;
import org.activiti.engine.*;
import org.activiti.engine.identity.User;
import org.activiti.engine.task.Task;
import java.util.List;
import java.util.UUID;
public class CandidateTest {
public static void main(String[] args) {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
IdentityService identityService = processEngine.getIdentityService();
String taskId = UUID.randomUUID().toString();
Task task = taskService.newTask(taskId);
task.setName("测试任务");
taskService.saveTask(task);
String userId = UUID.randomUUID().toString();
User user = identityService.newUser(userId);
user.setFirstName("Lily");
identityService.saveUser(user);
//添加任务候选人
taskService.addCandidateUser(taskId,userId);
//查询该用户作为候选人的任务列表
List<Task> taskList = taskService.createTaskQuery().taskCandidateUser(userId).list();
System.out.println("userId : " + userId + " 可以处理的任务如下:");
for (Task item : taskList) {
System.out.println(item.getName());
}
processEngine.close();
}
}
控制台输出:
userId : 1bb2b291-a2ea-4363-8f20-68d8c24a082b 可以处理的任务如下:
测试任务
ACT_RU_TASK
并且注意到它拥有OWNER_字段,从这个角度来看每个任务都只有一个持有人。
ACT_RU_IDENTITYLINK新增一条关联数据
不仅是流程,任务与用户的关联信息都会保存于此。候选人与任务是多对多的关系。
1.2 任务持有人OWNER_
package com.study.c9;
import org.activiti.engine.*;
import org.activiti.engine.identity.User;
import org.activiti.engine.task.Task;
import java.util.List;
import java.util.UUID;
public class OwnerTest {
public static void main(String[] args) {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
IdentityService identityService = processEngine.getIdentityService();
String userId = UUID.randomUUID().toString();
User user = identityService.newUser(userId);
user.setFirstName("Lily");
identityService.saveUser(user);
String taskId = UUID.randomUUID().toString();
Task task = taskService.newTask(taskId);
task.setName("测试任务");
task.setOwner(userId);
taskService.saveTask(task);
//查询该用户作为持有人的任务列表
List<Task> taskList = taskService.createTaskQuery().taskOwner(userId).list();
System.out.println("userId : " + userId + " 持有的任务如下:");
for (Task item : taskList) {
System.out.println(item.getName());
}
processEngine.close();
}
}
控制台输出:
userId : 56d0e596-c6ca-4dde-ac29-6d10859f5c2f 持有的任务如下:
测试任务
1.3 任务代理人ASSIGNEE_
任务代理人指的是代理任务持有者执行任务,所以他们不会是同一个用户
任务的声明与完成
使用claim方法声明任务的代理人,即ASSIGNEE_字段
package com.study.c9;
import org.activiti.engine.*;
import org.activiti.engine.identity.User;
import org.activiti.engine.task.Task;
import java.util.List;
import java.util.UUID;
public class CandidateTest {
public static void main(String[] args) {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
IdentityService identityService = processEngine.getIdentityService();
String userId = UUID.randomUUID().toString();
User user = identityService.newUser(userId);
user.setFirstName("Morgan");
identityService.saveUser(user);
String taskId = UUID.randomUUID().toString();
Task task = taskService.newTask(taskId);
task.setName("测试任务");
task.setOwner(userId);
taskService.saveTask(task);
taskService.claim(taskId, userId);
//查询该用户作为代理人的任务列表
List<Task> taskList = taskService.createTaskQuery().taskAssignee(userId).list();
System.out.println("userId : " + userId + " 代理的任务如下:");
for (Task item : taskList) {
System.out.println(item.getName());
}
processEngine.close();
}
}
控制台输出:
userId : 6c3212f7-f6f9-4476-889e-c547b9d37e69 代理的任务如下:
测试任务
ACT_RU_TASK新增一条记录,OWNER_和ASSIGNEE_都为同一个用户,在实际上是不可能的
注意:同一个任务无法被执行两次claim,否则报错
2. 任务的完成
complete方法