流程表单数据查询
流程表单(NORMAL 类型)的字段值保存为 Flowable 流程变量。它不像业务表单那样一张业务表对应一组字段,而是更接近 EAV 模型:每个字段值都是变量表中的一行记录。
本文用于说明如何排查和查询流程表单数据。正式业务统计仍建议使用业务表单和独立业务表。
存储模型
| 维度 | 流程表单 | 业务表单 |
|---|---|---|
| 表单定义 | bpm_form | 业务模块自定义 |
| 表单值 | Flowable 变量表 | 独立业务表 |
| 字段结构 | 变量名 + 变量值 | 固定列 |
| 查询复杂度 | 适合简单排查 | 适合报表统计 |
常见变量表包括:
| 表 | 说明 |
|---|---|
ACT_RU_VARIABLE | 运行中的流程变量 |
ACT_HI_VARINST | 历史流程变量 |
ACT_HI_PROCINST | 历史流程实例 |
ACT_RE_PROCDEF | 流程定义 |
查询当前运行中的变量
sql
SELECT
v.PROC_INST_ID_ AS process_instance_id,
v.NAME_ AS field_name,
v.TEXT_ AS text_value,
v.LONG_ AS long_value,
v.DOUBLE_ AS double_value,
v.CREATE_TIME_ AS create_time
FROM ACT_RU_VARIABLE v
WHERE v.PROC_INST_ID_ = '流程实例ID'
ORDER BY v.NAME_;查询历史变量
sql
SELECT
v.PROC_INST_ID_ AS process_instance_id,
v.NAME_ AS field_name,
v.TEXT_ AS text_value,
v.LONG_ AS long_value,
v.DOUBLE_ AS double_value,
v.CREATE_TIME_ AS create_time,
v.LAST_UPDATED_TIME_ AS update_time
FROM ACT_HI_VARINST v
WHERE v.PROC_INST_ID_ = '流程实例ID'
ORDER BY v.NAME_;按流程定义查询表单数据
sql
SELECT
p.ID_ AS process_instance_id,
p.PROC_DEF_ID_ AS process_definition_id,
p.START_USER_ID_ AS start_user_id,
p.START_TIME_ AS start_time,
v.NAME_ AS field_name,
v.TEXT_ AS text_value,
v.LONG_ AS long_value,
v.DOUBLE_ AS double_value
FROM ACT_HI_PROCINST p
LEFT JOIN ACT_HI_VARINST v ON v.PROC_INST_ID_ = p.ID_
WHERE p.PROC_DEF_ID_ LIKE '流程定义Key:%'
ORDER BY p.START_TIME_ DESC, v.NAME_;将变量转为列
如果需要临时查看固定字段,可以用条件聚合:
sql
SELECT
v.PROC_INST_ID_ AS process_instance_id,
MAX(CASE WHEN v.NAME_ = 'name' THEN v.TEXT_ END) AS name,
MAX(CASE WHEN v.NAME_ = 'reason' THEN v.TEXT_ END) AS reason,
MAX(CASE WHEN v.NAME_ = 'amount' THEN v.DOUBLE_ END) AS amount
FROM ACT_HI_VARINST v
GROUP BY v.PROC_INST_ID_
ORDER BY v.PROC_INST_ID_ DESC;把 name、reason、amount 替换为表单设计器中的真实字段 key。
使用建议
- 查询前先确认表单字段 key,不要用字段标题作为变量名。
- 已结束流程优先查
ACT_HI_VARINST。 - 运行中流程可查
ACT_RU_VARIABLE,但历史表通常更适合统一排查。 - 如果某类表单需要长期报表,建议升级为业务表单。
