Activiti表结构

1、通用数据表

通用数据表用于存放一些通用的数据,这些表本身不关心特定的流程或者业务,只用于存放这些业务或者流程所使用的通用资源。它们可以独立存在于流程引擎或者应用系统中,其他的数据表有可能会使用这些表中的数据。通用数据表有两个,它们都以“ACT_GE”开头,GE是单词general的缩写。

1.1、资源表

ACT_GE_BYTEARRAY用于保存与流程引擎相关的资源,只要调用了Activiti存储服务的API,涉及的资源均会被转换为byte数组保存到这个表中。在资源表中设计了一个BYTES字段,用来保存资源的内容,因此理论上其可以用于保存任何类型的资源(文件或者其他来源的输入流)。一般情况下,Activiti使用这个表来保存字符串、流程文件的内容、流程图片内容。

ACT_GE_BYTEARRAY表主要包含如下字段:

  • REV_:数据版本,Activiti为一些有可能会被频繁修改的数据表,加入该字段,用来表示该数据被操作的次数。
  • NAME_:资源名称,类型为varchar,长度为255字节。
  • DEPLOYMENT_ID_:一次部署可以添加多个资源,该字段与部署表ACT_RE_DEPLOYMENT的主键相关联。
  • BYTES_:资源内容,数据类型为longblob,最大可存4GB数据。
  • GENERATED_:是否由Activiti自动产生的资源,0表示false,1为true。

1.2、属性表

Activiti将全部的属性抽象为key-value对,每个属性都有名称和值,使用ACT_GE_PROPERTY来保存这些属性,该表有以下三个字段。

  • NAME_:属性名称,varchar类型。
  • VALUE_:属性值,varchar类型。
  • REV_:数据的版本号。

2、流程存储表

流程引擎使用仓储表来保存流程定义和部署信息这类数据,存储表名称以“ACT_RE”开头,“RE”是repository单词的缩写。

2.1、部署数据表

在Activiti中,一次部署可以添加多个资源,资源会被保存到资源表中(ACT_GE_BTYEARRAY),而对于部署,则部署信息会被保存到部署表中,部署表名称为ACT_RE_DEPLOYMENT,该表主要包含以下字段:

  • NAME_:部署的名称,可以调用Activiti的流程存储API来设置,类型为varchar,长度为255字节。
  • DEPLOYMENT_TIME_:部署时间,类型为timestamp。

2.2、流程定义表

Activiti在部署添加资源时,如果发布部署的文件是流程文件(.bpmn或者.BPMN20.xml),则除了会解析这些流程文件,将内容保存到资源表外,还会解析流程文件的内容,形成特定的流程定义数据,写入流程定义表(ACT_RE_PROCDEF)中。ACT_RE_PROCDEF表主要包含
以下字段:

  • CATEGORY_:流程定义的分类,读取流程XML文件中的targetNamespace值。
  • NAME_:流程定义名称,读取流程文件中process元素的name属性。
  • KEY_:流程定义的key,读取流程文件中process元素的id属性。
  • DEPLOYMENT_ID_:流程定义对应的部署数据ID。
  • RESOURCE_NAME_:流程定义对应的资源名称,一般为流程文件的相对路径。
  • DGRM_RERSOURCE_NAME_:流程定义对应的流程图资源名称。
  • SUSPENSION_STATE_:表示流程定义的状态是激活还是中止,激活状态时该字段值为1,中止时字段值为2,如果流程定义被设置为中止状态,那么将不能启动流程。

3、身份数据表

Activiti的整个身份数据模块,可以独立于流程引擎而存在,有关身份数据的几张表,并没有保存与流程相关的数据及关联。身份表名称以ACT_ID开头,表名中的“ID”是单词identity的缩写。

3.1、用户表

流程引擎用户的信息被保存在ACT_ID_USER表中,该表有以下几个字段。

  • FIRST_:人名。
  • LAST_:姓氏。
  • EMAIL_:用户邮箱。使用
  • PWD_:用户密码。
  • PICTURE_ID_:用户图片,对应资源中的数据ID。

3.2、用户账号信息表

Activiti将用户、用户账号和用户信息分为三种数据,其中用户表保存用户的数据,而用户账号和用户信息,则被保存到ACT_ID_INFO表中,该表有以下字段:

  • USER_ID_:对应用户表的数据D,但没有强制做外键关联。
  • TYPE_:信息类型,当前可以设置用户账号(account)、用户信息(userinfo)和NULL三种值。
  • KEY_:数据的键,可以根据该键来查找用户信息的值。
  • VALUE_:数据的值,类型为varchar,长度为255字节
  • PASSWORD_:用户账号的密码字段,不过当前版本的Activiti并没有使用该字段。
  • PARENT_ID_:该信息的父信息D,如果一条数据设置了父信息D,则表示该数据是用户账号(信息)的明细数据,例如一个账号有激活日期,那么激活日期就是该账号的明细数据,此处使用了自关联来实现。

3.3、用户组表

使用ACT_ID_GROUP表来保存用户组的数据,该表有以下几个字段。

  • NAME_:用户组名称。
  • TYPE_:用户组类型,类型不由Activiti提供,但是在某些业务中,Activiti会根据该字段的值进行查询,字段值由Activiti定义(如Activiti的WebService)。

3.4、关系表

一个用户组下有多个用户,一个用户可以属于不同的用户组,那么这种多对多的关系,就使用关系表来进行描述,关系表为ACT_ID_MEMBERSHIP,只有两个字段。

  • USER_ID_:用户ID,不能为NULL。
  • GROUP_ID_:用户组ID,不能为NULL。

需要注意的是,ACT_ID_MEMBERSHIP的两个字段均做了外键约束,写入该表的数据,必须要有用户和用户组数据与之关联。

4、运行时数据表

运行时数据表用来保存流程在运行过程中所产生的数据,例如流程实例、执行流、任务等。运行时数据表的名称以ACT_RU开头,“RU”是单词runtime的缩写。

4.1、流程实例(执行流)表

流程启动后,会产生一个流程实例,同时会产生相应的执行流,流程实例和执行流数据均被保存在ACT_RU_EXECUTION表中,如果一个流程实例只有一条执行流,那么该表中只产生一条数据,该数据既表示执行流,也表示流程实例。ACT_RU_EXECUTION表有以下字段。

  • PROC_INST_ID_:流程实例ID,一个流程实例有可能会产生多个执行流,该字段表示执行流所属的流程实例。
  • BUSINESS_KEY_:启动流程时指定的业务主键。
  • PARENT_ID_:父执行流的ID,一个流程实例有可能会产生执行流,该字段保存父执行流ID。
  • PROC_DEF_ID_:流程定义数据的ID。
  • ACT_ID_:当前执行流行为的ID,ID在流程文件中定义。
  • IS_ACTIVE_:该执行流是否活跃的标识。
  • IS_CONCURRENT_:执行流是否正在并行。
  • SUSPENSION_STATE_:标识流程的中断状态。

4.2、流程任务表

流程在运行过程中所产生的任务数据保存在ACT_RU_TASK表中,该表主要有如下字段。

  • EXECUTION_ID_:任务所在的执行流ID。
  • PROC_INST_ID_:对应的流程实例ID。
  • PROC_DEF_ID_:对应流程定义数据的ID。
  • NAME_:任务名称,在流程文件中定义。
  • DESCRIPTION_:任务描述,在流程文件中配置。
  • TASK_DEF_KEY_:任务定义的ID值,在流程文件中定义。
  • OWNER_:任务拥有人,没有做外键关联。
  • ASSIGNEE_:被指派执行该任务的人,没有做外键关联。
  • PRIORITY_:任务优先级数值。
  • DUE_DATE_:任务预订日期,类型为datetime。

4.3、流程参数表

Activiti提供了ACT_RU_VARIABLE表来存放流程中的参数,这类参数包括流程实例参数、执行流参数和任务参数,参数有可能会有多种类型,因此该表使用多个字段来存放参数值。

ACT_RU_VARIABLE表主要有以下字段:

  • TYPE_:参数类型,该字段值可以为“boolean”、“bytes”、“serializable”、“date”、“double”、“integer’”、“jpa-entity”、“long”、“null”、“short”、“string”,这些字段值均为Activiti提供,还可以通过扩展来自定义参数类型。
  • NAME_:参数名称。
  • EXECUTION_ID_:该参数对应的执行D,可以为ull。
  • PROC_INST_ID_:该参数对应的流程实例ID,可以为null。
  • TASK_ID_:如果该参数是任务参数,就需要设置任务ID。
  • BYTEARRAY_ID_:如果参数值是序列化对象,那么可以将该对象作为资源保存到资源表中,该字段保存资源表中数据的ID。
  • DOUBLE_:参数类型为double的话,则值会保存到该字段中。
  • LONG_:参数类型为long的话,则值会保存到该字段中。
  • TEXT_:用于保存文本类型的参数值,该字段为varchar类型,长度为4000字节。
  • TEXT2_:与TEXT字段一样,用于保存文本类型的参数值。

4.4、流程与身份关系表

用户组和用户之间的关系,使用ACT_ID_MEMBERSHIP表保存,用户或者用户组与流程数据之间的关系,则使用ACT_RU_IDENTITYLINK表进行保存,相比于ACT_ID_MEMBERSHIP表,ACT_RU_IDENTITYLINK表的字段更多一些。

  • GROUP_ID_:该关系数据中的用户组ID。
  • TYPE_:该关系数据的类型,当前提供了3个值:assignee、candidate和owner,表示流程数据的指派人(组)、候选人(组)和拥有人。
  • USER_ID_:关系数据中的用户ID。
  • TASK_ID_:关系数据中的任务ID。
  • PROC_DEF_ID_:关系数据中的流程定义ID。

4.5、工作数据表

在流程执行的过程中,会有一些工作需要定时或者重复执行,这类工作数据被保存到工作表中,Activiti提供了四个工作表用于保存不同的工作数据。

  • ACT_RU_JOB:一般工作表。
  • ACT_RU_DEADLETTER_JOB:无法执行工作表,用于存放无法执行的工作。
  • ACT_RU_SUSPENDED_JOB:中断工作表,中断工作产生后,会将工作保存到该表中。
  • ACT_RU_TIMER_JOB:定时器工作表,用于存放定时器工作。

4.6、事件描述表

如果流程到达某类事件节点,Activiti会往ACT_RU_EVENT_SUBSCR表中加入事件描述数据,这些事件描述数据将会决定流程事件的触发。ACT_RU_EVENT_SUBSCR表有如下字段。

  • EVENT_TYPE_:事件类型,不同的事件会产生不同类型的事件描述,并不是所有的事件都会产生事件描述。
  • EVENT_NAME_:事件名称,在流程文件中定义。
  • EXECUTION_ID_:事件所在的执行流ID。
  • PROC_INST_ID_:事件所在的流程实例ID。
  • ACTIVITY_ID_:具体事件的ID,在流程文件中定义。
  • CONFIGURATION_:事件的配置属性,该字段中有可能存放流程定义ID、执行流ID或者其他数据。

5、历史数据表

历史数据表就好像流程引擎的日志表,操作过的流程元素将会被记录到历史表中。历史数据表名称以ACT_HI开头,“HI”是单词history的缩写。

5.1、流程实例表

流程实例的历史数据会被保存到ACT_HI_PROCINST表中,只要流程被启动,就会将流程实例的数据写入ACT_HI_PROCINST表中。除了基本的流程字段外,与运行时数据表不同的是,历史流程实例表还会记录流程的开始活动ID、结束活动ID等信息。ACT_HI_PROCINST表有以下三个主要的字段:

  • START_ACT_ID_:开始活动的ID,一般是流程开始事件的ID,在流程文件中定义。
  • END_ACT_ID_:流程最后一个活动的ID,一般是流程结束事件的ID,在流程文件中定义。
  • DELETE_REASON_:该流程实例被删除的原因。

5.2、流程明细表

流程明细表(ACT_HI_DETAIL)会记录流程执行过程中的参数或者表单数据,由于在流程执行过程中,会产生大量这类数据,因此默认情况下,Activiti不会保存流程明细数据,除非将流程引擎的历史数据(history)配置为full。

5.3、历史任务表和历史行为表

当流程到达某个任务节点时,就会向历史任务表(ACT_HI_TASKINST)中写入历史任务数据,该表与运行时的任务表类似。历史行为表(ACT_HI_ACTINST)会记录每一个流程活动的实例,一个流程活动将会被记录为一条数据,根据该表可以追踪最完整的流程信息。

5.4、附件表和评论表

使用任务服务(TaskService)的API,可以添加附件和评论,这些附件和评论的数据将会被保存到ACT_HI_ATTACHMENTACT_HI_COMMENT表中。ACT_HI_ATTACHMENT
如下字段:

  • USER_ID_:附件对应的用户ID,可以为NULL。
  • NAME_:附件名称。
  • DESCRIPTION_:附件描述。
  • TYPE_:附件类型。
  • TASK_ID_:该附件对应的任务ID。
  • PRO_INST_ID_:对应的流程实例ID。
  • URL_:连接到该附件的URL。
  • CONTENT_ID_:附件内容ID,附件的内容将会被保存到资源表中,该字段记录资源数据ID。

ACT_HI_COMMENT表实际不只保存评论数据,它还会保存某些事件数据,但它的表名为COMMENT,因此更倾向把它叫作评论表,该表有如下字段。

  • TYPE_:评论的类型,可以设值为“event”或“comment”,表示事件记录数据或者评论数据。
  • TME_:数据产生的时间。
  • USER_ID_:产生评论数据的用户ID。
  • TASK_ID_:该评论数据的任务ID。
  • PROC_INST_ID_:数据对应的流程实例ID。
  • ACTION_:该评论数据的操作标识。
  • ESSAGE_:该评论数据的信息。
  • FULL_MSG_:该字段同样记录评论数据的信息。

虽然附件表和评论表的命名遵守历史数据表的命名规范(以ACT_HI开头),但是可以调用其他服务组件的API来往这两个表中写入数据,以笔者的理解,历史数据表实际上保存的是那种一经写入,就很少会发生变化(结构性变化)的数据。

6、DMN规则引擎表

Activiti6.0中加入了基于DMN规范的规则引擎模块,当前版本主要有三个数据表,保存规则引擎相关的数据。

6.1、决策部署表

保存决策数据,类似于流程定义部署,每一次部署,可以添加多份决策文件,向部署表中写入一条部署数据,对应数据表为ACT_DMN_DEPLOYMENT,该表主要有以下字段。

  • NAME_:部署名称。
  • CATEGORY_:部署的目录名称。
  • PARENT_DEPLOYMENT_ID_:父部署ID。

6.2、决策表

可以先将决策看作流程定义,决策文件中保存着决策表,部署时会解析决策文件中的决策模型并将其保存到ACT_DMN_DECISION_TABLE表中,该表主要有以下字段。

  • KEY_:决策业务主键。
  • DEPLOYMENT_ID_:所属的部署数据ID。

6.3、部署资源表

规则引擎相关的资源,例如决策文件、图片等,被保存在ACT_DMN_DEPLOYMENT_RESOURCE表中,该表类似于流程引擎的资源表,主要有以下字段。

  • NAME_:资源名称。
  • DEPLOYMENT_ID_:所属的部署数据ID。
  • RESOURCE_BYTES_:资源内容,longblob类型。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐