Activiti 工作流 5.19.0 教程(3)

1-流程部署

package com.activiti.process.Ⅱ;

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.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;

/**
 * 流程定义CRUD
 */
public class ActivitiProcessCRUD {
	
	
	/**
	 * 部署流程定义 通过classpath       (一)
	 * */
	@Test
	public void deploymentProcessDefinition_Classpath(){
		
		//获取流程引擎
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		//获取流程部署定义相关的Service
		RepositoryService repositoryService = processEngine.getRepositoryService();
		//创建一个部署对象
		DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
		//创建部署名称
		deploymentBuilder.name("请假流程入门");
		//添加流程资源
		deploymentBuilder.addClasspathResource("diagrams/helloworld.bpmn");
		deploymentBuilder.addClasspathResource("diagrams/helloworld.png");
		//完成部署
		Deployment deployment = deploymentBuilder.deploy();
		
		System.out.println("部署ID : "+deployment.getId());
		System.out.println("部署名称:"+deployment.getName());
	}
	/**
	 * 部署流程定义 通过zip      (二)
	 * */
	@Test
	public void deploymentProcessDefinition_zip(){
		
		//创建一个zip输入流
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");
		//创建一个zip输入流
		ZipInputStream zipInputStream = new ZipInputStream(in);
		//与流程定义和部署对象相关的Service
		Deployment deployment = ProcessEngines.getDefaultProcessEngine().getRepositoryService()
														.createDeployment()//创建一个部署对象
														.name("流程定义")//添加部署的名称
														.addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
														.deploy();//完成部署
		
		System.out.println("部署ID : "+deployment.getId());
		System.out.println("部署名称:"+deployment.getName());
	}
	
	/**
	 * 部署流程定义(从InputStream)  (三)
	 * */
	@Test
	public void deploymentProcessDefinition_inputStream(){
		InputStream inputStreambpmn = this.getClass().getResourceAsStream("/diagrams/processVariables.bpmn");
		InputStream inputStreampng = this.getClass().getResourceAsStream("/diagrams/processVariables.png");
		Deployment deployment = ProcessEngines.getDefaultProcessEngine().getRepositoryService()//与流程定义和部署对象相关的Service
						.createDeployment()//创建一个部署对象
						.name("流程定义")//添加部署的名称
						.addInputStream("processVariables.bpmn", inputStreambpmn)//使用资源文件的名称(要求:与资源文件的名称要一致),和输入流完成部署
						.addInputStream("processVariables.png", inputStreampng)//使用资源文件的名称(要求:与资源文件的名称要一致),和输入流完成部署
						.deploy();//完成部署
		System.out.println("部署ID:"+deployment.getId());//
		System.out.println("部署名称:"+deployment.getName());//
	}
	/**
	 * 查询流程定义
	 * */
	@Test
	public void findProcessDefinition(){
		
		//与流程定义和部署对象相关的Service
		RepositoryService repositoryService = ProcessEngines.getDefaultProcessEngine().getRepositoryService();
		//创建流程查询
		ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
		//查询流程集合
		List<ProcessDefinition> list = processDefinitionQuery.list();

		if(list!=null && list.size()>0){
			for(ProcessDefinition pd:list){
				System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
				System.out.println("流程定义的名称:"+pd.getName());//对应helloworld.bpmn文件中的name属性值
				System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
				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("#########################################################");
			}
		}			
		
						/**指定查询条件,where条件*/
//						processDefinitionQuery.deploymentId(deploymentId)//使用部署对象ID查询
//						.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//						.processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
//						.processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询
						
						/**排序*/
//						.orderByProcessDefinitionVersion().asc()//按照版本的升序排列
//						.orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列
						
						/**返回的结果集*/
//						.list();//返回一个集合列表,封装流程定义
//						.singleResult();//返回惟一结果集
//						.count();//返回结果集数量
//						.listPage(firstResult, maxResults);//分页查询
	}
	
	
	
	/**
	 * 删除流程定义
	 * */
	@Test
	public void deleteProcessDefinition(){
		//使用部署ID,完成删除
		String deploymentId = "1";
		
		RepositoryService repositoryService = ProcessEngines.getDefaultProcessEngine().getRepositoryService();
		/**
		 * 不带级联的删除
		 *    只能删除没有启动的流程,如果流程启动,就会抛出异常
		 */
		repositoryService.deleteDeployment(deploymentId);
		
		/**
		 * 级联删除
		 * 	  不管流程是否启动,都能可以删除
		 */
		repositoryService.deleteDeployment(deploymentId, true);
		
		
		System.out.println("删除成功!");
	}
	
	/***附加功能:查询最新版本的流程定义*/
	@Test
	public void findLastVersionProcessDefinition(){
		
		//与流程定义和部署对象相关的Service
		RepositoryService repositoryService = ProcessEngines.getDefaultProcessEngine().getRepositoryService();
		//创建流程查询
		ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
		
		//使用流程定义的版本升序排列
		List<ProcessDefinition> list = processDefinitionQuery.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 pd:list){
				map.put(pd.getKey(), pd);
			}
		}
		
		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());//对应helloworld.bpmn文件中的name属性值
				System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
				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 void deleteProcessDefinitionByKey(){
		
		//流程引擎
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		
		//流程定义的key
		String processDefinitionKey = "helloworld";
		//先使用流程定义的key查询流程定义,查询出所有的版本
		List<ProcessDefinition> list = processEngine.getRepositoryService()//
											.createProcessDefinitionQuery()//
											.processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
											.list();
		//遍历,获取每个流程定义的部署ID
		if(list!=null && list.size()>0){
			for(ProcessDefinition pd:list){
				//获取部署ID
				String deploymentId = pd.getDeploymentId();
				processEngine.getRepositoryService()//
							.deleteDeployment(deploymentId, true);
			}
		}
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值