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());//
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());//
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.

activiti基础--2----------------------(流程定义)的更多相关文章

  1. (五)Activiti之获取流程定义图片和流程定义删除

    一.获取流程定义图片 /** * 通过流程部署ID获取流程图图片 */ @Test public void getImageById()throws Exception{ InputStream in ...

  2. Activiti 部署流程定义及相关的表(classpath部署、zip部署)

    package com.mycom.processDefinition; import org.activiti.engine.ProcessEngine; import org.activiti.e ...

  3. 工作流学习——Activiti流程定义管理三步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46602419 ***************************************** ...

  4. 多数据库下activiti的流程定义缓存问题

    我们使用activiti(5.14版本号)作为流程引擎,今天在产品中发现一个问题,某流程的审批记录中, 活动实例表中记录的活动名称(ACT_HI_ACTINST表的ACT_NAME)居然是该流程中不存 ...

  5. Activiti流程定义部署、删除

    1.部署流程定义 部署流程定义也可以认为是增加流程定义.  首先创建流程引擎对象(公用的方法)   private ProcessEngine processEngine = ProcessEngin ...

  6. activiti基础--1------------------------生成.bpmn和.png以及部署流程定义

    helloworld.dbmn <?xml version="1.0" encoding="UTF-8"?> <definitions xml ...

  7. Activiti工作流学习(一)部署对象和流程定义

    一.前言 前一段时间在工作中,使用了流程审批,对api的调用非常不熟悉,都是调用别人写好的接口在界面上进行显示,基本了解了流程审批的主要步骤,现对流程审批进行学习,主要是调用api进行CRUD操作,感 ...

  8. Activiti 删除key值相同的所有不同版本的流程定义

    package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...

  9. Activiti 查询最新版本的流程定义

    package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...

随机推荐

  1. ReadWriteLock 读写锁(读书笔记)

     读写分离锁可以有效的帮助减少锁的竞争,提升系统的效率, 读-读不互斥 读读之间不阻塞 读-写互斥 读阻塞写,写也会阻塞读 写-写互斥 写写阻塞 在系统中,读操作次数远远大于写操作,则读写锁就可以发挥 ...

  2. MySQL 事件EVENT

    一.用途用于某一时间执行一个事件或周期性执行一个事件. 二.语法CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] eve ...

  3. Odoo 后端数据库postgreSQL事务级别

    Table of Contents 事务的特性 并行事务的问题 事务隔离级别 Odoo事务隔离级别 odoo事务控制         事务的特性 事务4个特性,简写未ACID 原子性(Atomicit ...

  4. Burp Suite基本用法

    从上一篇已经知道Burp Suite安装.启动方法,本章将会阐述Burp Suite抓包.重放.爆破.双参数爆破.爬虫等基本用法.同博客园看到一篇描述Burp Suite界面各个字段和按钮作用,感兴趣 ...

  5. JAVA 自动生成对应数据库表的JPA代码工具

    http://blog.csdn.net/zheng2008hua/article/details/6274659 关键词:JPA 数据库表代码自动生成,JPA代码生成     自动生成对应数据库表的 ...

  6. 给UITextField设置头或尾空白

    有时候,我们需要在UITextField的头尾加入一些空白,如下图所示: 其中,黄色和红色部分代表空白. 实现起来,比较简单,只需要设置UITextField的leftView.leftViewMod ...

  7. .NET CORE 2.0小白笔记(四):asp.net core输出中文乱码的问题

    问题描述:在学习asp.net core的时候,尝试在控制台,或者页面上输出中文,会出现乱码的问题. 分析解决:控制台乱码的原因是因为中文windows命令行默认编码页是gb2312,想输出中文只要把 ...

  8. docker教程之从一头雾水到不一头雾水(2)

    书接上文:docker教程之从一头雾水到不一头雾水(1) 运行镜像 先查看下本地有哪些镜像 [root@ichz ~]# docker images REPOSITORY TAG IMAGE ID C ...

  9. Unity多个场景叠加或大场景处理方法小结

    本文章由cartzhang编写.转载请注明出处. 全部权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/47614153 作者:ca ...

  10. Debug与Trace工具类的应用

    在写Console程序的时候,能够使用Console.WriteLine()来时时的输出程序的执行状态和各种參数此刻的信息.可是假设是Windows Form程序,我们要怎样实时的观測程序的执行状况呢 ...