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

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


一般的思路是这样的:

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

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

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

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


先看看数据库中的记录


代码实现:

package com.gcx.activiti.table;

import java.io.IOException;
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.junit.Test;

public class Search {
	private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
	/**
	 * 查询最新版本的流程定义
	 * @throws IOException 
	 */
	@Test
	public void listLastVersion() {
		List<ProcessDefinition> list = processEngine.getRepositoryService()
		.createProcessDefinitionQuery()
		.orderByProcessDefinitionVersion().asc()//升序
		.list();
		//定义有序map,相同的key,添加map值后,后面的会覆盖前面的值
		Map<String,ProcessDefinition> map=new LinkedHashMap<String,ProcessDefinition>();
		//遍历相同的key,替换最新的值
		for(ProcessDefinition pd:list){
			map.put(pd.getKey(), pd);
		}
		
		List<ProcessDefinition> linkedList=new LinkedList<ProcessDefinition>(map.values());
		for(ProcessDefinition pd:linkedList){
			System.out.println(pd.getId());
			System.out.println(pd.getName());
			System.out.println(pd.getVersion());
		}
	}
}

结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值