activiti 快速入门--组任务(candidate users)分配(6)
来源:互联网 发布:c语言详解 编辑:程序博客网 时间:2024/05/16 09:39
例如有这样一个需求:你的上司也就是经理有两个或多个以上,那么你需要提交申请到他们手上,主要有一个认领了该任务,然后审批通过即可,具体实现如下:
1) 在原有基础上继续修改流程图:
2) 部署流程,启动流程
3) 申请人发起申请任务:
@Test publicvoid completeTask(){ Map<String,Object> map= newHashMap<String,Object>(); Taskform taskform = new Taskform(3, "事假", "今天老子"); map.put("users", "a,b,c"); map.put("day",taskform.getDay()); String taskId = "155005"; processEngine.getTaskService().setVariable(taskId,"taskform",taskform); processEngine.getTaskService().complete(taskId,map);//完成任务 System.out.println("完成任务,任务ID"+taskId);}
补充:map.put("users","a,b,c");“users”对应流程图中的candidate #{users},多人用“,”分割
运行后查看数据表act_hi_identitylink:
Act_ru_task表中:assignee字段是空的
4) 查询下组参与人员的任务:
@Test publicvoid findMyPersonTask(){ String assignee = "a"; List<Task>taskList = processEngine.getTaskService()//获取任务service .createTaskQuery()//创建查询对象 //.taskAssignee(assignee)//指定查询人 .taskCandidateUser(assignee)//参与者,组任务查询 .list(); if(taskList.size()>0){ for (Task task : taskList) { System.out.println("代办任务ID:"+task.getId()); System.out.println("代办任务name:"+task.getName()); System.out.println("代办任务创建时间:"+task.getCreateTime()); System.out.println("代办任务办理人:"+task.getAssignee()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("执行对象ID:"+task.getExecutionId()); } } }
注意:查询用的是.taskCandidateUser(assignee)
5) 认领任务:
@Test publicvoid claim(){ //任务ID String taskId = "122502"; //个人任务的办理人 String userId = "a"; processEngine.getTaskService()// .claim(taskId,userId);}
补充:claim与setAssignee区别在于claim领取之后别人不可以再领取不然会报错而setAssignee则不然
认领之后其他人员再查询时则不存在,而act_ru_task表中assignee字段为认领人‘a’,认领之后其他操作和一起都一样
6) 补充点:
1. 被认领之后的任务可再扯回组任务(前提:之前这个任务是组任务),其他人员则还可以认领:
@Test publicvoid setAssignee(){ //任务ID String taskId = "157507"; processEngine.getTaskService()// .setAssignee(taskId, null); }
2. 组任务可以继续添加组参与人员:
@Test publicvoid addGroupUser(){ //任务ID String taskId = "157507"; //新增组任务的成员 String userId = "c"; processEngine.getTaskService()// .addCandidateUser(taskId, userId); }
3. 组任务可以删除参与人员:
@Test publicvoid deleteGroupUser(){ //任务ID String taskId = "157507"; //新增组任务的成员 String userId = "cai"; processEngine.getTaskService()// .deleteCandidateUser(taskId, userId); }
4. 查询正在执行的组任务列表:
@Test publicvoid findGroupCandidate(){ //任务ID String taskId = "157507"; List<IdentityLink>list = processEngine.getTaskService()// .getIdentityLinksForTask(taskId); if(list!=null && list.size()>0){ for(IdentityLinkidentityLink:list){ System.out.println("任务ID:"+identityLink.getTaskId()); System.out.println("用户ID:"+identityLink.getUserId()); System.out.println("-----------------------------------"); } } }
运行结果:
5. 组任务像前面讲的个人任务一样可以用监听器或写死方式,监听器notify()方法里用delegateTask.addCandidateUser()来设值
0 0
- activiti 快速入门--组任务(candidate users)分配(6)
- activiti 快速入门--3种assignee任务分配方式(2)
- Activiti 分配组任务(三种方式)
- Activiti 分配组任务(三种方式)
- activiti 快速入门--排他网关(3)
- activiti 快速入门--传值取值(4)
- activiti 快速入门--并行网关(5)
- Activiti进阶(十一)——分配组任务的三种方式
- Activiti进阶(十一)——分配组任务的三种方式
- Activiti(十一)——分配组任务的三种方式
- Activiti进阶(十一)——分配组任务的三种方式
- Activiti 学习笔记13:分配组任务
- activiti任务分配
- Activiti用户任务分配
- Activiti学习入门(4) -- 学习查询个人的任务
- Activiti学习入门(5) -- 学习完成指定的任务
- Activiti之组任务(十)
- Activiti — 动态任务分配
- Html助手和Request组件
- 如何在工作线程中创建窗口?
- 第十周项目一个人所得税
- 数据结构
- Git安装和应用
- activiti 快速入门--组任务(candidate users)分配(6)
- 第四讲 表达式与运算符
- 2016 沈阳区域赛第三题(Recursive sequence)(矩阵快速幂)
- 创建数据表
- ueditor的常用方法
- QT - QTableView表格视图的列宽设置
- 【NOIp复习】数据结构之栈、队列和二叉树
- spring调度器的配置 ,s2sm
- 第十周项目