深入了解Activiti工作流流程定义
深入了解Activiti工作流流程定义
2016-03-27| 发布: | 浏览: 2363 |保存PDF
部署流程定义
部署流程定义加载资源文件有两种方式
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
@Test public void testDeploy() { /** * RepositoryService是Activiti的仓库服务类,流程定义和部署对象相关的Service * 所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片 */ RepositoryService repositoryService = processEngine.getRepositoryService(); // 创建一个部署对象DeploymentBuilder,用来定义流程部署的相关参数 DeploymentBuilder deploymentBuilder = repositoryService.createDeployment(); // 添加部署的名称 deploymentBuilder.name( "流程定义" ); // 第一种方式:添加hello.bpmn和hello.png // deploymentBuilder.addClasspathResource("diagrams/hello.bpmn"); // deploymentBuilder.addClasspathResource("diagrams/hello.png"); // // 第二种方式:通用zip文件 InputStream in = this .getClass().getClassLoader().getResourceAsStream( "diagrams/hello.zip" ); ZipInputStream zipInputStream = new ZipInputStream(in); deploymentBuilder.addZipInputStream(zipInputStream); // 部署流程定义 Deployment deployment = deploymentBuilder.deploy(); System.out.println( "部署ID:" + deployment.getId()); // 1 System.out.println( "部署名称:" + deployment.getName()); // activiti入门程序 } |
部署流程定义操作的数据表
查看流程定义
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/** 查询流程定义 */ @Test public void processDefinitionQueryTest() { RepositoryService service = processEngine.getRepositoryService(); /** * 创建一个流程定义的查询 * .list();返回一个集合 .singleResult();//返回惟一结果集 * .count();//返回结果集数量 * .listPage(firstResult, maxResults);//分页查询 */ ProcessDefinitionQuery pdq = service.createProcessDefinitionQuery(); // pdq.deploymentId(deploymentId)//使用部署对象ID查询 // pdq.processDefinitionId(processDefinitionId)//使用流程定义ID查询 // pdq.processDefinitionKey(processDefinitionKey)//使用流程定义的key查询 // pdq.processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询 pdq.orderByProcessDefinitionVersion().asc(); // 按照版本的升序排列 // pdq.orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列 List<ProcessDefinition> list = pdq.list(); if (list != null && list.size() > 0 ) { for (ProcessDefinition pd : list) { // 流程定义的key+版本+随机生成数 System.out.println( "流程定义ID:" + pd.getId()); // 对应hello.bpmn文件中的name属性值 System.out.println( "流程定义的名称:" + pd.getName()); // 对应hello.bpmn文件中的id属性值 System.out.println( "流程定义的key:" + pd.getKey()); // 当流程定义的key值相同的相同下,版本升级,默认1 System.out.println( "流程定义的版本:" + pd.getVersion()); System.out.println( "资源名称bpmn文件:" + pd.getResourceName()); System.out.println( "资源名称png文件:" + pd.getDiagramResourceName()); System.out.println( "部署对象ID:" + pd.getDeploymentId()); System.out.println( "############################" ); } } } |
删除流程定义
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/** 删除流程定义 */ @Test public void deleteProcessDefinition() { // 使用部署ID,完成删除 String deploymentId = "15001" ; //不带级联的删除 只能删除没有启动的流程,如果流程启动,就会抛出异常 // processEngine.getRepositoryService().deleteDeployment(deploymentId); /** * 级联删除 不管流程是否启动,都能可以删除 */ processEngine.getRepositoryService().deleteDeployment(deploymentId, true ); System.out.println( "删除成功!" ); } |
获取流程定义文档的资源(查看流程图附件)
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/** 查看流程图 */ @Test public void viewPic() throws IOException { RepositoryService service = processEngine.getRepositoryService(); /** 将生成图片放到文件夹下 */ String deploymentId = "1" ; // 获取图片资源名称 List<String> list = service.getDeploymentResourceNames(deploymentId); // 定义图片资源的名称 String resourceName = "" ; if (list != null && list.size() > 0 ) { for (String name : list) { if (name.indexOf( ".png" ) >= 0 ) { resourceName = name; } } } // 获取图片的输入流 InputStream in = service.getResourceAsStream(deploymentId, resourceName); // 将图片生成到D盘的目录下 File file = new File( "D:/" + resourceName); // 将输入流的图片写到D盘下 FileUtils.copyInputStreamToFile(in, file); } |
查询最新版本的流程定义
2、创建LinkedHashMap<String, ProcessDefinition>,对相同key的进行覆盖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/***查询最新版本的流程定义*/ @Test public void findLastVersionProcessDefinition() { List<ProcessDefinition> list = processEngine.getRepositoryService() .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()); System.out.println( "流程定义的名称:" + pd.getName()); System.out.println( "流程定义的key:" + pd.getKey()); System.out.println( "流程定义的版本:" + pd.getVersion()); System.out.println( "资源名称bpmn文件:" + pd.getResourceName()); System.out.println( "资源名称png文件:" + pd.getDiagramResourceName()); System.out.println( "部署对象ID:" + pd.getDeploymentId()); System.out.println( "#########################################" ); } } } |
删除key相同的所有不同版本的流程定义
思路:把所有相同key的流程定义查出来,然后遍历删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/**删除流程定义(删除key相同的所有不同版本的流程定义)*/ @Test public void deleteProcessDefinitionByKey() { // 流程定义的key String processDefinitionKey = "hello" ; // 先使用流程定义的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 ); } } } |
深入了解Activiti工作流流程定义的更多相关文章
- 六、activiti工作流-流程定义查询
本节主要讲流程定义查询.查询某个流程设计图片并保存到本地中.查询最新版本的流程定义集合.删除所有key相同的定义 先创建一个java类 package com.java.procdef; import ...
- activiti部署流程定义时出错:INSERT INTO ACT_GE_BYTEARRAY,修改数据库编码
activiti部署流程定义时出错 // 部署流程定义 Deployment deployment = deploymentBuilder.deploy(); 错误信息:(有乱码的...没留下截图.. ...
- Activiti工作流的定义部署和执行
工作流引擎 个人觉得直接理解工作流引擎概念有点难度,我们可以先通过了解工作流引擎的职责再反过来理解工作流引擎,工作流引擎一般都做两件事情: 1.定义流程,也就是给我们提供某种规范来定义规则,以 ...
- Activiti 删除流程定义
package com.mycom.processDefinition; import java.io.InputStream; import java.util.List; import java. ...
- Activiti 查询流程定义
package com.mycom.processDefinition; import java.io.InputStream; import java.util.List; import java. ...
- Activiti 部署流程定义及相关的表(classpath部署、zip部署)
package com.mycom.processDefinition; import org.activiti.engine.ProcessEngine; import org.activiti.e ...
- 多数据库下activiti的流程定义缓存问题
我们使用activiti(5.14版本号)作为流程引擎,今天在产品中发现一个问题,某流程的审批记录中, 活动实例表中记录的活动名称(ACT_HI_ACTINST表的ACT_NAME)居然是该流程中不存 ...
- activiti--5 -----------------Activiti 工作流 流程各个步骤所涉及到的表
ACT_RE_*: 'RE'表示repository. 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等). ACT_RU_*: 'RU'表示runtime. 这些运行时的表,包含流程实例 ...
- (四)Activiti之流程定义部署之ZIP方式和流程定义查询
一.流程定义部署之ZIP方式 上一章节我们使用classpath的方式加载流程定义文件,这里我们使用ZIP的方式. 1.1 用activiti插件生成bpmn和png图片之后,压缩到一个zip格式的压 ...
随机推荐
- FASTREPORT COM/ActiveX报表如何保存到C++项目中?
可以的. VC++ : ... IStream * pStream;CreateStreamOnHGlobal(NULL, true, &pStream);pStream->AddRef ...
- 【BZOJ】3282: Tree(lct)
http://www.lydsy.com/JudgeOnline/problem.php?id=3282 复习了下lct,发现两个问题.. 1:一开始我以为splay那里直接全部rot(x)就好了,然 ...
- Java EE之Hibernate异常总结【3】Disabling contextual LOB creation as createClob() method threw error java.lang.reflect.InvocationTargetException
参考文献:https://stackoverflow.com/questions/4588755/disabling-contextual-lob-creation-as-createclob-met ...
- Spring源码学习资料
未完待续.. github地址 https://github.com/spring-projects 学习地址 https://github.com/code4craft/tiny-spring 推荐 ...
- Python 入门基础18 --re模块+内存管理
今日内容: 1.垃圾回收机制 2.re模块 一.垃圾回收机制 在计算机中,不能被程序访问到的数,称之为垃圾 1.1 引用计数 引用计数用来记录值的内存地址被记录的次数 每引用一次就对标记 +1 操作 ...
- Activity生命周期详解
http://blog.csdn.net/liuhe688/article/details/6733407 onPause 回到 onResume 的过程“在一般的开发中用不上”,但是作为开发者还是有 ...
- oracle 行号和分页
1.行号是个伪列,rownum 永远按照默认的顺序生成 2.rownum 只能使用< <= 不能使用> >=(原因是oracle数据库是行式数据库,像盖楼一样,没有第一层就排 ...
- Docker镜像原理
⒈是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量以及配置文件等. 引用 UnionFs( ...
- 使用matplotlib绘制多个图形单独显示
使用matplotlib绘制多个图形单独显示 一 代码 import numpy as np import matplotlib.pyplot as plt #创建自变量数组 x= np.linspa ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...