关于activiti驳回到任意节点的实现

我也是从网上找的,然后进行了简化和研究,固定 驳回 到draft节点,直接上代码,带注解的:
@Override
public void rejectTask(String procInstId, String destTaskKey,String rejectMessage)
   throws ServiceException {
  // TODO Auto-generated method stub
  //获得当前任务的对应实列
  
  Task taskEntity =  taskService.createTaskQuery().processInstanceId(procInstId).singleResult();
  //当前任务key
  String taskDefKey = taskEntity.getTaskDefinitionKey();
  //获得当前流程的定义模型
  
  ProcessDefinitionEntity  processDefinition  =(ProcessDefinitionEntity) ((RepositoryServiceImpl)repositoryService)
      .getDeployedProcessDefinition(taskEntity.getProcessDefinitionId()); 
  
  //获得当前流程定义模型的所有任务节点
  
  List<ActivityImpl> activitilist = processDefinition.getActivities();
  //获得当前活动节点和驳回的目标节点"draft"
  ActivityImpl currActiviti = null;//当前活动节点
  ActivityImpl destActiviti = null;//驳回目标节点
  int sign = 0;
  for(ActivityImpl activityImpl : activitilist){
   //确定当前活动activiti节点
   
   if(taskDefKey.equals(activityImpl.getId())){
    currActiviti = activityImpl;
    
    sign++;
   }else if(destTaskKey.equals(activityImpl.getId())){
    destActiviti = activityImpl;
    
    sign++;
   }
   //System.out.println("//-->activityImpl.getId():"+activityImpl.getId());
   if(sign==2){
    break;//如果两个节点都获得,退出跳出循环
   }
  }
  System.out.println("//-->currActiviti activityImpl.getId():"+currActiviti.getId());
  System.out.println("//-->destActiviti activityImpl.getId():"+destActiviti.getId());
  //保存当前活动节点的流程想参数
  
  List<PvmTransition> hisPvmTransitionList = new ArrayList<PvmTransition>(0);
  
  for(PvmTransition pvmTransition:currActiviti.getOutgoingTransitions()){
   hisPvmTransitionList.add(pvmTransition);
  }
  //清空当前活动几点的所有流出项
  
  currActiviti.getOutgoingTransitions().clear();
  System.out.println("//-->currActiviti.getOutgoingTransitions().clear():"+currActiviti.getOutgoingTransitions().size());
  //为当前节点动态创建新的流出项
  
  TransitionImpl newTransitionImpl = currActiviti.createOutgoingTransition();
  //为当前活动节点新的流出目标指定流程目标
  newTransitionImpl.setDestination(destActiviti);
  //保存驳回意见
  
  taskEntity.setDescription(rejectMessage);//设置驳回意见
  taskService.saveTask(taskEntity);
  //设定驳回标志  
  
  Map<String, Object> variables = new HashMap<String, Object>(0);
  variables.put(WfConstant.WF_VAR_IS_REJECTED.value(), WfConstant.IS_REJECTED.value());
  //执行当前任务驳回到目标任务draft
  
  taskService.complete(taskEntity.getId(), variables);
  
  //清除目标节点的新流入项
  
  destActiviti.getIncomingTransitions().remove(newTransitionImpl);
  //清除原活动节点的临时流程项
  
  currActiviti.getOutgoingTransitions().clear();
  //还原原活动节点流出项参数
  
  currActiviti.getOutgoingTransitions().addAll(hisPvmTransitionList);
}



重新测试了一遍,修改了其中的一处错误!现在可以完美实现驳回到指定草稿节点draft功能了!!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值