03-jbpm工作流管理方法扩展

来源:互联网 发布:实况17内马尔巅峰数据 编辑:程序博客网 时间:2024/06/05 03:04

流程管理添加新方法,在上一篇文章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@Testpublic void deploy_1(){String deploymentId = processEngine.getRepositoryService() .createDeployment() .addResourceFromClasspath("helloword/test.jpdl.xml") .addResourceFromClasspath("helloword/test.png") .deploy();System.out.println(deploymentId);}//一次添加多个资源(zip)@Testpublic 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.查询所有流程定义@Testpublic 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}}//查询所有最新版本的流程定义@Testpublic 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)@Testpublic void deleteById(){String deploymentId = "1";//删除Deployment,如果有关联信息,就抛异常//processEngine.getRepositoryService().deleteDeployment(deploymentId);//删除Deployment,如果有关联信息,就级联删除processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);}//删除指定key的所有版本的流程定义@Testpublic void deleteByKey(){//1.查询出指定key的所有版本的流程定义List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("test").list();//2.循环删除for(ProcessDefinition pd :list){processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());}}//4.获取部署时某文件的资源(查看流程图)@Testpublic 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();}}