前段时间在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小时内删除。