activiti根据当前节点获取下一个节点信息

在流程中使用监听器判断当前节点是否需要经过,否则跳转到下一个节点,如下图
这里写图片描述

当提交申请之后,当前提交人为部门负责人,那么部门负责人节点就不需要走了,直接到下一个节点,但是下一个节点是什么并不知道,就可以使用下面的代码获取到下一个节点信息直接跳转到下一个节点。

 /*** 获取当前流程的下一个节点* @param procInstanceId* @return*/public static String getNextNode(String procInstanceId){// 1、首先是根据流程ID获取当前任务:List tasks = processEngine.getTaskService().createTaskQuery().processInstanceId(procInstanceId).list();String nextId = "";for (Task task : tasks) {RepositoryService rs = processEngine.getRepositoryService();// 2、然后根据当前任务获取当前流程的流程定义,然后根据流程定义获得所有的节点:ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) rs).getDeployedProcessDefinition(task.getProcessDefinitionId());List activitiList = def.getActivities(); // rs是指RepositoryService的实例// 3、根据任务获取当前流程执行ID,执行实例以及当前流程节点的ID:String excId = task.getExecutionId();RuntimeService runtimeService = processEngine.getRuntimeService();ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery().executionId(excId).singleResult();String activitiId = execution.getActivityId();// 4、然后循环activitiList// 并判断出当前流程所处节点,然后得到当前节点实例,根据节点实例获取所有从当前节点出发的路径,然后根据路径获得下一个节点实例:for (ActivityImpl activityImpl : activitiList) {String id = activityImpl.getId();if (activitiId.equals(id)) {logger.debug("当前任务:" + activityImpl.getProperty("name")); // 输出某个节点的某种属性List outTransitions = activityImpl.getOutgoingTransitions();// 获取从某个节点出来的所有线路for (PvmTransition tr : outTransitions) {PvmActivity ac = tr.getDestination(); // 获取线路的终点节点logger.debug("下一步任务任务:" + ac.getProperty("name"));nextId = ac.getId();}break;}}}return nextId;}

如果流程中存在很多GateWay请看下一遍博文activiti根据当前节点获取下一个UseTask节点


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部