1 概述
在项目管理等复杂的业务场景中,项目、阶段、任务等核心数据往往不是一成不变的:负责人调整、工期变更、预算修订等都需要经过规范的审批流程才能生效。为了让数据的变更过程可追溯、可比对、可审批,跨设备表单提供了「表单数据单次变更比对展示」能力,搭配工作流审批就可以实现上述场景。
所谓「表单数据单次变更比对展示」的核心应用场景就是:当需要对某条项目或任务变更数据进行审批时,审批人在审批环节看到的是一份清晰、直观的本次变更比对界面:主表字段的变更项、从表记录的新增/删除/修改项一目了然。若审批被驳回,发起人可继续修改并重新生成比对结果;审批通过后,变更内容才会同步回原始数据表,整个变更流程至此结束。
简言之,该功能主要解决的是变更数据的展示问题,是业务数据变更审批流程中不可或缺的数据可视化环节。同期它也为后续判断流程复杂度(例如本次变更涉及哪些字段、是否触发更高级别的审批)提供了基础的数据支持。
2 设计思路
2.1 设计目标
以项目管理系统中项目基本信息和项目阶段信息变更为例,核心数据(项目、阶段等)不开放直接修改权限,所有字段变更必须通过审批流程生效。本方案要解决的问题是:
- 变更可追溯:每次发起变更都有明确的原始数据快照、变更申请数据和审批记录;
- 差异可对比:审批人能直观看到「变更前」与「变更后」的差异;
- 数据一致性:审批通过后,变更结果能准确回写到原始数据表;
- 流程防冲突:避免同一对象在同一时间并行发起多次变更。
2.2 核心数据对象
| 对象 | 含义 | 作用 |
|---|---|---|
| 原始数据 A | 当前生效和对外展示的业务数据表 | 不开放直接修改,仅作为变更的数据源和最终回写目标 |
| 原始数据快照 B | 此次变更流程发起时自动生成A的快照备份 | 记录此次变更发起时刻的完整数据,用于后续对比 |
| 变更申请数据 C | 用户在变更流程申请表单中编辑后的数据 | 在A的数据基础上进行修改,承载本次变更的完整内容,提交后进入审批 |
三者关系:A 是数据基准,B 是快照备份,C 是变更提案。
2.3 数据流转方案
2.3.1 发起变更
- 用户在流程发起表单的「变更申请数据 C」新增页面,从「原始数据 A」中带入主表和从表的当前完整数据;
- 可变更字段保持可编辑,不可变更字段置为只读;
- 用户可直接在页面上修改主表字段、新增/删除/修改从表记录;
- 流程未发起时,草稿编辑过程支持临时暂存和多次进入修改;
- 用户确认无误后发起变更流程。
2.3.2 备份原始数据
- 流程发起后,系统需第一时间将当前「原始数据 A」的完整内容写入「原始数据快照 B」;
- 备份时机必须在变更申请正式提交后立即执行,确保流程审批环节可以进行「变更申请数据 C」与「原始数据快照 B」的比对展示;
- 「原始数据快照 B」一旦生成,自始至终保持不变。
2.3.3 审批展示
- 审批界面主要以详情页形式呈现,仅发起人环节支持退回时修改(使用「变更申请数据 C」修改页面);
- 需同时展示以下两份数据的比对结果:
- 变更申请数据 C:用户提交后的变更内容;
- 原始数据快照 B:变更发起时的原始数据;
- 通过字段级对比,高亮显示主表字段和从表的差异项(新增、删除、修改)。
2.3.4 审批结果处理
- ①同意变更:将「变更申请数据 C」同步至「原始数据 A」,更新对应字段,流程结束;
- ②驳回变更:此次变更申请未通过,无需更新「原始数据 A」,流程结束,「变更申请数据 C」和「原始数据快照 B」均留存以便日后可追溯。
- ③退回发起人修改:流程任务返回至发起人节点,发起人修改 C 的部分内容后可再次提交,后续审批环节更新 C 与 B 的对比结果。
2.4 流程图示例
下图是最简易的变更审批流程,注意:
(1)在进入第一个审批环节前进行「原始数据快照备份」
可以通过工作流【数据处理任务】调用离线数据开发任务或存储过程,参考逻辑:通过表C创建时的业务主键关联表A数据进行备份,同需要时备份表C记录创建时生成的变更批次号(下文会在表B表C的建表要求中说明)。
(2)审批通过结束前根据审批结果进行「原始数据更新」
可以通过工作流【数据处理任务】调用离线数据开发任务或存储过程,参考逻辑:通过表C中的业务主键关联表A原始数据进行回写。
2.5 变更流程并发限制
为避免数据混乱,需增加以下限制:
同一个项目编号在同一时间只能发起一个变更流程。
实现方式可根据业务需要灵活设计,例如:设立数据表状态位,在「原始数据 A」或扩展表中增加类似「变更中」状态字段。
2.6 关键设计决策
为什么不直接修改 A?
业务层面要求数据变更必须经过审批,直接修改会破坏流程管控和数据审计。B 为什么要在发起后备份,而不是用发起前的 A?
发起动作本身是业务边界点,备份需在流程正式启动后立即完成,确保快照与变更申请严格对应。为什么需要对照模式而不是只展示 C?
审批人不仅需要知道「改了哪些」「改成了什么」,更需要知道「原来的值是什么」,对照模式能显著降低认知成本。为什么要限制同一项目编号同时只能有一个变更流程?
防止多个并行变更基于同一版本 A 生成不同 C,导致回写冲突或数据覆盖问题。
3 数据表准备
3.1 原始数据表 A
原始数据表就按实际业务需要进行设计,这里不进行展开描述。
3.2 原始数据快照备份表 B
准备B表时,需注意备份时需要对原始数据A完整进行备份,因此其不是一张表,而是对应原始数据A的完整的一套表,若有从表的话需包括从表结构。
不论是主表还是从表,除了完整的A表业务字段数据以外,B表需具备独立的主键和变更批次号字段(批次号需每次发起变更时自行生成,备份时带入此表以便关联比对数据),以项目基础信息主表为例如下图所示。
3.3 变更申请数据表 C
C表和B表一样除了除了完整的A表业务字段数据以外,C表也需具备独立的主键和变更批次号字段(批次号需每次发起变更时自行生成),此外作为实际发起流程的表单还需要具备流程表单必要的系统字段,
。
4 表单配置说明
跨设备表单在设计时需以变更发起的表C作为表单模板主数据,将表B作为比对参照数据,变更数据比对样式设置如下图所示,其中主表和从表均需分开配置:
(1)主表
- 在【表单页面功能-详情页面-变更比对样式】开启该功能后,需额外配置
①比对元数据:即原始数据快照B;
②批次字段映射:需分别选取表C和表B的批次号字段,若同一条记录发起多次变更时,可以通过该字段关联同一次发起的变更数据和快照数据进行比对;
③业务主键映射:需分别先选取表C和表B的业务主键字段,建立映射关系进行取数,支持添加多字段联合主键。 - 变更比对样式仅针对详情页面生效,表单的编辑页面依然以表C创建的元数据进行展示。
(2)从表
- 在【从表页面设置-页面设置-变更比对样式】开启该功能后,需额外配置
①比对元数据:即原始数据快照B;
②批次字段映射:需分别选取表C和表B的批次号字段,若同一条记录发起多次变更时,可以通过该字段关联同一次发起的变更数据和快照数据进行比对;
③业务主键映射:用于分辨同一批次号下逐条比对从表记录,需分别先选取表C和表B的业务主键字段,建立映射关系进行取数,支持添加多字段联合主键。 - 变更比对样式同样仅针对详情页面生效,从表的编辑页面依然以表C创建的元数据进行展示。
5 执行效果
目前仅支持PC端显示变更数据比对效果,整体效果如下图所示:
主表字段中橙色高亮显示的就是字段值有变更的字段,支持鼠标移入查看原始值。
在多记录从表中,除了能比对同一条记录中的字段值变更,还能通过变更状态显示记录的增删改。
- 新增:比对后新增的从表记录;
- 删除:比对后不存在的从表记录(含假删),所有列显示原始值且显示为灰色,删除的记录默认移到表格末尾展示;
- 更新:同一条记录有任一字段列数据发生变更,有变更的字段列内容显示为橙色高亮展示,鼠标移入可查看原始值,删除的字段显示为原始值且显示为灰色。
- 未做变更:比对后内容一致没有发生变更的从表记录。
从表记录支持按变更状态进行过滤查看。
最后编辑:Eric 更新时间:2026-10-15 10:34
