Skip to content

record:related_list.filter 声明了却无人读:RelatedList 的列表查询只按父关系过滤,作者写的 filter(以及 dataSource 合成出的 filter)整条丢弃 #7118

Description

@yinlianghui

发现于 objectstack#6953 的实施过程(objectui 分支 claude/issue-6953-datasource-block-wiring)。不在该单范围内(它只做 dataSource 逐 block 接线),单独立单。

事实(objectui origin/main @ 65bb513dc 实测)

record:related_list 的注册 inputs 明确声明了 filter:

packages/plugin-detail/src/index.tsx:  { name: 'filter', type: 'array', label: 'Filter', description: 'Additional filter criteria' },

但渲染器从不读它 —— packages/plugin-detail/src/renderers/record-related-list.tsx 里 grep filter 只命中 columns 的 FLS 过滤(rawColumns.filter(...))与注释,传给 RelatedList 的 props 里没有任何 filter 通道:

title / type / api / objectName / referenceField / parentId / columns
pageSize / defaultSort / dataSource / add / rowActions / ... 

RelatedList 侧也没有对应的入口:它的列表查询完全由父关系构成(packages/plugin-detail/src/RelatedList.tsx,fetch 处 const filter = { [referenceField!]: parentId }),filter 相关的 prop 只有 add.picker.filter(Add 选择器的 baseFilter,#3831 接的)和客户端搜索框 filterable/filterText,都不是列表自身作用域。

症状

作者按已发布的 inputs 给相关列表写 filter: [['is_active','=',true]],得到的是该父记录下的全部子行 —— 不报错、os validate / SDUI 保存门也全绿(filter 是已声明键,sdui-parser 的 prop walk 不会报 unknown-prop)。这正是 objectstack#4413 的形状:声明了、验证通过、没人消费。

与 objectstack#6953 的关系(为什么单独立单而不是并进去)

#6953 把 spec 的 PageComponentSchema.dataSource 逐 block 接到各自读的键上。record:related_list 那一块故意没有映射 filter:把合成出来的 filter 写到一个没人读的键上,只是把 #6953 要消除的缺陷往下挪一层、看起来像接好了。#6953 的 PR 里为此钉了一条诚实的反向断言(RecordRelatedListRenderer.elementDataSource.test.tsx 最后一例:确认没有任何 filter 到达 RelatedList),并在 content/docs/guide/data-source.md 的逐 block 覆盖表里写明了这个缺口。

连带后果(比单独的 flat 键更重):在 record:related_list 上写 dataSource: { object, view } 时,saved view 的 columns/sort/limit 会生效而它的 filter 被丢弃 —— 于是列表比它引用的那个 view 更宽。「命名了 view 却静默放宽」正是 objectstack#5576 立下的语义要禁止的方向,只是这里的根因在 flat filter 无读点,不在合成逻辑。

修完后 #6953 侧的收尾(一行)

filter 拿到读点后,RECORD_RELATED_LIST_DATA_SOURCE(record-related-list.tsx)加上 filter: true,绑定侧即自动跟上;上面那条反向断言同时翻转。

建议范围

  1. RelatedList 增加列表自身作用域的 filter 入口,与父关系条件 and 合成(不要走 lookupFilters —— 那会渲染成用户可编辑的筛选行,把作者的约束变成建议,fix(automation,objectql): a filter that loses a condition must not run (#3810) #3831 已论证过)。
  2. record-related-list.tsxschema.filter 接上去。
  3. 两方向钉子:带 filter 时进入查询、不带时与现状逐字节一致。
  4. 顺带确认 inputsfiltertype: 'array' 与实际接受的形状一致(spec 的 ViewFilterRule[]?MongoDB 风格条件对象?),不一致就以 spec 为准修 inputs 描述。

Blocked-by: #6953


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions