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-09-28 14:51
最后编辑:Eric  更新时间:2026-10-15 10:34