Skip to content

PageComponentSchema.dataSource.view 是声明了但无人消费的绑定:objectui resolveElementDataSource 丢弃 view 键(除测试外零调用方),list-view 上照 spec 写 dataSource 反而运行时报错(17.0.0-rc.2) #5576

Description

@yinlianghui

发现于 objectstack-ai/hotcrm#771 / PR objectstack-ai/hotcrm#784(Sales Home 标签页内嵌视图的实测过程)。与已关闭的 #4413 同缺陷类——「契约 publish 了渲染器根本不读的绑定」——但 #4413 处理的是 record:* 四个 block 的 objectName/recordId,不含本键,故单独立此单。

现象(单变量对照,pinned 17.0.0-rc.2,真实 dev server + Chromium)

同一张 type: 'home' 页面上三个 list-view 页面组件:

  • 不带 dataSource 的两个 → 正常渲染真实数据表格;
  • 按 spec 写 dataSource: { object, view } 的那个 → 运行时直接失败 "Couldn't load records"。

两个方向各复现一次(加上即坏、去掉即好)。

机理

  • PageComponentSchema.dataSource.view(ElementDataSourceSchema 的 view 键)在 spec 里声明;
  • objectui 的 resolveElementDataSource 把 view 键整个丢弃;
  • 且该函数除测试外零调用方——即「按名字引用 saved view」这条声明的能力在 rc.2 运行时不存在,写了还会把组件弄坏。

应用侧的实际代价

hotcrm PR objectstack-ai/hotcrm#784 因此无法按名字引用 saved view,只能从 src/views/*.view.ts 读出 columns / filter / sort 内联进 page 组件(PR body 已记录此取舍与理由)。每个这样做的应用都在为同一个视图维护两份配置的漂移风险——这正是 saved-view 引用本该消灭的问题。

验收建议(同 #4413 的结论口径:当前状态不能留)

二选一:

  1. objectui 消费 view 键——按名字解析 saved view 的 columns/filter/sort 并渲染;或
  2. 从 spec / 公开契约撤下该键,并让 validate 拒绝它——不再让一个「声明+校验但不执行、用了反而坏」的绑定继续误导作者。

/cc 需要 objectui 侧改动(objectstack-ai/objectui:resolveElementDataSource)。

Activity

  1. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    Contributor

    分诊:保留 pm:queue,补路由 repo:objectui(落 objectui,按协议不打 domain:*)。

    • 过时前提检查:objectui origin/main 今日核实 —— packages/core/src/data-scope/ViewDataProvider.ts 的 resolveElementDataSource 仍只透传 filter/sort/limit,view 键整个丢弃。前提成立、未过时。
    • 路线判断(入队依据):同类先例 kind:'react' 页面上 record:* 四个 block 全部失效——契约 publish 的 objectName/recordId 渲染器根本不读(#4340 后续) #4413(record:* 家族「契约 publish 渲染器不读」)最终走的是把声明的绑定接通(objectui#3147 已把 dataSource 接到 list-view 注册表路径、feat(spec)!: retire residual feed discovery/dispatcher surface (#3180) #3204 接通 record:activity),与 declared = delivered 口径一致;而路线 2(从 spec 撤键)属移除已发布能力,须维护者拍板。故按路线 1入队:objectui 消费 view 键 —— 按名解析 saved view 的 columns/filter/sort 并渲染。若认领 dev 论证路线 1 不可行,上报转 needs-user-decision,⛔ 勿自行撤键。
    • 验收提醒:除接通 view 外,须同时消除「写了 dataSource 反而 Couldn't load records」的回归面(加/去两个方向各钉一条,对照正文的单变量复现)。

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 9, 2026
  3. yinlianghui commented on Aug 9, 2026

    @yinlianghui
    CollaboratorAuthor

    🔒 认领(objectui 分片 PM,session session_01GTRjn8xBqp75dk7kFupVRt,v17 批次)

    • 分支:claude/issue-os5576-datasource-view(objectui 仓)
    • 执行分诊定向路线 1(先例 kind:'react' 页面上 record:* 四个 block 全部失效——契约 publish 的 objectName/recordId 渲染器根本不读(#4340 后续) #4413:声明的绑定接通,declared = delivered):resolveElementDataSource 消费 view 键 —— 按名解析 saved view 的 columns/filter/sort 并渲染;⛔ 勿撤 spec 键,dev 若论证路线 1 不可行则上报转 needs-user-decision。
    • 验收线(分诊已定):除接通 view 外,必须消除「写了 dataSource 反而 Couldn't load records」的回归面 —— 加/去两方向各钉一条,对照正文单变量复现。
    • 文件面:packages/core/src/data-scope/ViewDataProvider.ts + list-view 页面组件渲染路径 + 测试。

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions