Deployment 部署对象
1.一次部署的多个文件信息,对于不需要的流程可以删除和修改
2.对应的表
act_re_deployment #部署对象表
act_re_procdef #流程定义表
act_ge_bytearray #资源文件表
act_ge_property # 主键生成策略表
ProcessDefinition 流程定义
1.解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的
2.相关的表:
#部署对象和流程定义相关的表
select * from act_re_deployment #部署对象表
select * from act_re_procdef #流程定义表
select * from act_ge_bytearray #资源文件表
select * from act_ge_property # 主键生成策略表
相关的流程定义测试代码
package com.xingshang.processDefinition; import java.io.File; import java.io.IOException; 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(); /** * 部署流程定义(从classpath) */ @Test public void deploymentProcessDefinition_classpath(){ Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service .createDeployment()//创建一个部署对象 .name("流程定义")//添加部署的名称 .addClasspathResource("diagrams/HelloWorld.bpmn")//从classpath下的资源中加载,一次只能加载一个文件 .addClasspathResource("diagrams/HelloWorld.png") .deploy();//完成部署 System.out.println("部署ID: " + deployment.getId());//301 System.out.println("部署名称: " + deployment.getName());//流程定义 } /** * 部署流程定义(从zip) */ @Test public void deploymentProcessDefinition_zip(){ InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/HelloWorld.zip"); ZipInputStream zipInputStream = new ZipInputStream(in); Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service .createDeployment()//创建一个部署对象 .name("流程定义")//添加部署的名称 .addZipInputStream(zipInputStream)//从指定zip格式的文件完成部署 .deploy();//完成部署 System.out.println("部署ID: " + deployment.getId());//301 System.out.println("部署名称: " + deployment.getName());//流程定义 } /** * 查询流程定义 */ @Test public void findProcessDefinition(){ List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署相关的service .createProcessDefinitionQuery()//创建一个流程定义的查询 /**指定查询条件,where条件*/ // .deploymentId(deploymentId) //使用部署对象ID查询 // .processDefinitionId(processDefinitionId) //使用流程定义ID查询 // .processDefinitionKey(processDefinitionKey) //使用流程定义的Key查询 // .processDefinitionNameLike(processDefinitionNameLike) //使用流程定义的名称模糊查询 /**排序*/ .orderByProcessDefinitionVersion().asc() //按照版本的升序排列 // .orderByProcessDefinitionName().desc() //按照流程定义的名称降序排列 /**返回的结果集*/ .list(); //返回一个集合列表,封装流程定义 // .singleResult(); //返回唯一结果集 // .count(); //返回结果集数量 // .listPage(firstResult,maxResults ); //分页查询 if(list != null && list.size() > 0){ for(ProcessDefinition pd : list){ System.out.println("流程定义ID: " + pd.getId()); // helloworld:3:404 流程定义的key + 版本 + 随机生成数 System.out.println("流程定义的名称: " + pd.getName()); //helloworldProcess 对应HelloWorld.bpmn文件中的name属性值 System.out.println("流程定义的key: " + pd.getKey()); //helloworld 对应HelloWorld.bpmn文件中的id属性值 System.out.println("流程定义的版本: " + pd.getVersion()); //当流程定义的key值相同的情况下,版本升级,默认1 System.out.println("资源名称bpmn文件: " + pd.getResourceName()); //HelloWorld.bpmn System.out.println("资源名称png文件: " + pd.getDiagramResourceName()); //HelloWorld.png System.out.println("部署对象ID: " + pd.getDeploymentId()); // System.out.println("-------------------------------------------"); } } } /** * 删除流程定义 */ @Test public void deleteProcessDefinition(){ //使用部署ID,完成删除 String deploymentId = "301"; /** * 不带级联的删除, * 只能删除没有启动的流程,如果流程启动,就会抛出异常 */ // processEngine.getRepositoryService() // .deleteDeployment(deploymentId); /** * 级联删除, * 不管流程是否启动,都可以删除 */ processEngine.getRepositoryService() .deleteDeployment(deploymentId, true); System.out.println("删除成功!"); } /** * 查看流程图 * @throws IOException */ @Test public void viewPic() throws IOException{ /** * 将生成的图片放到文件夹下 */ String deploymentId = "401"; //获取图片资源名称 List<String> list = processEngine.getRepositoryService() .getDeploymentResourceNames(deploymentId); //定义图片资源的名称(.png文件) String resourceName = ""; if(list != null && list.size() > 0 ){ for(String name : list){ if(name.indexOf(".png") >= 0){ //indexOf() 方法返回某个指定的字符串值在字符串中首次出现的位置(从左向右)。没有匹配的则返回-1,否则返回首次出现位置的字符串的下标值。 resourceName = name; } } } //获取图片的输入流 InputStream in = processEngine.getRepositoryService() .getResourceAsStream(deploymentId, resourceName); //将图片生成到D盘的目录下 File file = new File("D:/" + resourceName); //将输入流的图片写到D盘下 FileUtils.copyInputStreamToFile(in, file); } /** * 附加功能:查询最新版本的流程定义 */ @Test public void findLastVersionProcessDefinition(){ List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署相关的service .createProcessDefinitionQuery()//创建一个流程定义的查询 .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()); //HelloWorld.bpmn System.out.println("资源名称png文件: " + pd.getDiagramResourceName()); //HelloWorld.png System.out.println("部署对象ID: " + pd.getDeploymentId()); // System.out.println("-------------------------------------------"); } } } /** * 删除流程定义(删除key相同的所有不同版本的流程定义) */ @Test public void deleteProcessDefinitionByKey(){ //流程定义的key String processDefinitionKey = "helloworld"; //想使用流程定义的key查询流程定义,查询出所有的版本 List<ProcessDefinition> list = processEngine.getRepositoryService() .createProcessDefinitionQuery() .processDefinitionKey(processDefinitionKey) .list(); //遍历,获取每个流程定义的部署ID if(list != null && list.size() > 0 ){ for(ProcessDefinition pd : list){ //获取部署ID String deploymentId = pd.getDeploymentId(); processEngine.getRepositoryService() .deleteDeployment(deploymentId, true); } } } }
1.1.