activiti 每个模块都有其对应的服务组件,任务也有,就是TaskService
1. 任务参数 1.1 基本数据类型参数,1.2 序列化参数
2. 参数作用域 - 本地参数,全局参数
2.1本地参数 :生命周期从属于单个节点,参数仅在当前的任务中有效,在这个任务还可以拿到这个参数,当流程流转到下一个节点,这个参数就获取不到了。
2.2全局参数: 生命周期从属于整个流程,只要这个流程还没有结束,参数在各流程节点都可以获取
项目结构如图
Person.java
package com.xiangshuai.act.c10;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String id, String name, String age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
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());
});
}
}