java1234开源博客系统
博客信息

Activiti查询最新版本的流程定义集合

发布时间:『 2016-04-18 16:12』  博客类别:activiti  阅读(7445) 评论(1)

因为每个流程定义都可能会有好几个版本,所以有时候我们有这样的需求,查询出最新版本的流程定义的集合;


怎么来实现呢? 我们一般的思路是这样的。


第一步:我们通过Activiti接口来获取根据流程定义Version升序排序的流程定义的集合;

第二步:定义一个有序的Map, Map的key就是我们流程定义的Key,Map的值就是流程定义对象;

第三步:我们遍历第一步的集合,put(key,value)  假如Key相同,后者会覆盖前者;

第四步:我们获取Map的values。即我们需要的最新版本的流程定义的集合;


为了演示,我们搞一个MySecondProcess流程定义;

aaa.jpg


然后我们部署流程定义三次;


bbbb.jpg


数据库表里对应的添加三条流程定义信息;


下面我们上代码。来实现我们要的功能;


/**
 * 查询最新版本的流程定义
 */
@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





关键字:   Activiti  
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有