JBPM(二)---JBPM工作流基本操作

本文介绍了JBPM工作流的基本操作,包括流程定义的管理、部署、查询与删除。详细阐述了如何通过gpd插件绘制流程图,使用RepositoryService进行流程定义的发布,并解析了流程定义发布对数据表的影响。同时,讲解了流程实例的启动、流转、终止以及任务操作,特别是任务的办理和流程变量的读写。最后,展示了不同类型流程变量的支持和如何保存复杂对象。
摘要由CSDN通过智能技术生成

流程定义的管理:
将定义业务流程,部署到 jbpm框架中 (流程定义 jpdl.xml 描述文件)
通过gpd 插件 先根据业务流程,绘制流程图 (holiday.jpdl.xml 和 holiday.png )

流程定义部署 :
先获得 ProcessEngine 对象,再获得对应 Service (六个Service)

ExecutionService    getExecutionService() // 流程实例管理 

 HistoryService     getHistoryService() // 历史记录管理

IdentityService     getIdentityService() // 用户认证管理

ManagementService    getManagementService() // 任务调度 

RepositoryService    getRepositoryService() // 流程定义管理

TaskService          getTaskService()  // 任务关联 

操作流程定义,需要使用 RepositoryService
deployment 将需要发布到JBPM框架中流程文件,添加到对象中

		// 1、 先获得流程引擎 (JBPM编程核心)
		Configuration configuration = new Configuration();
		ProcessEngine processEngine = configuration.buildProcessEngine();//新建一个引擎
		
		// 2、通过引擎获得需要Service 
		RepositoryService repositoryService = processEngine.getRepositoryService();
		
		// 3、发布流程定义
		NewDeployment deployment = repositoryService.createDeployment();
		deployment.addResourceFromClasspath("holiday.jpdl.xml");
		deployment.addResourceFromClasspath("holiday.png");
		deployment.deploy();

流程定义发布,影响的数据表分析
JBPM的数据记录采用流水号 id ,在 jbpm4_property 表中用来保存下次操作的开始id, Value 初始化值是1, 每进行过一轮数据库操作,记录+10000

jbpm4_deployment 流程定义发布表,每发布一个流程,在该表插入1条记录 ,DBID 就是流水号

jbpm4_lob 存放大数据(二进制) 存放发布流程定义文件

jbpm4_deployprop 流程定义属性表 ,每发布一个流程,将流程属性信息保存到该表

langid 是jpdl语言规范版本号、pdid 流程定义唯一标识、pdkey 流程定义关键字、pdversion 流程定义版本号
在绘制流程定义时,name值就是默认的key值 ,version每次发布相同key ,version自动+1

发布流程定义,在实际开发中,都是通过 zip压缩包发布

		//发布流程定义
		NewDeployment deployment = repositoryService.createDeployment();
		deployment.addResourcesFromZipInputStream(new ZipInputStream(new FileInputStream("holiday.zip")));
		deployment.deploy();

流程定义查询 :
通过 ProcessDefinitionQuery查询流程定义信息

ProcessDefinitionQuery processDefinitionQuery 
= repositoryService.createProcessDefinitionQuery();

对 ProcessDefinitionQuery 添加查询条件

processDefinitionId(processDefinitionId)
processDefinitionKey(key)
processDefinitionName(name)
processDefinitionNameLike(name)
page(firstResult, maxResults)
orderAsc(property)
orderDesc(property)

通过 指定属性查询,可以进行排序和分页 查询

List<ProcessDefinition> list = processDefinitionQuery
.orderDesc(ProcessDefinitionQuery.PROPERTY_VERSION)
.page(0, 2).list();

根据发布编号 和 资源名称可以获得 该流程相关资源

		// 查询流程图
		// deploymentId 来自 jbpm4_deployment表 DBID
		// ResourceName 来自 jbpm4_lob 表 NAME
		InputStream in = repositoryService.getResourceAsStream("1", "holiday/holiday.png");
		OutputStream out = new FileOutputStream("c:/test.png");
		int b ;
		while((b=in.read())!=-1){
			out.write(b);
		}
		in.close();
		out.close();

流程定义的删除 :

把流程 彻底从JBPM 框架中删除了
RepositoryService 提供两个方法 用来删除 流程定义
可以通过流程定义发布id删除流程定义
方式一:如果有关联流程实例信息则报错
repositoryService.deleteDeployment(deploymentId);
方式二:删除流程定义,并删除关联流程实例
repositoryService.deleteDeploymentCascade(deploymentId);
Cascade 级联的含义, 删除流程定义时,管理流程实例信息 也会被一起删除,执行删除后,关联 lob表和 prop表数据也都删除了, 关联流程实例信息也会被删除
可以通过流程定义的key来删除
如果没有指定key属性,那么流程的名称就是key

// 先根据key 进行查询,在执行删除
	ProcessDefinitionQuery processDefinitionQuery = 
				repositoryService.createProcessDefinitionQuery();
	List<ProcessDefinition> list = 
processDefinitionQuery.processDefinitionKey("holiday").list();
	for (ProcessDefinition processDefinition : list) {			
		repositoryService.deleteDeploymentCascade(processDefinition.getDeploymentId());
	}

流程定义没有修改功能,可以发布一个新流程,版本自动+1

代码示例:

package com.my.jbpm;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Output
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值