个人任务
流程中的某个任务由指定的user来执行
组任务
流程中的某个任务由指定的group来完成,其中group由多个user组成
场景:
1.提交报销申请为个人任务
2.财务人员审批为组任务,因为财务人员有多个,而且每个财务人员都有权限处理审批
3.财务总监审批为个人任务
一、个人任务
对应的属性为Assignee,指定一个人物来执行该任务
二、组任务
候选人组任务(了解)
候选人组任务以人单位,可以设置多个候选人,即在个人任务的基础上,增加多个候选人
缺点:与个人任务一样,硬性指定人物,不灵活。当人员发生变动时,对流程运行产生不利影响
候选组组任务(重点)
候选组组任务是以组为单位,组里可以包含多个候选人
优点:对指定任务来说,它所面对的是一个组,即不需要关心组里面的具体人员,所以组内发生人员变动,不会对流程运行产生不利影响
三、候选组组任务示例
/**
* 部署流程定义
*/
@Test
public void test1() {
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("com/zyj/activiti/grouptask/bxlc.bpmn");
deploymentBuilder.addClasspathResource("com/zyj/activiti/grouptask/bxlc.png");
deploymentBuilder.deploy();
}
/**
* 创建组
* 操作的数据表:act_id_group
*/
@Test
public void test2() {
Group group = new GroupEntity();
group.setId("财务组");
group.setName("财务组");
processEngine.getIdentityService().saveGroup(group);
}
/**
* 创建用户
* 操作的数据表:act_id_user
*/
@Test
public void test3() {
User user = new UserEntity();
user.setId("2");
processEngine.getIdentityService().saveUser(user);
}
/**
* 建立用户和组的关系
* 操作的数据表:act_id_membership
*/
@Test
public void test4() {
processEngine.getIdentityService().createMembership("2", "财务组");
}
/**
* 启动流程实例时设置流程变量
*/
@Test
public void test5() {
String processDefinitionKey = "bxlc";// 流程定义key
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("loginUser", "小明");
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables);
System.out.println(pi.getId());
}
/**
* 办理任务时设置流程变量
*/
@Test
public void test6() {
String taskId = "1805";
processEngine.getTaskService().complete(taskId);
}
/**
* 查询组任务
*/
@Test
public void test7() {
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String candidateUser = "2";
query.taskCandidateUser(candidateUser);//使用候选人过滤
//query.taskCandidateGroup("财务组");
List<Task> list = query.list();
for (Task task : list) {
System.out.println(task.getId());
}
}
/**
* 拾取组任务,将组任务变为个人任务
*/
@Test
public void test8() {
String taskId = "1902";
String userId = "1";
processEngine.getTaskService().claim(taskId, userId);
}