1.源碼地址:https://github.com/heidaodageshiwo/springbootactivity
因爲每個流程定義都可能會有好幾個版本,所以有時候我們有這樣的需求,查詢出最新版本的流程定義的集合;
思路是這樣的。
第一步:我們通過Activiti接口來獲取根據流程定義Version升序排序的流程定義的集合;
第二步:定義一個有序的Map, Map的key就是我們流程定義的Key,Map的值就是流程定義對象;
第三步:我們遍歷第一步的集合,put(key,value) 假如Key相同,後者會覆蓋前者;
第四步:我們獲取Map的values。即我們需要的最新版本的流程定義的集合;
我們搞一個MySecondProcess流程定義;
然後我們部署流程定義三次;
數據庫表裏對應的添加三條流程定義信息;
@RequestMapping("/procdef_list_new")
/**
* 查詢最新版本的流程定義
*/
public String listLastVersion()throws Exception{
// 獲取流程定義集合,根據Key升序排序
List<ProcessDefinition> listAll=repositoryService // 獲取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("===================");
}
return "";
}