一、查看最新版本的流程定義
- 因為每個流程定義都可能會有好幾個版本,所以有時候我們有這樣的需求,查詢出最新版本的流程定義的集合
- 第一步:我們通過Activiti接口來獲取根據流程定義Version升序排序的流程定義的集合;
- 第二步:定義一個有序的Map, Map的key就是我們流程定義的Key,Map的值就是流程定義對象;
- 第三步:我們遍歷第一步的集合,put(key,value) 假如Key相同,后者會覆蓋前者;
- 第四步:我們獲取Map的values。即我們需要的最新版本的流程定義的集合;
package com.shyroke.activiti.firstActiviti; import java.io.File; import java.io.InputStream; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.repository.ProcessDefinition; import org.apache.commons.io.FileUtils; import org.junit.Test; public class ProcessDefineTest2 { /** * 獲取默認流程引擎實例,會自動讀取activiti.cfg.xml文件 */ private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 查看最新版本的流程定義 */ @Test public void listLastProcDef() { 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("========="); } } }
結果: