由第一个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());
}
}
}
}