activiti工作流任意节点撤回
来源:互联网 发布:arm linux 开机启动 编辑:程序博客网 时间:2024/04/30 05:10
单步回退
在这篇博文的基础上整理了注释,同时做了两步回退,上代码:
/** * 多步回退 */ @Test public void rollback() { // 当前任务Id String taskId = "7503"; // 取得当前任务.当前任务节点 HistoricTaskInstance currTask = pe.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId).singleResult(); // 取得流程定义 ProcessDefinitionEntity definition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) pe.getRepositoryService()).getDeployedProcessDefinition(currTask.getProcessDefinitionId()); // 取得本步活动 ActivityImpl currActivity = ((ProcessDefinitionImpl) definition).findActivity(currTask.getTaskDefinitionKey()); // 本节点入口 List<PvmTransition> nextTransitionList = currActivity.getIncomingTransitions(); // 本节点出口 List<PvmTransition> pvmTransitionList = currActivity.getOutgoingTransitions(); // 新建一个节点连线关系集合(存储原流程出口) List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>(); for (PvmTransition pvmTransition : pvmTransitionList) { oriPvmTransitionList.add(pvmTransition); } // 清除当前活动的出口 pvmTransitionList.clear(); // 新建一个出口节点集合(存储新流程出口) List<TransitionImpl> newTransitions = new ArrayList<TransitionImpl>(); // 循环本节点入口 for (PvmTransition nextTransition : nextTransitionList) { PvmActivity nextActivity = nextTransition.getSource(); //查找上一节点 ActivityImpl nextActivityImpl = ((ProcessDefinitionImpl) definition).findActivity(nextActivity.getId()); List<PvmTransition> nextTransitionListN = nextActivityImpl.getIncomingTransitions(); // 循环上一节点入口 for (PvmTransition nextTransitionN : nextTransitionListN) { PvmActivity nextActivityN = nextTransitionN.getSource(); //查找上上一节点 ActivityImpl nextNextActivityImpl = ((ProcessDefinitionImpl) definition).findActivity(nextActivityN.getId()); //获取上一步活动类型 String event = checkActivityImpl(nextNextActivityImpl); //如果上一步是开始事件,则不允许回退 if(("startEvent").equalsIgnoreCase(event)){ System.out.println("开始节点,不允许回退!"); } // 建立新出口 TransitionImpl newTransition = currActivity.createOutgoingTransition(); newTransition.setDestination(nextNextActivityImpl); newTransitions.add(newTransition); } } pe.getTaskService().complete(taskId); // 恢复方向 for (TransitionImpl transitionImpl : newTransitions) { currActivity.getOutgoingTransitions().remove(transitionImpl); } for (PvmTransition pvmTransition : oriPvmTransitionList) { pvmTransitionList.add(pvmTransition); } }
实际上我们想退回到哪个节点就找到那个节点就行了,而到底是回退还是前进取决于我们是在入口做文章还是出口做文章。这样的话我们应该可以做到任意节点的跳转,一般的业务需求足够了。
当然这里说的任意节点撤回不包括跳出子流程,多实例撤回等等,需要进一步研究。
阅读全文
0 0
- activiti工作流任意节点撤回
- 扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回
- 扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回
- Activiti 指定节点跳转(适合退回、撤回)流程
- Activiti工作流节点的自由跳转
- Activiti工作流节点的自由跳转
- 11.activiti工作流-开始活动节点
- Activiti工作流节点的自由跳转
- 关于activiti流程撤回操作方法
- 【Activiti】跳转到工作流的任意节点(本例用跳转到上一节点讲解即流程回退)
- 也谈一下Activiti工作流节点的自由跳转
- Activiti 生成工作流节点之间的上下级关系
- 也谈一下Activiti工作流节点的自由跳转
- Activiti工作流之获取流程定义中所有的节点
- Activiti工作流之获取流程定义中所有的节点
- activiti工作流显示流程图且当前节点高亮
- Activiti-工作流
- activiti工作流
- ViewPager+Fragment的实现及禁止滑动
- 移动web问题小结
- struts之国际化的实现操作
- 第十二节、css进阶:消除未使用的css
- #剑指offer(17)--连续子数组的最大和
- activiti工作流任意节点撤回
- log4j.properties 配置
- 基于SpringBoot + Mybatis实现SpringMVC Web项目
- mongodb group by 多字段/distinct等
- linux下网络丢包问题处理--overruns不断增加
- 欢迎使用CSDN-markdown编辑器
- Linux网络配置
- 搭建SVN服务器详细教程
- MySQL主从复制