Activiti——组任务


1.组任务

            同一个任务,一组人都可以查看,其中只有一个人可以申请到该任务进行处理(其他人员看不到该任务),如果过程中不想处理了,
            可以将任务退回,这样组内其他人员可再次看到该任务,进行任务申请
            
            在流程图当中,每一个任务环节都有一个Candidate users任务候选人属性,在此属性内,指定执行该任务的一组人,每一个人用 "," 号分割


          

 

流程部署

启动流程实例

 

 

 

2.组任务代办任务流程:

  2.1 查询组任务,但是不能执行

  

 

 

复制代码
    /** * 查询组任务 */ @Test public void getGroupTask() { //获取ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); //查询组任务 List<Task> list = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser("lisi").list(); for (Task task : list) { System.out.println("任务ID:" + task.getId()); //如果当前不是此任务处理人则处理不了该任务 /*taskService.complete(task.getId());*/ System.out.println("任务名称:" + task.getName()); System.out.println("任务处理人:" + task.getAssignee()); //Null代表 没有处理人说明当前任务没有人拾取  } }
复制代码

没有人拾取时的执行效果:

 

 



  2.2 拾取(claim)任务

  一旦其中一个人拾取了任务,其他人就看不到该任务了

复制代码
    /** * 拾取任务 */ @Test public void claimTask() { //获取ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); //获取组任务 String candidateUser="huaixin"; Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser(candidateUser).singleResult(); //不等于Null代表能够获取到该任务 if(task!=null){ //拾取任务 任务ID,任务执行人  taskService.claim(task.getId(),candidateUser); System.out.println("任务被:"+candidateUser+"拾取~"); } }
复制代码

 

 

 

 说明:即使该用户不是候选人也能拾取,建议拾取时校验是否有资格组任务拾取后,该任务已有负责人,通过候选人将查询不到该任务

 

  2.3 查询个人任务并执行

复制代码
    /** * 查看任务 */ @Test public void getTask() { //获取ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); //查询到自己的任务,然后通过任务ID进行提交 Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("huaixin").singleResult(); //处理任务 if(task!=null){ taskService.complete(task.getId()); System.out.println("任务处理完毕"); } }
复制代码

 

  2.4 任务退回/交接

    如果个人不想办理该组任务,可以归还组任务,归还后该用户不再是该任务的负责人

复制代码
   /** * 任务退回/交接 */ @Test public void taskReturn(){ //获取ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取TaskService对象 TaskService taskService = processEngine.getTaskService(); //查询到自己的任务,然后通过任务ID进行提交 Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("huaixin").singleResult(); if(task!=null){ //任务退回 任务ID null代表没有处理人执行,需要后续再次拾取任务 //任务交接 任务ID 如果第二个参数,处理人不为空代表将该任务交给次处理人 taskService.setAssignee(task.getId(),null); System.out.println("任务退回"); /*taskService.setAssignee(task.getId(),"lisi"); System.out.println("任务交接");*/ } }
复制代码

 

 

     退回后再次查询组任务,执行人就都可以看到此任务了

 

说明:建议归还任务前校验该用户是否是该任务的负责人

也可以通过setAssignee   方法将任务委托给其它用户负责,注意被委托的用户可以不是候选人(建议不要这样使用)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM