JBPM工作流(四)——管理流程定义
概念:
ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程、报销流程、是一个规则。
ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程步骤的信息。没有更新操作,启动流程实例时是使用指定key的最新的版本。
1.部署流程定义
a)一次添加一个资源,相关文件在Classpath中
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// 1,部署流程定义(添加) // jbpm4_deployment // jbpm4_deployprop // jbpm4_lob @Test public void deploy_1() { String deploymentId = processEngine.getRepositoryService() // .createDeployment() //创建一个部署对象,Deployment:一次部署的信息,含有多个文件 .addResourceFromClasspath( "helloworld/test.jpdl.xml" ) //往Deployment对象添加资源 .addResourceFromClasspath( "helloworld/test.png" ) // .deploy(); //执行部署 System.out.println( "deploymentId = " + deploymentId); } |
b)一次添加多个资源,多个资源先打成zip包
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Test public void deploy_2() { // 找到zip文件 InputStream in = this .getClass().getClassLoader().getResourceAsStream( "helloworld/helloworld.zip" ); ZipInputStream zipInputStream = new ZipInputStream(in); // 部署 String deploymentId = processEngine.getRepositoryService() // .createDeployment() // .addResourcesFromZipInputStream(zipInputStream) // .deploy(); System.out.println( "deploymentId = " + deploymentId); } |
c)说明
1, addResourceFromClasspath(resource); 可以调用多次以添加多个文件。文件重复添加也不会报错。
2, addResourceFromInputStream(resourceName, inputStream)添加一个文件(使用InputStream)
3, addResourcesFromZipInputStream(zipInputStream)添加多个文件,里面也可以有文件夹。
4, 以上方法可以在一起调用。
2.查询所有流程定义
a) 查询所有流程定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@Test public void findAll() { // 查询 List<ProcessDefinition> list = processEngine.getRepositoryService() // .createProcessDefinitionQuery() // .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY) //排序条件 //.count()查询出总数量 //.page(0, 100)分页,取出前100条记录 .list(); // 显示 for (ProcessDefinition pd : list) { System.out.println( "id=" + pd.getId() // 格式为:{key}-{version} + ", name=" + pd.getName() // 流程定义文件(.jpdl.xml)中根元素的name属性的值 + ", key=" + pd.getKey() // 流程定义文件(.jpdl.xml)中根元素的key属性的值,可以不写,不写就是name属性的值 + ", version=" + pd.getVersion() // 流程定义文件(.jpdl.xml)中根元素的version属性的值,可以不写,不写就会自增(key相同时,版本加1) + ", deploymentId=" + pd.getDeploymentId()); // 本流程定义对应的 .jpdl.xml 文件所属的Deployment对象的id } } |
b) 查询所有最新版本的流程定义
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
|
@Test public void findAllLatestVersions() { // 1,查询所有流程定义,按Version升序排列,这样所有最大的版本就都排到最后了 List<ProcessDefinition> allList = processEngine.getRepositoryService() // .createProcessDefinitionQuery() // .orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION) // // .processDefinitionName("test")// // .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY)// // .orderDesc(ProcessDefinitionQuery.PROPERTY_KEY)// // .uniqueResult() // .count() // .page(firstResult, maxResults) .list(); // 2,过滤出所需的最新版本的流程定义 Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>(); for (ProcessDefinition pd : allList) { map.put(pd.getKey(), pd); //不同的key会保存最新的版本(上面已经按版本升序排列) } // 显示 for (ProcessDefinition pd : map.values()) { System.out.println( "id=" + pd.getId() // 格式为:{key}-{version} + ", name=" + pd.getName() // 流程定义文件(.jpdl.xml)中根元素的name属性的值 + ", key=" + pd.getKey() // 流程定义文件(.jpdl.xml)中根元素的key属性的值,可以不写,不写就是name属性的值 + ", version=" + pd.getVersion() // 流程定义文件(.jpdl.xml)中根元素的version属性的值,可以不写,不写就会自增(key相同时,版本加1) + ", deploymentId=" + pd.getDeploymentId()); // 本流程定义对应的 .jpdl.xml 文件所属的Deployment对象的id } } |
3.删除流程定义(其实是删除Deployment)
void deleteDeployment(java.lang.String deploymentId):删除一个部署如果过程定义没有运行执行。历史信息(如果有的话)是在数据库中。
void deleteDeploymentCascade(java.lang.String deploymentId):删除部署,包含过程定义,相关流程实例和他们的历史信息
a) 删除某个Deployment
1
2
3
4
5
6
7
8
|
@Test public void deleteById() { String deploymentId = "1" ; // // 删除某Deployment,如果有关联的执行信息,就抛异常 // processEngine.getRepositoryService().deleteDeployment(deploymentId); // 删除某Deployment,如果有关联的执行信息,就级联删除 processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId); } |
b) 删除指定key的所有版本的流程定义
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Test public void deleteByKey() { // 1,查询出指定key的所有版本的流程定义 List<ProcessDefinition> list = processEngine.getRepositoryService() // .createProcessDefinitionQuery() // .processDefinitionKey( "helloworld" ) // .list(); // 2,循环删除 for (ProcessDefinition pd : list) { processEngine.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId()); } } |
4.获取部署时的某文件的资源(查看流程图)
a) 查看流程图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@Test public void getResourceFromDeployment() throws Exception { String deploymentId = "50001" ; String resourceName = "helloworld/test.png" ; // 指定的是 jbpm4_lob 表中的name_列的值 // 获取某Deployment中所有文件资源的名称 Set<String> names = processEngine.getRepositoryService().getResourceNames(deploymentId); for (String name : names) { System.out.println(name); } // 获取某Deployment中指定名称的资源 InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName); // 保存到"c:/"中 OutputStream out = new FileOutputStream( "c:/process.png" ); for ( int b = - 1 ; (b = in.read()) != - 1 ;) { out.write(b); } in.close(); out.close(); } |
5.获取流程图中某活动的坐标(不重要)
1
2
3
4
5
6
7
|
String processDefinitionId = "test-1" ; // 流程定义的id String activityName = "start1" ; // 活动的名称 ActivityCoordinates c = processEngine.getRepositoryService().getActivityCoordinates(processDefinitionId, activityName); System.out.println( "x=" + c.getX() + ",y=" + c.getY() + ",width=" + c.getWidth() + ",height=" + c.getHeight()); |
JBPM工作流(四)——管理流程定义的更多相关文章
- Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】
上篇Activiti只是一个快速入门案例,这篇就讲定义.部署.查看任务等等的一些细节[涉及到的数据库表.对象等等]- 管理流程定义 管理流程定义主要涉及到以下的4张表: -- 流程部署相关的表 SEL ...
- JBPM4.4_管理流程定义
1. 管理流程定义 没有更新功能 1.1. 部署流程定义 注意区分Deployment与ProcessDefinition 1.1.1. 示例代码1:流程定义有关文件在classpath中 Strin ...
- 工作流学习——Activiti流程定义管理三步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46602419 ***************************************** ...
- JBPM学习(三):管理流程定义
概念: ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程.报销流程.是一个规则. ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程 ...
- jBPM学习之部署流程定义
也许部署流程定义的方法有很多,这里选用的是用Java代码调用工作流引擎提供的部署服务API.在这之前,假设你的Eclipse已经安装好了GPD工作流画图工具,并且学会了画出最简单的HelloWorld ...
- JBPM表达业务流程(流程定义语言)
业务流程包括三部分: 活动 Activity / 节点 Node (有很多种,不同的类型有不同的功能,必须要有一个Start Activity) 连线 Transition / 转移 (从一个Acti ...
- 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】
OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...
- WF工作流与管理类应用系统工作流需求实现的一些误区
如今实现各种应用系统大家都知道工作流是一个非常重要的环节,不同的业务系统的工作流需求是需要找相应的工作流产品去实现的,因为不同工作流产品的架构细节也许会成为某类需求实现的瓶颈. WF ...
- JBPM工作流(三)——ProcessEngine与Service API
1.获取processEngine的方法: a) 方法一 private ProcessEngine processEngine = new Configuration().setResource(& ...
随机推荐
- springboot邮件发送与接收读取
发送邮件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- Oralce sql (+) 补充
Oracle 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 外连接(Outer Join) oute ...
- Node.js文件编码格式的转换
项目很多 lua 文件不是 utf-8格式,使用 EditPlus 查看的时候,显示为ASCII.还有的是带BOM的,带BOM倒好处理,之前写过,有一定规律. ASCII编码就比较蛋疼,通过搜索网上资 ...
- Maven中classifier
1.classifier概述 classifier通常用于区分从同一POM构建的具有不同内容的构件(artifact).它是可选的,它可以是任意的字符串,附加在版本号之后. 2.使用场景 场景一:区分 ...
- 终端下将 man 命令的结果输出到文件保存
终端下将 man 命令的结果输出到文件保存 在linux或mac下,当我们使用man命令查看某一个命令的详细帮助说明信息时: 可能终端的显示效果不是那么方便: 那么我们可以将man命令的结果输出到tx ...
- failed to create process怎么解决
python 在cmd时,报错:failed to create process怎么解决 在cmd命令前加 : python -m 命令(如:python -m conda update conda)
- R语言中的回归诊断-- car包
如何判断我们的线性回归模型是正确的? 1.回归诊断的基本方法opar<-par(no.readOnly=TRUE) fit <- lm(weight ~ height, data = wo ...
- MySQL 5.5主从关于‘复制过滤’的深入探究
关于MySQL主从复制的过滤,例如通过binlog-ignore-db.replicate-do-db.replicate-wild-do-table等.如果不好好研究过这些过滤选项就用的话,是有可能 ...
- 15.翻译系列:EF 6中的级联删除【EF 6 Code-First 系列】
原文链接:https://www.entityframeworktutorial.net/code-first/cascade-delete-in-code-first.aspx EF 6 Code- ...
- Python中_,__,__xx__的区别
_xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. #! /usr ...