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;
    }
复制代码

 

posted @   任国强  阅读(8353)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示