activiti 快速入门--组任务(candidate users)分配(6)

例如有这样一个需求:你的上司也就是经理有两个或多个以上,那么你需要提交申请到他们手上,主要有一个认领了该任务,然后审批通过即可,具体实现如下:

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()来设值

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值