Activity 工作流中的表

Activiti 的表
表 说明
act_ge_bytearray 通用数据
act_ge_property 流程引擎数据
act_hi_actinst 历史节点表
act_hi_attachment 历史附件表
act_hi_comment 历史意见表
act_hi_detail 历史详情
act_hi_identitylink 历史流程人员
act_hi_procinst 历史流程实例
act_hi_taskinst 历史任务
act_hi_varinst 历史变量
act_id_group 用户信息组
act_id_info 用户信息详情
act_id_membership 组和对应信息关联表
act_id_user 用户信息表
act_procdef_info 流程定义信息
act_re_deployment 部署信息
act_re_model 流程设计模型
act_re_procdef 流程定义数据
act_ru_event_subscr 信息监听
act_ru_execution 运行时流程执行数据
act_ru_identitylink 运行时节点人员数据信息
act_ru_job 定时任务数据
act_ru_task 运行时任务节点
act_ru_variable 流程变量数据

我们肯定首先要知道 Activiti 的生命周期,生命周期要经过的步骤如下:

1.流程部署 —> 2.启动流程实例 — > 3.执行流程对象(一个流程实例包含多执行对象) —> 4.完成整个流程

而我们要想了解这个流程,就得先从表结构开始了,我们来看看面所有的表结构吧。

大家如果对表结构没有任何的兴趣,那就往后滑,看后面的关于 Activiti 的流程的内容。

1.act_ge_bytearray 通用数据,二进制数据表

保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。

字段说明

ID_ : 主键ID,也是主键唯一索引

REV_: Version(版本) 乐观锁

NAME_: 部署的文件名称,如:mail.bpmn、mail.png 、mail.bpmn20.xml

DEPLOYMENT_ID_: 部署表ID

BYTES_: 部署文件

GENERATED_: 是否是引擎生成,0为用户生成 1为Activity生成

在这里我们就要注意到 REV_ 这个乐观锁了,乐观锁每次在执行数据的修改操作时,都会带上一个版本号,一旦版本号和数据的版本号一致就可以执行修改操作并对版本号执行+1操作,否则就执行失败。因为每次操作的版本号都会随之增加,所以不会出现ABA问题,因为版本号只会增加不会减少。除了version以外,还可以使用时间戳,因为时间戳天然具有顺序递增性。好像又开始偏题了,我们回归正题,继续看表。

2.act_ge_property 流程引擎数据表

NAME_: 属性名称,也是主键

VALUE_: 资源

REV_: 乐观锁

next.dbid 当 Activiti 使用DbIdGenerator来生成主键时,用来表示Id块的起始值;Id块就是Activiti产生主键时,Id的取值范围,从next.dbid ~ next.dbid+idBlockSize-1 ,默认idBlockSize = 2500

schema.version 表示数据结构版本

schema.history 表示数据表结构的更新历史

这里面的数据一般情况下是这几个内容,标识的实际上相当于是 Activiti 的版本的一些相关的信息。

3.act_hi_actinst 历史节点表

这个表实际上就是表示的都是历史活动信息,流程流转过的所有节点的记录都在这个表中,但是他是记录的所有节点信息,而在 taskinst 只记录 usertask 内容

ID_: 主键ID

PROC_DEF_ID_: 流程定义ID

PROC_INST_ID_: 流程实例ID

EXECUTION_ID_: 执行实例ID

ACT_ID_: 节点定义ID

TASK_ID_: 任务实例ID 其他节点类型实例ID在这里为空

CALL_PROC_INST_ID_: 调用外部流程的流程实例ID

ACT_NAME_: 节点定义名称

ACT_TYPE_: 节点类型,如startEvent、userTask

ASSIGNEE_: 节点签收人

START_TIME_: 开始时间

END_TIME_: 结束时间

DURATION_: 耗时

4.act_hi_attachment 历史附件表

ID_: 主键ID

REV_: 乐观锁

USER_ID_: 用户ID

NAME_: 附件名称

DESCRIPTION_: 描述信息

TYPE_: 附件类型

TASK_ID_: 节点实例ID

PROC_INST_ID_: 流程实例ID

URL_: 附件地址

CONTENT_ID_: ACT_GE_BYTEARRAY的ID 二进制数据表的ID(对应关系)

5.act_hi_comment 历史意见表

ID_: 主键ID

TYPE_: 类型:event(事件)comment(意见)

TIME_: 填写时间

USER_ID_: 填写人用户ID

TASK_ID_: 节点实例ID

PROC_INST_ID_: 流程实例ID

ACTION_: 行为类型 AddUserLink、DeleteUserLink、AddGroupLink、DeleteGroupLink、AddComment、AddAttachment、DeleteAttachment.

MESSAGE_: 用于存放流程产生的信息,比如审批意见

FULL_MSG_: 附件地址

6.act_hi_detail 历史详情表

ID_: 主键ID

TYPE_: 类型 FormProperty–表单 VariableUpdate–参数

PROC_INST_ID_: 流程实例ID

EXECUTION_ID_: 执行实例ID

TASK_ID_: 任务实例ID

ACT_INST_ID_: 节点实例ID,ACT_HI_ACTINST表的ID

NAME_: 名称

VAR_TYPE_: 参数类型

REV_: 乐观锁

TIME_: 创建时间

BYTEARRAY_ID_: ACT_GE_BYTEARRAY表的ID

DOUBLE_: 存储变量类型为Double

LONG_: 存储变量类型为long

TEXT_: 存储变量值类型为String

TEXT2_: 此处存储的是JPA持久化对象时,才会有值。此值为对象ID

业务表单中填写的流程需要用到的变量,以及控制流程流转的变量所有的详细信息都会保存在这个历史详情表中。

7.act_hi_identitylink 历史流程人员

这个表其实就比较好了,因为当我们发起各种各样流程的时候,我们需要的永远都是保证数据从哪里来,已经谁发起的,追根溯源好找人呀。

ID_: 主键ID

GROUP_ID_: 组ID

TYPE_: 类型 assignee、candidate、owner、starter 、participant

USER_ID_: 用户ID

TASK_ID_: 节点实例ID

PROC_INST_ID_: 流程实例ID

主要存储历史节点参与者的信息,就是把发起流程的,还有参与过这个流程的人员信息,全部都加到表中。

8.act_hi_procinst 历史流程实例 (画重点的表!)

ID_: 主键ID

PROC_INST_ID_: 流程实例ID

BUSINESS_KEY_: 业务主键,业务表单的ID

PROC_DEF_ID_: 流程定义ID

START_TIME_: 开始时间

END_TIME_: 结束时间

DURATION_: 耗时

START_USER_ID_: 起草人的ID

START_ACT_ID_: 开始节点ID

END_ACT_ID_: 结束节点ID

SUPER_PROCESS_INSTANCE_ID_: 父流程实例ID

DELETE_REASON_: 删除原因

9.act_hi_taskinst 历史任务信息表 (画重点的表!)

ID_: 主键ID

PROC_DEF_ID_: 流程定义ID

TASK_DEF_KEY_: 节点定义ID

PROC_INST_ID_: 流程实例ID

EXECUTION_ID_: 执行实例ID

NAME_: 名称

PARENT_TASK_ID_: 父节点实例ID

DESCRIPTION_: 描述

OWNER_: 签收人(默认为空,只有在委托时才有值)任务的拥有者

ASSIGNEE_: 签收人或被委托

START_TIME_: 开始时间

CLAIM_TIME_: 提醒时间

END_TIME_: 结束时间

DURATION_: 耗时

DELETE_REASON_: 删除原因(completed,deleted)

PRIORITY_: 优先级别

DUE_DATE_: 过期时间,表明任务应在多长时间内完成

FORM_KEY_: 节点定义的formkey,desinger节点定义的form_key属性

10.act_hi_varinst 历史变量表

ID_: 主键ID

PROC_INST_ID_: 流程实例ID

EXECUTION_ID_: 执行实例ID

TASK_ID_: 任务实例ID

NAME_: 名称

VAR_TYPE_: 参数类型

REV_: 乐观锁

BYTEARRAY_ID_: ACT_GE_BYTEARRAY表的主键

DOUBLE_: 存储DoubleType类型的数据

LONG_: 存储LongType类型的数据

TEXT_: 存储变量值类型为String,如此处存储持久化对象时,值jpa对象的class

TEXT2_: 此处存储的是JPA持久化对象时,才会有值。此值为对象ID

11.act_id_group 用户信息组

ID_: 主键ID

REV_: 乐观锁

NAME_: 用户组名称

TYPE_: 用户组类型

12.act_id_info 用户信息详情表
ID_: 主键ID

REV_: 乐观锁

USER_ID_: 用户ID

TYPE_: 类型

KEY_: formINPut名称

VALUE_: 值

PASSWORD_: 密码

PARENT_ID_: 父节点

用户信息详情表,这个表好像有点鸡肋,目前说是还没有用到,

13.act_id_membership 用户与分组对应信息表

总得来说,这个表是真的简单,因为只是表示用户和组之间的对应关系,和很多硬件方面的内容好像很类似,就几个字段。

USER_ID: 用户ID

GROUP_ID: 用户组ID

14.act_id_user 用户信息表

ID_: 主键ID

REV_: 乐观锁

FIRST_: 用户姓

LAST_: 用户名

EMAIL_: 邮箱

PWD_: 密码

PICTURE_ID_: 头像Id

15.act_procdef_info 流程定义信息表

16.act_re_deployment 部署信息表

ID_: 主键ID

NAME_: 部署文件名

CATEGORY_: 分类类别

DEPLOY_TIME_: 部署时间

这个表主要就是在部署流程定义时需要被持久化保存下来的信息。

17.act_re_model 流程设计模型表

ID_: 主键ID

REV_: 乐观锁

NAME_: 名称

KEY_:模型的关键字 流程引擎用到。比如:FTOA_SWGL

CATEGORY_: 类型,用户自己对流程模型的分类。

CREATE_TIME_: 创建时间

LAST_UPDATE_TIME_: 最后的修改时间

VERSION_: 版本

META_INFO_: 以json格式保存流程定义的信息

DEPLOYMENT_ID_: 部署ID

EDITOR_SOURCE_VALUE_ID_: 编辑源值ID

EDITOR_SOURCE_EXTRA_VALUE_ID_: 编辑源额外值ID(外键ACT_GE_BYTEARRAY )

18.act_re_procdef 流程定义数据表

这个表示业务流程定义数据表,对应关系和 act_re_deployment 是多对一的关系。

ID_: 主键ID

REV_: 乐观锁

CATEGORY_: 流程定义的Namespace就是类别,该编号就是流程文件targetNamespace的属性值

NAME_: 流程名称,该编号就是流程文件process元素的name属性值

KEY_: 流程编号,该编号就是流程文件process元素的id属性值

VERSION_: 流程版本号,由程序控制,新增即为1,修改后依次加1来完成的

DEPLOYMENT_ID_: 部署表ID

RESOURCE_NAME_: 流程bpmn文件名称

DGRM_RESOURCE_NAME_: png流程图片名称

DESCRIPTION_: 描述信息

HAS_START_FORM_KEY_: 是否从key启动,start节点是否存在formKey 0否 1是

SUSPENSION_STATE_: 是否挂起,1激活 2挂起

19.act_ru_event_subscr 信息监听表

ID_: 主键ID

REV_: 乐观锁

EVENT_TYPE_: 事件类型

EVENT_NAME_: 事件名称

EXECUTION_ID_: 执行实例ID

PROC_INST_ID_: 流程实例ID

ACTIVITY_ID_: 活动实例ID

CONFIGURATION_: 配置信息

CREATED_: 创建时间

20.act_ru_execution 运行时流程执行数据表

这个表实际上就是很多 OA 中会出现的比如说,待办信息的展示。

ID_: 主键ID

REV_: 乐观锁

PROC_INST_ID_: 流程实例ID

BUSINESS_KEY_: 业务主键ID

PARENT_ID_: 父节点实例ID

PROC_DEF_ID_: 流程定义ID

SUPER_EXEC_:

ACT_ID_: 节点实例ID即 ACT_HI_ACTINST 中ID

IS_ACTIVE_: 激活状态,是否存活

IS_CONCURRENT_: 是否为并行(true/false)

IS_SCOPE_: 范围定义

IS_EVENT_SCOPE_: 事件范围

SUSPENSION_STATE_: 挂起状态 1激活 2挂起

CACHED_ENT_STATE_: 缓存结束状态

21.act_ru_identitylink 运行时节点人员数据信息表

任务参与者数据表。主要存储当前节点参与者的信息。

ID_: 主键ID

REV_: 乐观锁

GROUP_ID_: 分组ID

TYPE_: 用户组类型 主要分为以下几种:assignee、candidate、owner、starter、participant。即:受让人,候选人,所有者、起动器、参与者

USER_ID_: 用户ID

TASK_ID_: 任务Id

PROC_INST_ID_: 流程实例ID

PROC_DEF_ID_: 流程定义Id

22.act_ru_job 定时任务数据表

ID_: 主键ID

REV_: 乐观锁

TYPE_: 类型

LOCK_EXP_TIME_: 锁定释放时间

LOCK_OWNER_: 挂起者

EXCLUSIVE_:

EXECUTION_ID_: 执行实例ID

PROCESS_INSTANCE_ID_: 流程实例ID

PROC_DEF_ID_: 流程定义ID

RETRIES_:

EXCEPTION_STACK_ID_: 异常信息ID

EXCEPTION_MSG_: 异常信息

DUEDATE_: 到期时间

REPEAT_: 重复

HANDLER_TYPE_: 处理类型

HANDLER_CFG_: 标识

23.act_ru_task 运行时任务节点表

ID_: 主键ID

REV_: 乐观锁

EXECUTION_ID_: 执行实例ID

PROC_INST_ID_: 流程实例ID

PROC_DEF_ID_: 流程定义ID

NAME_: 节点定义名称

PARENT_TASK_ID_: 父节点实例ID

DESCRIPTION_: 节点定义描述

TASK_DEF_KEY_: 任务定义的ID

OWNER_: 拥有者(一般情况下为空,只有在委托时才有值) 实际签收人

ASSIGNEE_: 签收人或委托人

DELEGATION_: 委托类型

PRIORITY_: 优先级别,默认为:50

CREATE_TIME_: 创建时间

DUE_DATE_: 耗时

SUSPENSION_STATE_: 是否挂起,1代表激活 2代表挂起

24.act_ru_variable 流程变量数据表

ID_: 主键ID

REV_: 乐观锁

TYPE_: 编码类型

NAME_: 变量名称

EXECUTION_ID_: 执行实例ID

PROC_INST_ID_: 流程实例ID

TASK_ID_: 节点实例ID(Local)

BYTEARRAY_ID_:ACT_GE_BYTEARRAY的ID

DOUBLE_: 存储变量类型为Double

LONG_: 存储变量类型为long

TEXT_: 存储变量值类型为String 如此处存储持久化对象时,值jpa对象的class

TEXT2_: 此处存储的是JPA持久化对象时,才会有值。此值为对象ID

Activiti生命周期
1.流程部署 —> 2.启动流程实例 — > 3.执行流程对象(一个流程实例包含多执行对象) —> 4.完成整个流程

上图是个请假流程图,我们按照这个来整点代码来安排一下这个工作请假审批流。

画个图,发布流程,进行流程部署

rocessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment()
  .addClasspathResource("activity.cfg.xml")
  .deploy();
Log.info("Number of process definitions: " + repositoryService.createProcessDefinitionQuery().count());

启动一个流程实例

Map<String, Object> variables = new HashMap<String, Object>();
    variables.put("employeeName", "Kermit");
    variables.put("numberOfDays", new Integer(4));
    variables.put("vacationMotivation", "I'm really tired!");
    
    RuntimeService runtimeService = processEngine.getRuntimeService();
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vacationRequest", variables);
    
    Log.info("Number of process instances: " + runtimeService.createProcessInstanceQuery().count());

执行流程对象

TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("management").list();
for (Task task : tasks) {
  Log.info("Task available: " + task.getName());
}

上面代码中的 tasks 实际上可以说是一个任务列表,展示了所有必须由整个用户处理的任务

完成任务

Task task = tasks.get(0);
Map<String, Object> taskVariables = new HashMap<String, Object>();
taskVariables.put("vacationApproved", "false");
taskVariables.put("managerMotivation", "We have a tight deadline!");
taskService.complete(task.getId(), taskVariables);

对Activiti来说,就是需要complete任务,这个时候,实际上一个简单的请假流程就已经完成了,这时候,流程实例就会进入到下一个环节中。

而在这中间,我们可以设置一下把请假流程挂起,挂起的时候,就不能创建新流程了,不然就会出现异常,

repositoryService.suspendProcessDefinitionByKey("vacationRequest");
try {
  runtimeService.startProcessInstanceByKey("vacationRequest");
} catch (ActivitiException e) {
  e.printStackTrace();
}

我们通过 RepositoryService 挂起了流程,这个时候,流程不能继续执行,也不会执行异步操作,当我们需要激活这个流程的时候,我们就需要调用:

runtimeService.activateProcessInstanceXXX 方法来对流程进行激活了。

Activiti 的生命周期,就是这么简单,你学会了么?

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: activity工作流结构是指用于存储和管理工作流程相关的数据的数据库的设计。在activity工作流引擎,通常会涉及到以下几个主要的结构: 1. ACT_RE_* :这些用于存储流程引擎的静态信息,如流程定义、流程资源等。例如,ACT_RE_PROCDEF用于存储流程定义的相关信息,包括流程定义的唯一标识ID、版本号、流程图资源等。 2. ACT_RU_* :这些用于存储运行时的流程实例数据,即当前正在运行的流程实例的状态信息。例如,ACT_RU_EXECUTION用于存储执行流,记录了流程实例的执行路径,包括当前节点、父节点等。 3. ACT_HI_* :这些用于存储历史数据,包括已经完成的流程实例、任务的详细信息等。例如,ACT_HI_PROCINST用于存储历史流程实例数据,包括流程实例的开始时间、结束时间、持续时间等。 4. ACT_ID_* :这些用于存储身份验证和授权相关的信息。例如,ACT_ID_USER用于存储用户的信息,包括用户名、密码等。 5. ACT_GE_* :这些基础公共数据,用于支持工作流的操作。例如,ACT_GE_PROPERTY用于存储全局属性,如流程引擎的版本号、数据库模式版本等。 通过以上这些结构的设计,可以实现对工作流程相关数据的存储、查询、修改等操作,有效地支持工作流引擎的运行和管理。 ### 回答2: activity是一种开源的工作流管理系统,它提供了一种灵活的方式来定义和管理各种工作流程。在activity工作流结构是用来存储和管理工作流相关的数据。工作流结构包含了多个格,每个格都承载着不同的数据。 其最重要的格是以下几张: 1. ACT_RU_EXECUTION:这张格用来记录当前正在执行的流程实例的信息。每当一个流程实例启动时,就会在该创建一条记录,当流程实例结束时,相应的记录也会被删除。 2. ACT_RU_TASK:这张格用来记录流程的任务信息。每当一个任务被创建时,就会在该创建一条记录,当任务完成时,相应的记录也会被删除。 3. ACT_RU_VARIABLE:这张格用来存储流程的变量信息。每当一个变量被创建或修改时,就会在该创建或更新一条记录,当变量不再需要时,相应的记录也会被删除。 除了上述几张格外,还有其他一些用来存储与用户、组织、部署等相关信息的格,比如ACT_ID_USER、ACT_ID_GROUP、ACT_RE_DEPLOYMENT等。 通过这些格的结构,activity能够对工作流的执行过程进行监控、管理和控制,实现流程的自动化和可视化。用户可以在这些查询流程实例的执行情况、任务的完成情况,也可以根据需要对流程实例、任务、变量等进行增删改查的操作。工作流结构为activity提供了强大的数据支持,使得用户可以方便地进行工作流的设计、配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值