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

流程管理添加新方法,在上一篇文章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();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值