绝了,我想起来了不启动流程取得第一任务的下一环节

来源:互联网 发布:数据库误删除没备份 编辑:程序博客网 时间:2024/06/04 18:11

由第一个task获取下一个task是什么(为了页面动态显示,客户选择),然后启动流程,指定task

思路,发布流程获取flowKey--》根据flowKey获取所有的环节--》根据activityImpl【0】第一个环节获取下一流转--》成功

由于代码private,所有用了反射获取

附注:不能根据activitiId获取activityImpl,因为流程未启动,没有活动状态,则为空,如图测试效果:


所以上代码:

List list = new ArrayList();        PimFlowDefine flowDefine = pimFlowDefineMapper.selectByPrimaryKey(flowId);        String flowKey = flowDefine.getFlowKey();        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowKey).latestVersion().singleResult(); ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinition.getId());  List<IMap> jobList = iActivitiUtilSvc.getAllJobsByKey(flowKey);String activityId = jobList.get(0).getString("id");List<ActivityImpl> activitiList = def.getActivities();  //rs是指RepositoryService的实例List<PvmTransition> transitions = activitiList.get(0).getOutgoingTransitions();try {Method method = ActivitiUtilSvcImpl.class.getDeclaredMethod("jumpGateway", List.class,List.class,String.class);method.setAccessible(true);method.invoke(ActivitiUtilSvcImpl.class.newInstance(),list, transitions, "map");} catch (Exception e) {e.printStackTrace();}param.put("nextJob", list);

 private void jumpGateway(List list, List<PvmTransition> outTransitions, String listType){for (PvmTransition tr : outTransitions) {PvmActivity ac = tr.getDestination(); //获取线路的下一节点  String type = ac.getProperty("type").toString();if (type.endsWith("Gateway")) {List<PvmTransition> outTransitionsTemp = ac.getOutgoingTransitions();jumpGateway(list, outTransitionsTemp, listType);}else{if("map".equals(listType.toLowerCase())){IMap map = new IMap();map.put("id", ac.getId());map.put("name", ac.getProperty("name"));list.add(map);}else if("string".equals(listType.toLowerCase())){list.add(ac.getId());}}}    }    


0 0
原创粉丝点击