activiti 每个模块都有其对应的服务组件,任务也有,就是TaskService
任务权限 概念
- 任务候选人(组) :
如有一个任务,是有经理用户组审批的(也就是每一个经理都可以审批),那么 这个经理用户组就是任务候选组
如果一个任务只有一个人可以看到并审批,那么这个人就叫做任务候选人
- 任务持有人
就是要执行这个任务的人,一个任务只有一个持有人
- 任务代理人
执行这个任务的人,即任务持有人,当当前任务持有人不方便做或有事的时候,
委托执行这个任务的人就叫做任务代理人
任务与 任务候选人(组)是一对多的关系
任务与 任务持有人 是一对一的关系
任务与 任务代理人 是一对一的关系
*另外 任务声明 TaskService.claim方法
* 任务完成 TaskService.complete 方法一调用,就会成功执行完此任务,调到下一个节点
项目结构如图
TaskServiceTest.java
package com.xiangshuai.act.c9;
import java.util.List;
import java.util.UUID;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.identity.User;
import org.activiti.engine.task.Task;
/**
* @author lqx
* 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤5-Activiti任务操作
* 或 我的网盘\我的笔记学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤5-Activiti任务操作
*
*任务, 任务候选人(组) 保存的三表为 中间表 act_ru_identitylink,act_ru_task,act_id_user(或act_id_group)
*任务, 任务持有人 之前表数据不变会改变 act_ru_task的 OWNER_字段 的值
*任务, 任务代理人 之前表数据不变会改变 act_ru_task的 ASSIGNEE_字段 的值
*另外 任务声明 TaskService.claim方法
* 任务完成 TaskService.complete 方法一调用,就会成功执行完此任务,调到下一个节点
*/
public class TaskServiceTest {
public static void main(String[] args) {
//testCandidateUserAndTask();
testOwnerAndTask();
}
//测试任务与任务候选人 的创建于查询
public static void testCandidateUserAndTask(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
IdentityService identityService = engine.getIdentityService();//获得操作用户的组织机构管理组件
TaskService taskService = engine.getTaskService();//获得操作的任务管理组件
//为了方便测试,这里直接新建任务了,实际WEB开发中,任务应该和流程图绑定的
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("xiaoming");
identityService.saveUser(user);
/*
设置 任务 与任务候选人(组)-就是将关联关系insert到act_ru_identitylink中间表,
百度TaskService API 设置 任务 与任务候选人方法 addCandidateUser(String taskId, String userId)
*/
taskService.addCandidateUser(task.getId(), user.getId());
//在实际WEB开发 如果要查询一个用户有多少可以 执行的任务权限,用以下方法即可
List<Task> list = taskService.createTaskQuery().taskCandidateUser(userid).list();
System.out.println("id为"+userid+"的人有如下任务权限--");
list.forEach((temp)->{
System.out.println(temp.getName());
});
}
/*
测试任务与任务持有人 的创建于查询 --会在act_ru_task表的 OWNER_字段设值为持有人的id,表示这个任务被这个ID值的人持有
代理人也一样,调taskService.claim(java.lang.String, java.lang.String) --和setOwner 一样第一参数是 任务task id,
第二个参数是代理人user 的id
字段为ASSIGNEE_为代理人的id
*/
public static void testOwnerAndTask(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
IdentityService identityService = engine.getIdentityService();//获得操作用户的组织机构管理组件
TaskService taskService = engine.getTaskService();//获得操作的任务管理组件
//为了方便测试,这里直接新建任务了,实际WEB开发中,任务应该和流程图绑定的
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("xiaoming--持有人");
identityService.saveUser(user);
/*
设置 任务与任务持有人-不会将关联关系insert到act_ru_identitylink中间表,只会在act_ru_task表的 OWNER_字段设值为持有人的id
即改变act_ru_task表的 OWNER_字段的值,
代理人也一样,调taskService.claim(java.lang.String, java.lang.String) --和setOwner 一样第一参数是 任务task id,
第二个参数是代理人user 的id
字段为ASSIGNEE_为代理人的id
百度TaskService API 设置 任务与任务持有人 setOwner(String taskId, String userId)
*/
taskService.setOwner(task.getId(), user.getId());
//在实际WEB开发 如果要查询一个用户 持有的任务是
List<Task> list = taskService.createTaskQuery().taskOwner(userid).list();
System.out.println("id为"+userid+"的人持有如下任务--");
list.forEach((temp)->{
System.out.println(temp.getName());
});
}
}