标签:
package cn.itcast.b_processDefinition;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
public class ProcessDefinitionTest {
/**工作流的核心对象*/
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**部署流程定义(从类路径部署)*/
@Test
public voiddeploymentProcessDefinition_classpath(){
Deployment deployment = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.createDeployment()//创建部署对象
.name("流程定义0820")
.addClasspathResource("diagrams/HelloWorld.bpmn")//从类路径下加载资源,一次只能加载一个资源
.addClasspathResource("diagrams/HelloWorld.png")//从类路径下加载资源,一次只能加载一个资源
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());
System.out.println("部署名称:"+deployment.getName());
System.out.println("部署时间:"+deployment.getDeploymentTime());
}
/**部署流程定义(从zip文件完成部署)*/
@Test
public voiddeploymentProcessDefinition_zip(){
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/HelloWorld.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment deployment = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.createDeployment()//创建部署对象
.name("流程定义0820")
.addZipInputStream(zipInputStream)//使用zip的输入流完成部署,一次部署多个文件
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());
System.out.println("部署名称:"+deployment.getName());
System.out.println("部署时间:"+deployment.getDeploymentTime());
}
/**查询流程定义*/
@Test
public voidfindProcessDefinitionList(){
List<ProcessDefinition> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.createProcessDefinitionQuery()//创建流程定义查询对象
/**where条件*/
// .deploymentId(deploymentId)//按照部署对象ID查询
.processDefinitionKey("helloworld")//按照流程定义的key查询
// .processDefinitionNameLike(processDefinitionNameLike)//按照流程定义名称模糊查询
// .processDefinitionId(processDefinitionId)//按照流程定义的id查询
/**排序*/
.orderByProcessDefinitionVersion().asc()//按照流程定义版本升序排列
// .orderByProcessDefinitionName().desc()//按照流程定义名称降序排列
/**返回结果集*/
// .listPage(firstResult,maxResults);//分页查询
// .count();//返回结果集的数量
// .singleResult();//单个结果集(使用id查询,返回)
.list();//返回多个结果集
if(list!=null && list.size()>0){
for(ProcessDefinition pd:list){
System.out.println("流程定义ID:"+pd.getId());//key+版本+随机生成数
System.out.println("流程定义名称:"+pd.getName());//对应HelloWolrd.bpmn文件中name的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">
System.out.println("流程定义的key:"+pd.getKey());//对应HelloWolrd.bpmn文件中id的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">
System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key相同的情况下,版本升级,从1开始
System.out.println("资源名称(bpmn文件):"+pd.getResourceName());
System.out.println("资源图片名称(png文件):"+pd.getDiagramResourceName());
System.out.println("部署对象ID:"+pd.getDeploymentId());
System.out.println("************************************************************");
}
}
}
/**删除流程定义*/
@Test
public void deleteProcessDefinition(){
String deploymentId = "801";
/**
* 不带级联的删除
* 如果流程只是完成部署或者流程已经执行完成(即流程没有正在执行),此时可以使用不带级联的删除
* 但是:如果流程已经启动,并且正在执行,此时再执行不带级联删除的时候,就会抛出异常
*/
// processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
// .deleteDeployment(deploymentId);//使用部署对象ID,删除部署对象
/**
* 级联删除
* 不管流程是否启动,都可以级联删除23张表对应的主外键约束
*/
processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.deleteDeployment(deploymentId,true);//使用部署对象ID,删除部署对象
System.out.println("删除成功,部署对象ID是:"+deploymentId);
}
/**获取流程定义文档的资源(查看流程图附件)
* @throws Exception */
@Test
public void viewProcessPic() throws Exception{
//将数据库资源文件表中的图片,读取出来,放置到D盘目录下(生成HelloWorld.png的图片)
//部署ID
String deploymentId = "701";
//获取当前部署ID对应的资源
List<String> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.getDeploymentResourceNames(deploymentId);
//资源图片名称
String resourceName = "";
if(list!=null && list.size()>0){
for(String s:list){
if(s.indexOf(".png")>=0){
resourceName = s;
}
}
}
//获取图片的输入流
InputStream in = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.getResourceAsStream(deploymentId, resourceName);
//输入流中的文件写到输出流中
// File file = new File("D:/"+resourceName);
// OutputStream out = new FileOutputStream(file);
// for(int b=-1;(b=in.read())!=-1;){
// out.write(b);
// }
// out.close();
// in.close();
FileUtils.copyInputStreamToFile(in,new File("D:/"+resourceName));
}
/**查询最新版本的流程定义*/
@Test
public voidfindProcessDefinitionListWithLastVersion(){
List<ProcessDefinition> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.createProcessDefinitionQuery()//创建流程定义查询对象
/**排序*/
.orderByProcessDefinitionVersion().asc()//按照流程定义版本升序排列(最新版本的在最后)
/**返回结果集*/
.list();//返回多个结果集
/**
* map集合的key表示流程定义的key
* map集合的value表示流程定义的对象
*/
Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
if(list!=null && list.size()>0){
for(ProcessDefinition pd:list){
map.put(pd.getKey(), pd);//map集合的特点,当map集合key相同的情况下,后一次的值将替换前一次值
}
}
List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());
if(pdList!=null && pdList.size()>0){
for(ProcessDefinition pd:pdList){
System.out.println("流程定义ID:"+pd.getId());//key+版本+随机生成数
System.out.println("流程定义名称:"+pd.getName());//对应HelloWolrd.bpmn文件中name的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">
System.out.println("流程定义的key:"+pd.getKey());//对应HelloWolrd.bpmn文件中id的属性值 <process id="helloworld"name="helloworldProcess" isExecutable="true">
System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key相同的情况下,版本升级,从1开始
System.out.println("资源名称(bpmn文件):"+pd.getResourceName());
System.out.println("资源图片名称(png文件):"+pd.getDiagramResourceName());
System.out.println("部署对象ID:"+pd.getDeploymentId());
System.out.println("************************************************************");
}
}
}
/**
* 删除流程定义(删除key相同的所有不同版本的流程定义)
*/
@Test
public voiddeleteProcessDefinitionByKey(){
//先使用流程定义的key查询所有版本的流程定义
List<ProcessDefinition> list = processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.createProcessDefinitionQuery()//创建流程定义查询对象
/**where条件*/
.processDefinitionKey("helloworld")//按照流程定义的key查询
/**返回结果集*/
.list();//返回多个结果集
//遍历list集合
if(list!=null && list.size()>0){
for(ProcessDefinition pd:list){
String deploymentId = pd.getDeploymentId();
processEngine.getRepositoryService()//与部署对象和流程定义相关的Service
.deleteDeployment(deploymentId,true);//使用部署对象ID,删除部署对象
System.out.println("删除成功,部署对象ID是:"+deploymentId);
}
}
}
}
标签:
原文地址:http://blog.csdn.net/langren19871026/article/details/45167789