随便看看
发布于 2026-05-20 / 6 阅读
0

ACT_RU|HI_ACTINST定义

活动实例表。记录流程实例流转过的所有节点的历史轨迹,包括开始事件、用户任务、服务任务、网关、结束事件等。与 act_hi_taskinst(仅记录任务节点)不同,此表覆盖全部活动类型

我的理解就是actinst =>> activity + processInstance 记录一个流程下执行的所有动作

类型判断

先从类型入手更容易理解 这个表的作用

表中有一个 act_type_ 字段, 这个字段就是记录所有节点的历史轨迹

  1. 事件类型(Event)

startEvent: 开始事件

endEvent: 结束事件

  1. 任务类型(Task)

userTask: 用户任务

  1. 网关类型(Gateway)

inclusiveGateway: 包容网关

parallelGateway: 并行网关

  1. 子流程/调用活动类()

callActivity: 调用活动(相对于在当前流程任务中调用(启动)另一个流程)

  1. 连接线(Flow)

sequenceFlow: 任务之间的连接线

ps:列的这些都是用到的还有很多我没用到的就先不列出来了,也记不住

实战看看

真实项目结构

先看看主流程

在看子流程-立项阶段

启动流程查看运行逻辑

现在我们启动这个流程看看他是如何在act*actinst表中是如何运行的

  1. 当我们点击发布流程 看看RU表

这里先从父子流程拆分,红色是主流程 蓝色是子流程

ps: 主流程中任务都是加粗黑框,这种就是上面提到的 调用活动类型

  1. 分析

主流程:

发现他创建了3条信息,通过ACT_TYPE_ 记录可以发现分别是 startEvent,sequenceFlow,callActivity

子流程:

startEvent,sequenceFlow,userTask

再看看HI表

发现数据都差不多

表中常用的字段

PROC_INST_ID当前节点发起的流程ID

ACT_ID 流程任务定义的ID

TASK_ID 流程中任务节点启动会生成的任务ID (因为任务可以去处理表单等数据,所以单独有个TASK表,自然也需要维护TASK_ID)

ACT_NAME 顾名思义=>任务名字

ACT_TYPE_ 当前节点的类型

ASSIGNEE_ 任务处理人,表中也可以看出 event&flow这种自动流转的节点不需要人位处理,所以为NULL

  1. 我们通过 [立项审批(营销经理)]任务

可以看见他又创建了2个节点

第一个是项目经理任务到总经理任务的线 sequenceFlow

第二个是[立项审批(总经理)] 这个用户任务 userTask

ps:细节可以发现end_time_是null,说明节点在这里就进入等待用户去处理了,而且业务中我们也可以通过判断end_time判断某个流程下当前运行到那个节点了

  1. 接着通过子流程的 [立项审批(总经理)

  1. 通过 选择项目负责人

通过这个RU表可以发现 之前立项阶段调用活动的子流程 所有数据都被删除了

还没有一刻为立项阶段子流程悼念,接下来上场的是计划阶段子流程

从HI中可以看到立项阶段还在,而且多了一个endEvent表示流程已经结束了

新加入的2条记录 一条是sequenceFlow(也就是立项阶段和计划阶段中间的那条线),另一条callActivity计划阶段的调用活动 启动了

  1. 有注意到我截图中 包含的TRANSACTION_ORDER_ 字段吗?

细心可以发现他总会按照一定的顺序初始化

结合上面的图片可以得出一下思路

  1. 从1开始累加,且每次累加1

  2. 每次到达Task后累加器会重新计数

下面是官方的解释:

会按照一段事务进行,事务结束就会重新计时,而事务结束的信号在哪?

在一个事务中推进流程,直到遇到下一个"等待状态"(wait state)为止。常见的等待状态包括用户任务(userTask)、接收消息任务(receiveTask)、定时器等

所以说发现大部分 3,2的类型都是task....

但是我也只是好奇查了一下,项目中并没有直接需要用到这个的地方🤔

总结

  1. actinst表 以一个流程为主体,记录其下每个节点的运行信息

  2. 如果是父子流程,当子流程完成后,RU表便会删除,继续记录主流程,直到主流程完成

  3. 从RU | HI 表中 我们能提取到当前流程运行到了哪个节点,节点类型,以及节点期间运行时间