Skip to content

对象列表视图:新增「导出」+ 改进「导入」的校验与数据完整性 #2460

Description

@marchtian

背景

在使用对象列表视图(Console)做数据录入/迁移时,发现两类问题:① 没有"导出"能力(只能导入);② "导入"的校验与数据完整性存在隐患。下面给出可复现的实测记录与改进建议。

实测对象具备:必填字段、select(带值码/标签,如值 production ↔ 标签 00 生产)、多个 lookup 关联字段、以及跨字段校验规则(结束日期 ≥ 开始日期)。


一、新增:对象列表视图「导出」

现状:对象列表视图工具栏只有「导入」(object-view-import-button,支持 CSV/Excel/粘贴),没有任何「导出」入口;勾选记录后的批量操作栏也只有「删除」。检查前端产物,含导入按钮的对象视图包内无任何 export 相关代码,"导出"仅存在于 报表(Report) 模块。

问题:能批量导入却不能导出,能力不对称。用户做对账/上报/二次加工,以及"导出→改→再导入"的闭环都无法完成;绕道报表对"把当前筛选结果拉成 Excel"这类高频诉求过重。

期望:在列表视图提供与「导入」对称的「导出」:

  • 尊重当前视图的筛选条件、列顺序与可见列、排序
  • 尊重字段级权限(不导出用户无权查看的字段);
  • 支持导出全部 / 仅导出所选行
  • 大数据量走异步导出(生成文件后通知/下载),避免请求超时;
  • 导出格式与导入兼容(CSV/Excel),形成可往返的闭环。

二、改进:导入

整体向导(上传 → 字段映射 → 预览)做得不错:自动按列头映射、必填标 *、映射模板可保存复用、预览支持单元格内联改错、逐行跳过 + 末尾带行号/错误码的报告。但核心校验存在以下问题(按严重度排序):

P0 — lookup 字段不解析、不校验,原样写入外键(静默数据损坏)

复现:导入一行,关联字段(如「项目」)填一个不存在的名称 不存在的项目XYZ

实测:导入成功已导入 1 / 已跳过 0),该字符串被原样写进关联字段。即使填写接近真实记录的名称(如填 WT-2026-A 风场,真实记录名为 WT-2026-A 风场项目),也不会匹配到真实记录,而是把原文存入——列表里看着有值,实则是断链的"孤儿字符串"。

影响:破坏引用完整性,且全程静默成功,用户无从察觉。关联字段越多的对象暴露面越大。

期望:按可配置键(如 name / 业务编号)解析关联;解析不到时在预览中标红为错误而非静默插入原文;允许用户选择按哪个字段匹配。

P1 — select 按"值码"匹配,不认界面上的"标签"

复现:界面上选择项显示为 00 生产00 待开始,按所见在 CSV 填入这些标签。

实测:报 invalid_option,整行失败;必须填内部值码 production / pending 才能导入。

影响:配合"无导出、无模板下载",用户无从得知正确值码,最符合直觉的 CSV 反而全失败。

期望:导入时同时接受标签与值码(并能容忍 00 之类前缀);至少在映射界面展示合法值码,并在预览中校验。

P1 — 预览校验 ≠ 提交校验(给用户假信心)

复现:构造一批含"值码错误 / 结束日期早于开始 / 缺必填 / 数字格式错"的行,进入预览。

实测:预览只对字段级(必填、格式)报错,标记"2 行有错误";但不校验 select 合法性、跨字段规则、lookup 解析。"导入 N 行"按钮始终可点,提交后却因 invalid_option / rule_violation 被拒,最终 已导入 0 / 已跳过 4——预览的错误数与按钮状态都在误导用户。

期望:预览运行与提交一致的全量校验(含 select、跨字段规则、lookup 解析),使错误计数真实可信;存在错误行时禁用导入按钮或提供"仅导入有效行"。

P2 — 类型嗅探误报

编号 列(值如 IMP-TEST-001)在映射步骤被标记为"⚠ 疑似日期"。无害但易困惑;映射到目标字段后应以目标字段类型为准。

P2 — 缺「下载导入模板」

有"保存映射",但没有"下载模板"。建议在「导入」旁提供下载导入模板(含正确表头 + 合法 select 值码),尤其能缓解 P1。

P3 — 未见去重 / upsert 选项(待确认)

未发现按业务键"更新已有记录"的 upsert 能力,重复编号疑似会生成重复记录(未穷尽验证)。建议提供显式 upsert 模式与重复提醒。


建议汇总

  1. 列表视图补齐与「导入」对称的「导出」(尊重筛选/列/排序/权限,支持选中行与异步导出)。
  2. lookup 导入按可配置键解析,解析失败在预览中报错,杜绝静默写入原文。
  3. select 导入兼容标签与值码;映射界面展示合法值码。
  4. 预览与提交使用一致的全量校验;错误行时阻止整批导入或仅导入有效行。
  5. 提供「下载导入模板」。
  6. 修复 编号 "疑似日期"误判。
  7. 增加 upsert/去重能力。

环境

  • @objectstack/console 11.1.0、@objectstack/runtime / @objectstack/objectql / @objectstack/spec 11.1.0
  • Console 路径:对象列表视图(CSV/Excel 导入向导)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions