• Activiti解析.bpmn文件获得User Task节点的CandidateUsers特性的值


    参考文档:

    http://www.cnblogs.com/mingforyou/p/5351332.html

    http://blog.csdn.net/jackyrongvip/article/details/9256531

        /**
         * getJobProcessDefinitionMap
         * 查找UserTask节点中CandidateUsers不空的流程,并按照CandidateUser分类存储流程列表。
         * @param  @return    设定文件
         * @return Map<String,Set<ProcessDefinition>>    DOM对象
         * @throws 
         * @since  CodingExample Ver 1.1
         */
        private Map<String,Set<ProcessDefinition>> getJobProcessDefinitionMap() {
            Map<String, Set<ProcessDefinition>> jobProcessDefinitionCaditateMap = new HashMap<String,Set<ProcessDefinition>>();
    
            List<ProcessDefinition> processDefinitionList = findLastVersionProcessDefinition();
    
            for(ProcessDefinition processDefinition : processDefinitionList){
                BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
                List<org.activiti.bpmn.model.Process> processList = bpmnModel.getProcesses();
                if(processList != null && processList.size() > 0){
                    for(org.activiti.bpmn.model.Process process : processList){
                        if(process != null){
                            Collection<FlowElement> flowElementCollection = process.getFlowElements();
                            if(flowElementCollection != null && flowElementCollection.size() > 0){
                                for(FlowElement flowElement : flowElementCollection){
                                    if(flowElement instanceof UserTask){
                                        UserTask userTask = (UserTask)flowElement;
                                        List<String> candidateUsers = userTask.getCandidateUsers();
                                        if(candidateUsers != null && candidateUsers.size() > 0){
                                            for(String candidateUser : candidateUsers){
                                                if(!StringUtils.isBlank(candidateUser)){
                                                    Set<ProcessDefinition> processDefinitionCaditateSet = null;
                                                    if(jobProcessDefinitionCaditateMap.containsKey(candidateUser)){
                                                        processDefinitionCaditateSet = jobProcessDefinitionCaditateMap.get(candidateUser);
                                                    }else{
                                                        processDefinitionCaditateSet = new HashSet<ProcessDefinition>();
                                                        jobProcessDefinitionCaditateMap.put(candidateUser, processDefinitionCaditateSet);
                                                    }
                                                    if(!processDefinitionCaditateSet.contains(processDefinition)){
                                                        processDefinitionCaditateSet.add(processDefinition);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
    
            return jobProcessDefinitionCaditateMap;
        }
  • 相关阅读:
    右值和move 与 forward
    C++11的chrono库,实现毫秒微秒级定时
    HDOJ 1176 免费馅饼(完全背包)
    HDU 1069 Monkey and Banana
    杭电 1003 Max Sum (动态规划)
    UVA ~ 514 ~ Rails (栈)
    UVA 679
    UVA11988 Broken Keyboard (a.k.a. Beiju Text)【数组模拟链表】
    Codeforces 845 C Two TVs
    codeforces 845A Chess Tourney
  • 原文地址:https://www.cnblogs.com/rgqancy/p/7081192.html
Copyright © 2020-2023  润新知