查看流程定义
/**
* 查看流程定义
*/
@Test
public void queryProcessDefinition(){
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery() // 创建一个流程定义的查询
/** 指定查询条件 */
//.deploymentId("") // 使用部署对象id查询
//.processDefinitionId("") // 使用流程定义id查询
//.processDefinitionKey("") // 使用流程定义的key查询
//.processDefinitionResourceNameLike("请假申请") // 使用流程定义的名称模糊查询
//..........
/** 排序 */
//.orderByProcessDefinitionVersion().asc() // 使用版本的升序排列
//.orderByProcessDefinitionName().desc() // 使用流程定义的名称降序排列
//..........
.list(); // 返回一个结果集
//.singleResult(); // 返回唯一的结果集
//.count() // 返回结果集数量
//.listPage(firstResult, maxResults) // 分页查询
if(list != null && list.size() > 0){}
for(ProcessDefinition de:list){
System.out.println("============== 流程定义查询 begin ===============");
System.out.println("流程定义ID:"+de.getId()); // 流程定义的key+版本号+随机生成数
System.out.println("流程定义名称:"+de.getName()); // 对应test1.bpmn 文件中的name
System.out.println("流程定义的key:"+de.getKey()); // 对应test1.bpmn 文件中的key
System.out.println("流程定义的版本:"+de.getVersion()); // 当流程定义的key相同的情况下,版本升级,默认1
System.out.println("资源文件bpmn名称:"+de.getResourceName());
System.out.println("资源文件png名称:"+de.getDiagramResourceName());
System.out.println("部署对象ID:"+de.getDeploymentId());
System.out.println("============== 流程定义查询 end ===============");
}
}
运行单元测试,输出结果入下:
可以看到流程定义的key值相同的情况下,版本是从1开始逐次升级的
流程定义的Id是【key:版本:生成ID】
查看最新版本的流程定义
/**
* 查询最新版本的流程定义
*/
@Test
public void queryBestNewProcessDefinition() {
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.orderByProcessDefinitionVersion().asc()
.list();
/**
* Map<String,ProcessDefinition>
* map集合的key = 流程定义的key
* map集合的value = 流程定义对象
* map集合的特点,当map集合key相同的情况下,后一次的值将替换前一次的值
*/
Map<String,ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
if(list != null && list.size() > 0){
for(ProcessDefinition d:list){
map.put(d.getKey(), d);
}
}
List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());
if(pdList != null && pdList.size() > 0){
for(ProcessDefinition d:pdList){
System.out.println("============== 获取最新的流程定义 begin ===============");
System.out.println("流程定义ID:"+d.getId()); // 流程定义的key+版本号+随机生成数
System.out.println("流程定义名称:"+d.getName()); // 对应test1.bpmn 文件中的name
System.out.println("流程定义的key:"+d.getKey()); // 对应test1.bpmn 文件中的key
System.out.println("流程定义的版本:"+d.getVersion()); // 当流程定义的key相同的情况下,版本升级,默认1
System.out.println("资源文件bpmn名称:"+d.getResourceName());
System.out.println("资源文件png名称:"+d.getDiagramResourceName());
System.out.println("部署对象ID:"+d.getDeploymentId());
System.out.println("============== 获取最新的流程定义 ===============");
}
}
}
查看流程定义文档的资源,查看流程图文件
/**
* 查看流程图文件
*/
@Test
public void findImage() throws IOException{
String deploymentId = "15002";
// 获取图片资源名称
List<String> names = processEngine.getRepositoryService()
.getDeploymentResourceNames(deploymentId);
// 定义图片资源名称
String imgName = null;
for(String name:names){
System.out.println("图片名:"+name);
if(name.indexOf(".png")>=0){
imgName = name;
}
}
System.out.println("imgName:"+imgName);
// 通过部署ID和文件名得到文件的输入流
InputStream in = processEngine.getRepositoryService()
.getResourceAsStream(deploymentId, imgName);
File f = new File("D:/"+imgName);
FileUtils.copyInputStreamToFile(in,f);
System.out.println("=============图片输出成功=============");
}
运行单元测试:
现在我们可以在D盘看到一个名称为diagrams的文件夹了,打开就可以看到生成的流程图文件了
总结:
-
流程定义和部署对象相关的Service都是RepositoryService。
-
创建流程定义查询对象,可以在ProcessDefinitionQuery上设置查询的相关参数
-
调用ProcessDefinitionQuery对象的list方法,执行查询,获得符合条件的流程定义列表
-
由运行结果可以看出:Key和Name的值为:bpmn文件process节点的id和name的属性值
-
key属性被用来区别不同的流程定义。
-
带有特定key的流程定义第一次部署时,version为1。之后每次部署都会在当前最高版本号上加1
-
Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个自动生成的唯一的数字
-
重复部署一次,deploymentId的值以一定的形式变化,规则act_ge_property表生成