前段时间在linux环境部署activiti5.22工作流后,根据当前运行活动节点获取下一流程节点时总是报空指针。但是当重启tomcat后的一段时间内是正常的。
conf当时获取下一流程节点的方法是根据activiti中 List<PvmTransition> outTransitions = OutgoingTransitions(); 这种方法获取的流出节点,但是在linux下一直不稳定,由于自身技术能力原因,并没有去寻根本问题。后来换一种思路,通过自己解析配置文件获取流出节点。以下是相关代码:
1.首先拿到配置文件:
ProcessDefinition pd = ateProcessDefinitionQuery()
.processDefinitionKey(processDefinitionKey).latestVersion()
.singleResult();
("===模板相应版本ID:==="+pd.getDeploymentId()+","+pd.getId()+","+pd.getVersion());
BpmnModel model =(BpmnModel) Id());
//获取所有节点
Collection<FlowElement> flowElements = MainProcess().getFlowElements();
2.然后根据配置文件获取当前活动节点的流出节点
for(FlowElement e : flowElements) {
String Id();//循环节点key
if (activityId.equals(forEachId)) {//当前节点==循环到的节点
if(e instanceof org.del.UserTask) {//节点
sequenceFlowList=((org.del.UserTask) e).getOutgoingFlows();//流出信息
Id();
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="";
for (FlowElement e : flowElements) {
Id();//循环节点key
//如果循环节点==当前节点信息,则获取下一节点
if (nowNode.equals(forEachId)) {
if(e instanceof org.del.UserTask&&!activityId.equals(forEachId)) {//节点
sequenceFlowList=((org.del.UserTask) e).getOutgoingFlows();
(0).getTargetRef();
if (variables!=null) {
variables=checkVariable(variables,nowNode,processDefinitionKey);
}
String nodeName= e.getName();//节点名称
String Id();//节点ID
processJson="{\"taskId\":\""+nodeId+"\",";
processJson+="\"taskName\":\""+nodeName+"\"";
processJson+="}";
return processJson;
}else {//排他网关
if(e instanceof org.del.UserTask){
sequenceFlowList=((org.del.UserTask) e).getOutgoingFlows();
}else{
sequenceFlowList=((org.del.ExclusiveGateway) e).getOutgoingFlows();
}
for(int i=0;i<sequenceFlowList.size();i++){
(i).getTargetRef();
String (i).getId();
BranchConf BranchConfInfo(flowId, processInstanceId, processDefinitionKey,objects);
if (branchConf!=null&&branchConf.isIspass()) {//如果分支条件不为空并且通过此条件
("==分支条件=="+ActivitiNodeId()+"==="+BranchCondition());
if (variables!=null) {
variables.ActivitiVariable(), branchConf.isIspass());
}
//如果流向线路为排他网关
for (FlowElement e1 : flowElements) {
if(nextNode.Id())){
if(e1 instanceof org.del.ExclusiveGateway){
sequenceFlowList=((org.del.ExclusiveGateway) e1).getOutgoingFlows();
if (sequenceFlowList.size()==1) {
(0).getId();
BranchConfInfo(flowId, processInstanceId, processDefinitionKey,objects);
if (branchConf!=null) {
if (variables!=null) {
variables.ActivitiVariable(), branchConf.isIspass());
}
if (branchConf.isIspass()) {
(i).getTargetRef();
return getNextLoadInfo(flowElements,nextNode,activityId,variables,objects);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论