1、部署流程定义

  部署流程定义也可以认为是增加流程定义。

   首先创建流程引擎对象(公用的方法)

   private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 
  方法1:
  /**
* 1.发布流程
* 会在三张表中产生数据:
* act_ge_bytearray 产生两条数据
* act_re_deployment 产生一条数据
* act_re_procdef 产生一条数据
*/
public void deploy() throws Exception {
// 获取仓库服务
RepositoryService repositoryService = processEngine.getRepositoryService();
// 创建发布配置对象
DeploymentBuilder builder = repositoryService.createDeployment();
// 设置发布信息
builder
.name("请假流程")// 添加部署规则的显示别名
.addClasspathResource("diagrams/Leave2.bpmn")// 添加规则文件
.addClasspathResource("diagrams/Leave2.png");// 添加规则图片 不添加会自动产生一个图片不推荐
// 完成发布
builder.deploy();
}

  方法2:

 public void deployZIP() throws Exception {
// 获取仓库服务
RepositoryService repositoryService = processEngine.getRepositoryService();
// 创建发布配置对象
DeploymentBuilder builder = repositoryService.createDeployment();
// 获得上传文件的输入流程
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/diagrams.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
// 设置发布信息
builder
.name("请假流程")// 添加部署规则的显示别名
.addZipInputStream(zipInputStream );
// 完成发布
builder.deploy();
}

说明:

  1)     首先获得默认的流程引擎,在创建时会自动加载classpath下得activiti.cfg.xml

  2)     通过流程引擎获取了一个RepositoryService对象->仓库服务对象

  3)     由仓库的服务对象产生一个部署对象配置对象,用来封装部署环境的相关配置。

  4)     这是一个链式编程,在部署配置对象中设置显示名,上传规则文件相对classpath的地址。

  5)     部署,也是往数据库中存储流程定义的过程。

  6)     这一步在数据库中将操作三张表:

    a)     act_re_deployment

     存放流程定义的显示名和部署时间,每部署一次增加一条记录

    b)     act_re_procdef

     存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。

    c)     act_ge_bytearray

     存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。

2、删除流程

  删除部署到activiti中的流程定义。

 public void delDeployment() throws Exception {
// 获取仓库服务对象
RepositoryService repositoryService = processEngine.getRepositoryService();
// 删除发布信息
String deploymentId = "1";
// 普通删除,如果当前规则下有正在执行的流程,则抛异常
repositoryService.deleteDeployment(deploymentId);
// 级联删除,会删除和当前规则相关的所有信息,包括历史
repositoryService.deleteDeployment(deploymentId, true);
}

说明:

  1)     因为删除的是流程定义,而流程定义的部署是属于仓库服务的,所以应该先得到RepositoryService

  2)     如果该流程定义下没有正在运行的流程,则可以用普通删除。如果是有关联的信息,用级联删除。一般情况下用普通删除就可以。由于级联删除涉及的数据比较多,一般只开放给超级管理员使用。

3、查看流程定义

 /**
* 查看流程定义
* 流程定义 ProcessDefinition
* id : {key}:{version}:{随机值}
* name : 对应流程文件process节点的name属性
* key : 对应流程文件process节点的id属性
* version : 发布时自动生成的。如果是第一发布的流程,veresion默认从1开始;如果当前流程引擎中已存在相同key的流程,则找到当前key对应的最高版本号,在最高版本号上加1
*/public void queryProcessDefinition() throws Exception {
// 获取仓库服务对象
RepositoryService repositoryService = processEngine.getRepositoryService();
// 获取流程定义查询对象
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
// 配置查询对象
processDefinitionQuery
//添加过滤条件
// .processDefinitionName(processDefinitionName)
// .processDefinitionId(processDefinitionId)
// .processDefinitionKey(processDefinitionKey)
//分页条件
// .listPage(firstResult, maxResults)
//排序条件
.orderByProcessDefinitionVersion().desc();
/**
* 执行查询
* list : 执行后返回一个集合
* singelResult 执行后,首先检测结果长度是否为1,如果为一则返回第一条数据;如果不唯一,抛出异常
* count: 统计符合条件的结果数量
*/
List<ProcessDefinition> pds = processDefinitionQuery.list();
// 遍历集合,查看内容
for (ProcessDefinition pd : pds) {
System.out.print("id:" + pd.getId() +",");
System.out.print("name:" + pd.getName() +",");
System.out.print("key:" + pd.getKey() +",");
System.out.println("version:" + pd.getVersion());
}
}

说明:

  1)     因为流程定义的信息存放在仓库中,所以应该获取RepositoryService。

  2)     创建流程定义查询对象,可以在ProcessDefinitionQuery上设置查询过滤参数

  3)     调用ProcessDefinitionQuery对象的list方法,执行查询,获得符合条件的流程定义列表

  4)     由运行结果可以看出:

    a)     Key和Name的值为:bpmn文件process节点的id和name的属性值

    b)     key属性被用来区别不同的流程定义。

    c)     带有特定key的流程定义第一次部署时,version为1。之后每次部署都会在当前最高版本号上加1

    d)     Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个自动生成的唯一的数字

    e)     重复部署一次,deploymentId的值以一定的形式变化

    f)      流程定义(ProcessDefinition)在数据库中没有相应的表对应,只是从act_ge_bytearray表中取出相应的bpmn和png图片,并进行解析。

Activiti流程定义部署、删除的更多相关文章

  1. Activiti流程定义部署方式

    1 bpmn png方式部署 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定义(从cl ...

  2. (四)Activiti之流程定义部署之ZIP方式和流程定义查询

    一.流程定义部署之ZIP方式 上一章节我们使用classpath的方式加载流程定义文件,这里我们使用ZIP的方式. 1.1 用activiti插件生成bpmn和png图片之后,压缩到一个zip格式的压 ...

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

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

  4. Activiti Exploer工作流控制台使用指南!使用Activiti Explorer定义部署执行工作流

    Activiti Explorer简介 Activiti Explorer: Activiti控制台,是一个web应用程序 从Activiti的官方网站下载Activiti的压缩zip文件时,Acti ...

  5. Activiti 学习(二)—— Activiti 流程定义和部署

    概述 在这一节,我们将创建一个 Activit 工作流,并启动这个流程,主要包含以下几个步骤: 定义流程,按照 BPMN 的规范,使用流程定义工具,用流程符号把整个流程描述出来 部署流程,把画好的流程 ...

  6. Activiti流程定义语言

    1.流程(process) bpmn文件一个流程的根元素.一个流程就代表一个工作流. 2.顺序流(sequenceFlow) 顺序流是连接两个流程节点的连线,代表一个节点的出口.流程执行完一个节点后, ...

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

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

  8. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】

    上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]- 管理流程定义 管理流程定义主要涉及到以下的4张表: -- 流程部署相关的表 SEL ...

  9. 深入了解Activiti工作流流程定义

    深入了解Activiti工作流流程定义 2016-03-27| 发布: | 浏览: 2363 |保存PDF 部署流程定义 部署流程定义的流程: 1. 先获取流程引擎对象:在创建时会自动加载 class ...

随机推荐

  1. 随笔记录 linux命令 2019.7.29

    系统命令 一. type   查看命令是内部命令还是内部命令 help   帮助 man   在线帮助 cd      切换目录 pwd    查看所在路径 stat     查看文件详细信息 ls  ...

  2. BCZM : 1.4

    书店促销活动,某套书一共有五卷.假设每一卷单独销售均需8欧元,多买则有折扣,具体折扣如下:    2 5%    3 10%    4 20%    5 25%    设计算法,计算出读者购买一批书的 ...

  3. 传统的dom的渲染方式

    DOM渲染的过程大致分为三个阶段: 后端渲染 前端渲染 独立DOM渲染(前后端相结合渲染) 1.后端渲染:DOM树的生成完全是在后端服务器中完成的,后端服务器的程序会把需要的数据拼合成一个类似于前端D ...

  4. css---5 only-child or nth-of-type

    1  _nth-child系列 :nth-child(index) <!DOCTYPE html> <html lang="en"> <head> ...

  5. VMware的使用-永久激活码

    1.在软件管理中下载安装VMware  版本为14.0   试用期为30天 2.在网上找的永久破解码 VMware 2018 v14.x 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWE ...

  6. Batch pk Shell - WindowsBatch与LinuxShell比较 [变量符号和关键字]

    原文地址:WindowsBatch与LinuxShell比较[变量符号和关键字] 一 简单实例1)batch file @echo off rem output helloworld ::  outp ...

  7. 专访阿里云MVP黄胜蓝:90 后 CTO花了6年,改变了你日常生活里的这件事

    [黄胜蓝:现任武汉极意网络科技有限公司CTO.高中时期NOIP一等奖保送至武汉大学,大学期间曾指导团队获得世界数学建模大赛金奖,同时负责武汉大学学生校园门户网站的运维工作.于2013年加入武汉极意网络 ...

  8. Android_Gallery(画廊)

    转:http://blog.csdn.net/tianjf0514/article/details/7521398 Gallery是画廊的意思,可以实现图片的浏览功能. 主要内容 Gallery控件的 ...

  9. cordova开发笔记

    搜狐邮箱APP 使用了cordova框架,遇到了一些列问题,稍微总结记录下 扩展支持appInBrowser,用来以新窗口方式打开外链url 解决跨域问题(cordova默认当前域为localhost ...

  10. 第九篇:Spring的applicationContext.xml配置总结

    在前面的一篇日志中,记录了web.xml配置启动的顺序,web启动到监听器ContextLoaderListener时,开始加载spring的配置文件applicationContext.xml(通常 ...