简要说明:没有网络时如何保存检查记录?
将检查表保存在设备上支持事务的本地数据库中,为每条记录分配唯一操作标识,明确展示发送状态,并在恢复连接后与服务器协调数据,避免产生重复记录。
离线工作中的“已保存”并非单一状态。应向用户分别显示 已保存到设备, 等待发送, 服务器已接受 以及 需要审查 等状态,避免在弱网环境下把表单已显示在屏幕上,误认为已传到中心系统。
出发前应将哪些数据下载到设备?
简要说明:只下载完成已分配工作所必需、当前有效且已获授权的数据包。
- 工单和固定设备标识
- 与设备类型对应的检查表固定版本
- 必要的检查准则和选项列表
- 已指派人员的任务范围和设备参考信息
- 最后同步时间和数据包版本
W3C Service Workers 规范说明,可通过拦截请求的工作线程及本地请求与响应存储构建离线 Web 应用。在 VizyonTech 流程中,这意味着不能只缓存页面框架,还应在出发前,将已分配任务的表单和参考数据准备为经过验证的数据包。
数据包不是当前版本时,应用不得悄悄打开旧表单。应明确展示最后同步时间、表单版本和离线使用期限;关键主数据缺失时,必须按 fail-closed 原则阻止创建记录。工单、设备和表单之间的关系,可在 定期检验计划指南中 进一步了解。
表单应如何保存在设备上?
简要说明:每次字段变更都应通过短小、原子性的本地数据库事务写入,而不是只保存在临时界面内存中。
W3C IndexedDB 3.0 草案描述了面向离线 Web 需求的本地结构化对象存储,以及事务全部写入或发生错误时回滚的机制。对于现场表单,这意味着将测量值、单位、说明、照片关联和记录时间一致地写入某个草稿版本。
| 字段 | 为什么保存? | 核查项目 |
|---|---|---|
| 操作标识 | 防止同一次提交在重试时产生重复记录 | 在设备上生成一次,并保持不变 |
| 本地版本 | 标识每次编辑的顺序 | 事务成功提交后递增 |
| 创建与修改时间 | 说明事件顺序 | 设备时间与服务器接受时间分别保存 |
| 表单版本 | 保留实际使用的检查准则 | 业务创建时固定 |
| 队列状态 | 区分本地保存与成功送达 | 本地、等待、发送中、已接受、错误 |
| 附件关联 | 将照片匹配到正确记录 | 验证文件摘要和本地引用 |
只有本地事务完成后,“保存”按钮才能显示成功。应用关闭、电量耗尽或网络短暂恢复,都不应将未完成的表单标记为“已发送”。

恢复连接后如何同步?
简要说明:按顺序发送队列,每项记录使用同一操作标识重试,并且只有在收到服务器明确接受的响应后,才标记为完成。
- 不仅要确认存在网络连接,还要确认可以访问应用服务器。
- 重新检查队列记录的本地完整性和必填字段。
- 以固定操作标识和本地版本发送记录及附件。
- 在服务器端执行权限、工单、表单版本和现有记录版本检查。
- 服务器成功接受后,将服务器记录标识和接受时间写回设备。
- 将临时错误转入受控重试,将永久性验证错误交由人工审查。
RFC 9110 说明,幂等请求在连接失败后可以重复执行,同时保持相同的预期效果。对于定期检验记录,仅有方法名称并不足够:服务器不能把使用同一操作键的第二次请求创建成新报告,而应返回此前接受的结果。
Background Synchronization API 可在恢复连接后,将工作交给 service worker 处理;但 MDN 将其标记为尚未得到广泛浏览器支持的功能。因此,队列不能只依赖后台事件,还应在应用启动和用户执行“立即发送”时安全运行。
同一记录在两台设备上被修改后怎么办?
简要说明:测量和符合性字段不应采用“最后写入者胜出”的方式;应阻止版本冲突,并向授权用户展示两边的变更。
如果服务器版本已高于设备启动任务时取得的基础版本,自动覆盖可能导致数据丢失。无冲突字段可以受控合并;但若双方都修改了同一测量值、结果或关键说明,应将记录设为 需要审查 状态,等待处理。
- 比较服务器版本和设备取得的基础版本。
- 在操作轨迹中保留变更字段及操作人员。
- 不得用离线草稿悄悄替换已发布报告。
- 将冲突处理结果作为新修订保存,并记录理由。
- 向用户明确显示哪台设备上的记录仍在等待处理。
如何保护设备上的离线数据?
简要说明:只下载必需数据,利用平台的安全存储机制保护本地数据,并按设备和会话生命周期执行受控清理。
OWASP MASVS-STORAGE-1 要求,无论敏感数据位于设备何处,都应安全保存。MASWE-0006 则建议不在本地存储不必要的敏感数据,将密钥保存在平台安全密钥库中,并采用适当的加密。
- 离线数据包只包含已分配任务,不包含全部客户档案。
- 根据数据分类保护会话密钥、个人数据、照片和测量附件。
- 不要将加密密钥放在数据文件旁或源代码中。
- 测试设备丢失、用户更换和权限撤销场景。
- 根据保存政策,安全清理已经发送的本地附件。
- 不得将敏感记录写入共享文件区域或不受控的备份。
离线工作并不取消权限检查。即使设备此前已获授权,服务器仍应在同步时重新验证用户、机构、工单和表单版本。
上线前应测试哪些场景?
简要说明:仅测试飞行模式不够;应证明在记录的各个阶段发生中断时都能正确处理,且重试不会产生重复记录。
- 应用首次在离线状态下启动时,能否正常打开,或正确提示准备不足?
- 保存字段时应用关闭,是否保留最近一次已完成的本地事务?
- 上传照片时连接中断,表单与附件的关联是否仍然完整?
- 服务器已接受记录但响应未到达设备时,再次发送是否会产生第二条记录?
- 中心系统修改表单版本后,如何区分基于旧版本的离线任务?
- 同一任务在两台设备上编辑时,关键字段冲突是否会被阻止?
- 权限已被撤销的用户重新连接后,是否拒绝提交,同时保留其记录供处理?
- 队列等待数日后,用户能否判断哪些记录尚未传到中心系统?
Vizyon Periyodik 的评估不能只演示“表单能打开”,而应一并测试本地事务提交、可见队列、幂等接受、冲突管理和设备安全。软件选型中其他条件不足即阻止操作的控制,可参阅 定期检验软件选型指南 可供参阅。
参考来源
- W3C — Service Workers (候选推荐标准草案,2026 年 6 月 8 日)。
- W3C — Indexed Database API 3.0 (工作草案,2025 年 8 月 13 日)。
- Android Developers — 构建离线优先的应用 (访问日期:2026 年 8 月 11 日)。
- IETF — RFC 9110,HTTP 语义:幂等方法 (2022 年 6 月)。
- OWASP — MASVS-STORAGE-1:安全存储 (访问日期:2026 年 8 月 11 日)。
- MDN — Background Synchronization API (访问日期:2026 年 8 月 11 日;浏览器支持有限)。
需要离线保存的字段,还应根据机构的数据分类、设备政策、任务范围及产品支持的客户端平台分别确认。