工作流-流程定义

拈花ヽ惹草 提交于 2020-02-26 06:36:22

操作数据表

流程定义部署后操作 activiti数据表如下:

  1. act_re_deployment 流程定义部署表,记录流程部署信息
  2. act_re_procdef 流程定义表,记录流程定义信息
  3. 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.NAMEACT_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_deploymentact_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);
}

说明:

  1. 使用 repositoryService 删除流程定义
  2. 如果该流程定义下没有正在运行的流程,则可以用普通删除。
  3. 如果该流程定义下存在已经运行的流程,使用普通删除报错,可用级联删除方法将流程及相关记录全部删除。项目开发中使用级联删除的情况比较多,删除操作一般只开放给超级管理员使用。

流程定义挂起

repositoryService.suspendProcessDefinitionByIdrepositoryService.suspendProcessDefinitionByKey 方法参数效果自行查询

流程定义查询

repositoryService.createProcessDefinitionQuery() repositoryService.createNativeProcessDefinitionQuery() 说明:

  1. 通过获取查询API进行组装进行查询
  2. createNativeProcessDefinitionQuery 是原生查询
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!