因为每个流程定义都可能会有好几个版本,所以有时候我们有这样的需求,查询出最新版本的流程定义的集合;
怎么来实现呢? 我们一般的思路是这样的。
第一步:我们通过Activiti接口来获取根据流程定义Version升序排序的流程定义的集合;
第二步:定义一个有序的Map, Map的key就是我们流程定义的Key,Map的值就是流程定义对象;
第三步:我们遍历第一步的集合,put(key,value) 假如Key相同,后者会覆盖前者;
第四步:我们获取Map的values。即我们需要的最新版本的流程定义的集合;
为了演示,我们搞一个MySecondProcess流程定义;
然后我们部署流程定义三次;
数据库表里对应的添加三条流程定义信息;
下面我们上代码。来实现我们要的功能;
/** * 查询最新版本的流程定义 */ @Test public void listLastVersion()throws Exception{ // 获取流程定义集合,根据Key升序排序 List<ProcessDefinition> listAll=processEngine.getRepositoryService() // 获取service类 .createProcessDefinitionQuery() // 创建流程定义查询 .orderByProcessDefinitionVersion().asc() // 根据流程定义版本升序 .list(); // 定义有序Map 相同的key 假如添加map的值 后面的值会覆盖前面相同key的值 Map<String,ProcessDefinition> map=new LinkedHashMap<String,ProcessDefinition>(); // 遍历集合 根据key来覆盖前面的值 来保证最新的Key覆盖前面的所有老的Key的值 for(ProcessDefinition pd:listAll){ map.put(pd.getKey(), pd); } List<ProcessDefinition> pdList=new LinkedList<ProcessDefinition>(map.values()); for(ProcessDefinition pd:pdList){ System.out.println("ID_:"+pd.getId()); System.out.println("NAME_:"+pd.getName()); System.out.println("KEY_:"+pd.getKey()); System.out.println("VERSION_:"+pd.getVersion()); System.out.println("==================="); } }
完整代码:http://pan.baidu.com/s/1eSsbe74