操作数据表
流程定义部署后操作 activiti数据表如下:
act_re_deployment
流程定义部署表,记录流程部署信息act_re_procdef
流程定义表,记录流程定义信息act_ge_bytearray
资源表
部署信息表( act_re_deployment )
部署流程定义时需要被持久化保存下来的信息。
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
---|---|---|---|---|---|
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
NAME_ | 部署名称 | nvarchar(255) | √ | 部署文件名 | |
CATEGORY_ | 分类 | nvarchar(255) | √ | 类别 | |
DEPLOY_TIME_ | 部署时间 | datetime | √ | 部署时间 |
流程定义数据表( act_re_procdef )
业务流程定义数据表。此表和
ACT_RE_DEPLOYMENT
是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都会有一条记录在ACT_REPROCDEF
表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY
表内的一个资源文件和 PNG 图片文件。和ACT_GE_BYTEARRAY
的关联是通过程序用ACT_GE_BYTEARRAY.NAME
与ACT_RE_PROCDEF.NAME
完成的,在数据库表结构中没有体现。
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
---|---|---|---|---|---|
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
REV_ | 乐观锁 | int | √ | 乐观锁 | |
CATEGORY_ | 分类 | nvarchar(255) | √ | 流程定义的Namespace就是类别 | |
NAME_ | 名称 | nvarchar(255) | √ | 名称 | |
KEY_ | 定义的KEY | nvarchar(255) | 流程定义ID | ||
VERSION_ | 版本 | int | 版本 | ||
DEPLOYMENT_ID_ | 部署表ID | nvarchar(64) | √ | 部署表ID | |
RESOURCE_NAME_ | bpmn文件名称 | nvarchar(4000) | √ | 流程bpmn文件名称 | |
DGRM_RESOURCE_NAME_ | png图片名称 | nvarchar(4000) | √ | 流程图片名称 | |
DESCRIPTION_ | 描述 | nvarchar(4000) | √ | 描述 | |
HAS_START_FORM_KEY_ | 是否存在开始节点formKey | tinyint | √ | start节点是否存在formKey 0否 1是 | |
SUSPENSION_STATE_ | 是否挂起 | tinyint | √ | 1 激活 2挂起 |
二进制数据表,存储通用的流程定义和流程资源(act_ge_bytearray)
保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
---|---|---|---|---|---|
ID_ | ID_ | nvarchar(64) | Y | 主键ID | |
REV_ | 乐观锁 | int | Y | Version(版本) | |
NAME_ | 名称 | nvarchar(255) | Y | 部署的文件名称,如:leave.bpmn.png,leave.bpmn20.xml | |
DEPLOYMENT_ID_ | 部署ID | nvarchar(64) | Y | 部署表ID | |
BYTES_ | 字节 | varbinary(max) | Y | 部署文件 | |
GENERATED_ | 是否是引擎生成 | tinyint | Y | 0为用户生成,1为activiti生成 |
说明:
act_re_deployment
和 act_re_procdef
一对多关系,一次部署在流程部署表生成一条记录,但一次部署可以部署多个流程定义,每个流程定义在流程定义表生成一条记录。每一个流程定义在act_ge_bytearray
会存在两个资源记录,bpmn 和 png。
建议: 一次部署一个流程,这样部署表和流程定义表是一对一有关系,方便读取流程部署及流程定义信息。
流程定义部署
// 上传文件部署
@SneakyThrows
public void deploy(String name, MultipartFile file) {
InputStream fileInputStream = file.getInputStream();
String processName = name +".bpmn";
repositoryService
.createDeployment()
// 文件名, 流
.addInputStream(processName, fileInputStream)
// 流程定义名称
.name(name)
// 分类
.category("process")
.deploy();
}
将线下定义的流程部署到 activiti数据库中,这就是流程定义部署,通过调用 activiti的 api将流程定义的 bpmn 文件添加部署到 activiti
中,可以将两个文件打成 zip 包进行部署,也可以通过Model
进行部署。
流程定义删除
public void deleteDeployment() {
// 流程部署id
String deploymentId = "8801";
// 通过流程引擎获取repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//删除流程定义,如果该流程定义已有流程实例启动则删除时出错
repositoryService.deleteDeployment(deploymentId);
//设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除
repositoryService.deleteDeployment(deploymentId, true);
}
说明:
- 使用 repositoryService 删除流程定义
- 如果该流程定义下没有正在运行的流程,则可以用普通删除。
- 如果该流程定义下存在已经运行的流程,使用普通删除报错,可用级联删除方法将流程及相关记录全部删除。项目开发中使用级联删除的情况比较多,删除操作一般只开放给超级管理员使用。
流程定义挂起
repositoryService.suspendProcessDefinitionById
和 repositoryService.suspendProcessDefinitionByKey
方法参数效果自行查询
流程定义查询
repositoryService.createProcessDefinitionQuery()
和repositoryService.createNativeProcessDefinitionQuery()
说明:
- 通过获取查询API进行组装进行查询
createNativeProcessDefinitionQuery
是原生查询
来源:oschina
链接:https://my.oschina.net/u/2555967/blog/3165709