个人任务的操作
- 使用流程变量
- 在流程图中写入变量#{userID}
- 设置流程变量
- 代码:
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("userID", "张翠三");
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("taskProcess",variables);
System.out.println("pid:" + pi.getId());
- 使用listener
- 不需要指定办理人
- 添加listener
- listener代码
public class TaskListenerImpl implements TaskListener {
/**指定个人任务和组任务的办理人*/
@Override
public void notify(DelegateTask delegateTask) {
String assignee = "张无忌";
//指定个人任务
delegateTask.setAssignee(assignee);
}
}
- 认领任务
- 代码:
@Test
public void setAssigneeTask(){
//任务ID
String taskId = "3408";
//指定认领的办理者
String userId = "周芷若";
processEngine.getTaskService()//
.setAssignee(taskId, userId);
}
总结
- 个人任务及三种分配方式:
- 在taskProcess.bpmn中直接写 assignee=“张三丰”
- 在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。
使用流程变量指定办理人 - 使用TaskListener接口,要使类实现该接口,在类中定义:delegateTask.setAssignee(assignee);// 指定个人任务的办理人
组任务的操作
分配个人任务
- 直接指定办理人
- 在流程图中Candidate users中设置办理人
- 查询个人任务列表
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskAssignee(userId)//指定个人任务查询
.list();
- 查询组任务列表
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskCandidateUser(userId)//指定组任务查询
.list();
- 查询组任务成员列表
String taskId = "3709";
List<IdentityLink> list = processEngine.getTaskService() .getIdentityLinksForTask(taskId);
- 将组任务分配给个人任务,拾取任务
String userId = "小B";
processEngine.getTaskService()//
.claim(taskId, userId);
- 将个人任务回退到组任务(前提:之前组任务)
String taskId = "5508";
processEngine.getTaskService()//
.setAssignee(taskId, null);
- 向组任务中添加成员
processEngine.getTaskService()//
.addCandidateUser(taskId, userId);
- 从组任务中删除成员
processEngine.getTaskService()//
.deleteCandidateUser(taskId, userId);
- 使用流程变量
- 在流程图中Candidate users中设置#{userIDs}
- 设置流程变量指定组任务的办理人
- variables.put(“userIDs”, “大大,小小,中中”);
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("taskProcess",variables);
- 在开发中,可以在页面中指定下一个组任务的办理人,通过流程变量设置下一个任务的办理人
- 使用listener
- 不要指定任务的办理人
- TaskListenerImpl类,用来设置任务的办理人
public class TaskListenerImpl implements TaskListener {
/**指定个人任务和组任务的办理人*/
@Override
public void notify(DelegateTask delegateTask) {
String userId1 = "A";
String userId2 = "B";
//指定组任务
delegateTask.addCandidateUser(userId1);
delegateTask.addCandidateUser(userId2);
}
总结
- 组任务及三种分配方式:
- 在taskProcess.bpmn中直接写 candidate-users=“小A,小B,小C,小D”
- 在taskProcess.bpmn中写 candidate-users =“#{userIDs}”,变量的值要是String的。
使用流程变量指定办理人
Map
角色组
- 在流程图中设置Candidate groups(部门经理)
- 代码
/**在部署流程定义和启动流程实例的中间,设置组任务的办理人,向Activity表中存放组和用户的信息*/
IdentityService identityService = processEngine.getIdentityService();//认证:保存组和用户信息
identityService.saveGroup(new GroupEntity("部门经理"));//建立组
identityService.saveGroup(new GroupEntity("总经理"));//建立组
identityService.saveUser(new UserEntity("小张"));
identityService.saveUser(new UserEntity("小李"));
identityService.saveUser(new UserEntity("小王"));
identityService.createMembership("小张", "部门经理");//建立组和用户关系
identityService.createMembership("小李", "部门经理");//建立组和用户关系
identityService.createMembership("小王", "总经理");//建立组和用户关系
// 2 启动流程
ProcessInstance pi = processEngine.getRuntimeService()//
.startProcessInstanceByKey("taskProcess");
System.out.println("pid:" + pi.getId());
- 查询组任务列表
//查询组任务列表
@Test
public void findGroupList(){
String userId = "小李";//小张,小李可以查询结果,小王不可以,因为他不是部门经理
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskCandidateUser(userId)//指定组任务查询
.list();
- 表结构关系
- act_id_group 角色组表
- act_id_user 用户表
- act_id_membership 用户角色表