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);} 


补充:claimsetAssignee区别在于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
原创粉丝点击