Activiti6实现自由跳转(可实现回退操作)
Activiti6实现自由跳转(可实现回退操作)
工作快2年的小白,如有错误,恳请大家批评指点
Activiti实现跳转的方式:
1.流程图配置连线,正常流转
这个是最安全的也是最可靠的
2.直接指定当前流程实例执行所选的环节
先看下流程图
图1::
如果第2步驳回 那流程应该回到第一步。接下来看代码如何实现:
if (“yes”.equals(msg)) { // 批准
map.put(“审批结果”, “【批准】” + OPINION); // 审批结果
setVariablesByTaskIdAsMap(taskId, map); // 设置流程变量
setVariablesByTaskId(taskId, “RESULT”, “批准”);
completeMyPersonalTask(taskId);
}else { // 驳回
// 记录原活动方向
List varList = returnmanager.varList(pd); //查询上一步流程记录
sql语句
String type = varList.get(0).getString(“TASK_DEF_KEY_”).toString();// 获取当前act_hi_taskinst表中的task_del_key判断是否下一节点是否是网关
map.put(“审批结果”, “【驳回】” + OPINION); // 审批结果
if (type.indexOf(“f”) == -1) { // 在下一节点是网关节点的前一节点id设置“f”开头的非常重要的
// 主意:下一节点不上网关节点 id不要设置“f"的
setVariablesByTaskId(taskId, “RESULT”, “驳回”);
setVariablesByTaskIdAsMap(taskId, map); // 设置流程变量
String taskkey = varList.get(varList.size() - 1).getString(“TASK_DEF_KEY_”).toString(); // 获取上一节点
jump(taskId, taskkey); //回退方法
mv.addObject(“msg”, “success”);//插入驳回流程信息
mv.setViewName(“save_result”);
returnmanager.edit(pd); //修改当前流程的结束时间看sql,(可要可不要)
return mv;
} else { //有网关线的走下面
看图
setVariablesByTaskIdAsMap(taskId, map); // 设置流程变量
setVariablesByTaskId(taskId, “RESULT”, “驳回”);
completeMyPersonalTask(taskId);
}
}
然后看jump方法
// 跳转方法(回退)
public void jump(String taskId, String taskkey) {
// 当前任务
Task currentTask = taskService.createTaskQuery().taskId(taskId).singleResult();
// 获取流程定义
org.activiti.bpmn.model.Process process =
repositoryService.getBpmnModel(currentTask.getProcessDefinitionId()).getMainProcess();
// 获取目标节点定义
FlowNode targetNode = (FlowNode) process.getFlowElement(taskkey);
// 删除当前运行任务
String executionEntityId = managementService.executeCommand(new DeleteTaskCmd(currentTask.getId()));
// 流程执行到来源节点
try {
managementService.executeCommand(new SetFLowNodeAndGoCmd(targetNode, executionEntityId));//流程执行到来源节点
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
。
type.indexOf(“f”) == -1 区分是有线的还是没线的看图
没画线的
自己画线的
最后好了 可以实现流程回退功能啦。