Jbpm4或Activiti5的流程任务分发与汇总

本文介绍了在Jbpm4或Activiti5中处理流程任务分发与汇总的两种方法。通过动态创建任务并直接操作数据库来实现,详细阐述了如何在任务创建和完成事件中监听并处理分发和汇总,以及在汇总任务时的删除重复任务策略。
摘要由CSDN通过智能技术生成

应用场景:在企业或事业单位,经常需要把一个任务分派给多条线去处理,每条线可以由一个或多个步骤构成,多条线的任务完成后需要再汇总一起于某个任务上。如下例子为一个公文下发流程,这个流程就涉及到任务的两级分发。

 

图一 原流程定义图

 

qq:1848175569
 
图二 执行过程中流程图


以上黄色的代表任务分发,紫黄代表任务汇总。

解决方法一:
我们可以把多个任务线用子流程去实现也可以,这样在分发那里会产生多个子流程,子流程完成后,需要汇总。但若有多级分发与汇总,则需要子流程再嵌套子流程。

解决方法二:
    把分发的任务线当作普通的任务来实现,该产生多少个任务可由分发任务决定,这些任务的名称是一样的,但任务实例id不一样,执行人不一样。

在jbpm4或Activiti5上,动态创建子流程及对子流程的处理上,相对要完成的工作多一些,主要是activity或jbpm4上没有提供这块api。而动态创建任务在jbpm4或activiti5上也是没有提供的,只有activiti5上提供了一个taskService.newTask,而该方法产生的新任务则跟流程定义无关,则表示该任务完成后,不能产生后续的任务。在此,我们先提供activiti5的解决办法。Jbpm4的解决方法可以参照该方式实现,以下为解决方案的步骤:


1.    第二种解决方案的关键点在于如何动态创建任务,在这里,我们绕过activiti的API直接对activiti5表进行生成处理,让他生成我们需要流程数据。
如下所示:

Java代码 复制代码  收藏代码
  1. /**  
  2.      * 按任务Id,复制另一会签任务出来  
  3.      * @param orgTaskId  
  4.      * @param assignee  
  5.      * @return  
  6.      */  
  7.     public ProcessTask newTask(String orgTaskId,String assignee)   
  8.     {   
  9.            
  10.         String newExecutionId=UniqueIdUtil.getNextId();   
  11.         String newTaskId=UniqueIdUtil.getNextId();   
  12.            
  13.         TaskEntity taskEntity=getTask(orgTaskId);   
  14.         ExecutionEntity executionEntity=null;   
  15.         if(taskEntity.getExecution()!=null){   
  16.             executionEntity=taskEntity.getExecution();   
  17.         }else{   
  18.             executionEntity=getExecution(taskEntity.getExecutionId());   
  19.         }   
  20.            
  21.            
  22.         ProcessExecution newExecution=new ProcessExecution(executionEntity);   
  23.            
  24.         newExecution.setId(newExecutionId);   
  25.            
  26.         ProcessTask newTask=new ProcessTask(taskEntity);   
  27.         newTask.setId(newTaskId);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值