流程管理添加新方法,在上一篇文章http://blog.csdn.net/zhengyong15984285623/article/details/9283165基础上扩展
如下:
* 1.列表显示的是所有流程定义(不同key)的最新版本
* 2.删除流程定义时,此key的所有版本的流程定义都会被删除
* 3.产看流程图时,显示的这个最新版本的流程定义图
package cn.edu.zust.itee;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.zip.ZipInputStream;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessDefinitionQuery;
import org.jbpm.api.ProcessEngine;
import org.junit.Test;
/**
* @author 郑勇
* 2013-07-09 17:47
* 注意:
* 1.deploymentId对应jbpm4_deployment表中的"DBID_"字段;
* 2.列表显示的是所有流程定义(不同key)的最新版本
* 3.删除流程定义时,此key的所有版本的流程定义都会被删除
* 4.产看流程图时,显示的这个最新版本的流程定义图
*/
public class ProcessDefinitionManageHighLevel {
//单例模式获取流程引擎
//singleton = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
private ProcessEngine processEngine = Configuration.getProcessEngine();
//1.部署流程定义(添加)
//相关表:jbpm4_deployment,jbpm4_deployprop,jbpm4_lob
@Test
public void deploy_1(){
String deploymentId = processEngine.getRepositoryService()
.createDeployment()
.addResourceFromClasspath("helloword/test.jpdl.xml")
.addResourceFromClasspath("helloword/test.png")
.deploy();
System.out.println(deploymentId);
}
//一次添加多个资源(zip)
@Test
public void deploy_2(){
//找到zip文件
InputStream in = this.getClass().getClassLoader().getResourceAsStream("helloword/helloword.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
//部署
String deploymentId = processEngine.getRepositoryService()
.createDeployment()
.addResourcesFromZipInputStream(zipInputStream)
.deploy();
System.out.println("deploymentId="+deploymentId);
}
//2.查询所有流程定义
@Test
public void findAll(){
//查询
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.orderAsc(ProcessDefinitionQuery.PROPERTY_KEY)
.list();
//显示
for(ProcessDefinition pd : list){
System.out.println("id="+pd.getId() //格式{key}-{version}
+",name="+pd.getName() //流程定义"xxx.jpdl.xml"中根元素的name属性的值
+",key="+pd.getKey() //流程定义"xxx.jpdl.xml"中根元素的key属性的值(不写,默认与name属性一致)
+",version="+pd.getVersion()//流程定义"xxx.jpdl.xml"中根元素的version属性的值(不写,key一样时,默版本认自增)
+",deploymentId="+pd.getDeploymentId());本流程对应的"xxx.jpdl.xml"文件所属的Deployment对象的id
}
}
//查询所有最新版本的流程定义
@Test
public void findAllLatestVersions(){
//查询所有流程定义,按版本升序排列,这样所有最大版本就排在最后了
List<ProcessDefinition> allList = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)
.list();
//从里面过滤出最新版本的流程定义
Map<String,ProcessDefinition> map = new HashMap<String,ProcessDefinition>();
for(ProcessDefinition pd: allList){
map.put(pd.getKey(),pd);
}
//显示
for(ProcessDefinition pd : map.values()){
System.out.println("id="+pd.getId() //格式{key}-{version}
+",name="+pd.getName() //流程定义"xxx.jpdl.xml"中根元素的name属性的值
+",key="+pd.getKey() //流程定义"xxx.jpdl.xml"中根元素的key属性的值(不写,默认与name属性一致)
+",version="+pd.getVersion()//流程定义"xxx.jpdl.xml"中根元素的version属性的值(不写,key一样时,默版本认自增)
+",deploymentId="+pd.getDeploymentId());本流程对应的"xxx.jpdl.xml"文件所属的Deployment对象的id
}
}
//3.删除流程定义(其实是删除Deployment)
@Test
public void deleteById(){
String deploymentId = "1";
//删除Deployment,如果有关联信息,就抛异常
// processEngine.getRepositoryService().deleteDeployment(deploymentId);
//删除Deployment,如果有关联信息,就级联删除
processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
}
//删除指定key的所有版本的流程定义
@Test
public void deleteByKey(){
//1.查询出指定key的所有版本的流程定义
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
.processDefinitionKey("test")
.list();
//2.循环删除
for(ProcessDefinition pd :list){
processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
}
}
//4.获取部署时某文件的资源(查看流程图)
@Test
public void getResourceFromDeployment() throws Exception{
String deploymentId = "40001";
String resourceName = "helloword/test.png";
//获取某Deployment中所有资源文件的名称
Set<String> set = processEngine.getRepositoryService().getResourceNames(deploymentId);
for(String flieName : set){
System.out.println(flieName);
}
//获取某Deployment中所有资源文件
InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
//保存在E盘中
OutputStream out = new FileOutputStream("E://process.png");
for(int b = -1;(b=in.read())!= -1;){
out.write(b);
}
in.close();
out.close();
}
}