前段时间在linux环境部署activiti5.22工作流后,根据当前运行活动节点获取下一流程节点时总是报空指针。但是当重启tomcat后的一段时间内是正常的。
当时获取下一流程节点的方法是根据activiti中 List<PvmTransition> outTransitions = activityImpl.getOutgoingTransitions(); 这种方法获取的流出节点,但是在linux下一直不稳定,由于自身技术能力原因,并没有去寻找根本问题。后来换一种思路,通过自己解析配置文件获取流出节点。以下是相关代码:
1.首先拿到配置文件:
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey).latestVersion()
.singleResult();
logger.error("===模板相应版本ID:==="+pd.getDeploymentId()+","+pd.getId()+","+pd.getVersion());
BpmnModel model =(BpmnModel) repositoryService.getBpmnModel(pd.getId());
//获取所有节点
Collection<FlowElement> flowElements = model.getMainProcess().getFlowElements();
2.然后根据配置文件获取当前活动节点的流出节点
for(FlowElement e : flowElements) {
String forEachId=e.getId();//循环节点key
if (activityId.equals(forEachId)) {//当前节点==循环到的节点
if(e instanceof org.activiti.bpmn.model.UserTask) {//节点
sequenceFlowList=((org.activiti.bpmn.model.UserTask) e).getOutgoingFlows();//流出信息
nextNode=e.getId();
break;
}
}
}
3.循环遍历配置文件根据自定义条件获取到当前活动节点的下一节点。
/**
* 循环得到下一流程节点
*@description
*2017年7月15日上午9:36:39
*@author
*@param flowElements:配置文件
*@param nowNode:循环后当前需判断的节点
*@param activityId:流程中当前活动节点
*@param variables:变量信息
*@param objects:自定义条件判断信息
*@return
*String
*/
private String getNextLoadInfo(Collection<FlowElement> flowElements,String nowNode,String activityId,Map<String, Object> variables,List<Object[]> objects){
String nextNode="";//下一节点ID(所需要的节点数据)
List<SequenceFlow> sequenceFlowList = new ArrayList<SequenceFlow>();//下一个节点集合
String forEachId=""