参考了网上的一些例子,采用了动态创建transition的方式,进行回退,逻辑处理没有问题,而且在程序运行中打印了TASK的ID 和 NAME ,HIBERNATE 也打印了相应的UPDATE SQL ,但在数据库jbpm4_task 中还是以前的节点,并没有把回退后的节点更新到数据库。 /**
* 动态创建连接当前任务节点至名称为destName的节点的Transition
* @param taskId 当前任务节点 (审批)
* @param sourceName 源节点名称 (审批)
* @param destName 目标节点名称 (提交)
*/
public void addOutTransition(Task task,String sourceName,String destName){
//业务场景:张三提交单据到李四审批,李四进行驳回给张三。采用动态创建连接当前任务节点方式。
// 当前节点: 审批 需要回退到:提交
ExecutionImpl e = (ExecutionImpl)executionService.findExecutionById(task.getId());
ActivityImpl sourceActivity = e.getActivity();//当前任务节点
ProcessDefinitionImpl processDefinitionImpl = sourceActivity.getProcessDefinition();
ActivityImpl destActivityImpl = processDefinitionImpl.findActivity(destName); //根据目标点名称获取目标节点
try {
//为两个节点创建连接
TransitionImpl transition = sourceActivity.createOutgoingTransition();
transition.setName("");
transition.setDestination(destActivityImpl);
sourceActivity.addOutgoingTransition(transition);
Map map = new HashMap();
map.put("sqr", "zhangsan"); //设置提交人为张三
taskService.setVariables(task.getId(), map);
taskService.completeTask(task.getId(),"");
List<ProcessInstance> piList1 = executionService.createProcessInstanceQuery().list();
for(ProcessInstance pi : piList1){
System.out.println(pi.findActiveActivityNames()); //打印出来当前激活节点为 “提交”
}
List<Task> johndoetaskList1 = taskService.findPersonalTasks("zhangsan"); //查询张三的待办记录
for(Task t1:johndoetaskList1){
System.out.println(t1.getId()+"\t"+t1.getName()+"\t"+t1.getAssignee()); //能够打印出刚才回退给张三的节点信息,问题:但在数据库表jbpm4_task中还是李四的节点。
}
}catch(Exception ex){
ex.printStackTrace();
}
}
* 动态创建连接当前任务节点至名称为destName的节点的Transition
* @param taskId 当前任务节点 (审批)
* @param sourceName 源节点名称 (审批)
* @param destName 目标节点名称 (提交)
*/
public void addOutTransition(Task task,String sourceName,String destName){
//业务场景:张三提交单据到李四审批,李四进行驳回给张三。采用动态创建连接当前任务节点方式。
// 当前节点: 审批 需要回退到:提交
ExecutionImpl e = (ExecutionImpl)executionService.findExecutionById(task.getId());
ActivityImpl sourceActivity = e.getActivity();//当前任务节点
ProcessDefinitionImpl processDefinitionImpl = sourceActivity.getProcessDefinition();
ActivityImpl destActivityImpl = processDefinitionImpl.findActivity(destName); //根据目标点名称获取目标节点
try {
//为两个节点创建连接
TransitionImpl transition = sourceActivity.createOutgoingTransition();
transition.setName("");
transition.setDestination(destActivityImpl);
sourceActivity.addOutgoingTransition(transition);
Map map = new HashMap();
map.put("sqr", "zhangsan"); //设置提交人为张三
taskService.setVariables(task.getId(), map);
taskService.completeTask(task.getId(),"");
List<ProcessInstance> piList1 = executionService.createProcessInstanceQuery().list();
for(ProcessInstance pi : piList1){
System.out.println(pi.findActiveActivityNames()); //打印出来当前激活节点为 “提交”
}
List<Task> johndoetaskList1 = taskService.findPersonalTasks("zhangsan"); //查询张三的待办记录
for(Task t1:johndoetaskList1){
System.out.println(t1.getId()+"\t"+t1.getName()+"\t"+t1.getAssignee()); //能够打印出刚才回退给张三的节点信息,问题:但在数据库表jbpm4_task中还是李四的节点。
}
}catch(Exception ex){
ex.printStackTrace();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货