我也是从网上找的,然后进行了简化和研究,固定
驳回
到draft节点,直接上代码,带注解的:
重新测试了一遍,修改了其中的一处错误!现在可以完美实现驳回到指定草稿节点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功能了!!