本节主要讲流程定义查询、查询某个流程设计图片并保存到本地中、查询最新版本的流程定义集合、删除所有key相同的定义
先创建一个java类
package com.java.procdef;
import java.io.File;
import java.io.IOException;
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 ProcessDefinitionTest {
//获取默认流程引擎实例,会自动读取avtiviti.cfg.xml文件
private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
//流程定义查询,就是查某个模板被用了多少次,返回流程定义集合对应表act_re_procdef
@Test
public void list() {
String processDefinition="myFirstProcess";
List<ProcessDefinition> pdList= processEngine.getRepositoryService()
.createProcessDefinitionQuery() //创建流程定义查询
.processDefinitionKey(processDefinition) //通过key查询,返回的是集合
.list();
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("====");
}
}
//通过流程定义id查询某个流程定义,就是查具体的某一个模板的某一个流程
@Test
public void getById() {
String processDefinitionId = "myFirstProcess:1:4";
ProcessDefinition pd = processEngine.getRepositoryService().createProcessDefinitionQuery() // 创建流程定义查询
.processDefinitionId(processDefinitionId).singleResult(); //
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("====");
}
/**
* 根据流程部署id和图片名字查询。查询某个流程定义的流程设计图片;并保存到本地中
* @throws IOException
*/
@Test
public void getImageById() throws IOException {
InputStream inputStream = processEngine.getRepositoryService()
.getResourceAsStream("10001", "diagrams/HelloWord.png"); //根据流程部署id和资源名称
//获得输入流,这个是apache提供的工具类
FileUtils.copyInputStreamToFile(inputStream, new File("E:/helloWord.png"));
}
/**
* 查询最新版本的流程定义集合
*/
@Test
public void selectLastVersion() {
List<ProcessDefinition> listAll= processEngine.getRepositoryService()
.createProcessDefinitionQuery() //创建流程定义查询
.orderByProcessDefinitionVersion().asc() //根据流程定义版本升序
.list();
//定义有序的map,相同的key,假如添加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("====");
}
}
/**
* 删除所有key相同的定义,activiti提供的接口支持级联删除
*
*/
@Test
public void deleteByKey() {
String processDefinitionKy="HelloWorld2";
List<ProcessDefinition> pdList= processEngine.getRepositoryService()
.createProcessDefinitionQuery() //创建流程定义查询
.processDefinitionKey(processDefinitionKy) //根据流程定义版本升序
.list();
for (ProcessDefinition pd : pdList) {
processEngine.getRepositoryService()
.deleteDeployment(pd.getDeploymentId(),true);
}
}
}