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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions