发现自 #938 / PR #942 的实施过程(marketing/index《Where to find things》一节末句把读者指向「营销活动详情页」去看已加入的线索,核实这条路径时读到的)。
基线 origin/main = 11f62429(平台 17.0.0-rc.3)。
事实
src/views/event_attendee.view.ts:5-:16 的文件头注释,把自己存在的理由建立在 crm_campaign_member 上:
A junction object is normally edited inside its parent's related list, and
crm_event_attendee is no exception — but it still needs a grid and a form,
for the same reason crm_campaign_member has them: the related list renders
THIS view's columns, and the quick-create modal renders THIS form. Without
them the panel falls back to every column in declaration order and the
create modal offers the raw autonumber.
但 crm_campaign_member 没有这些 view:
ls src/views/ | grep -i campaign → 只有 campaign.view.ts(是 crm_campaign 的,不是成员的)。
src/views/index.ts 导出 15 个 view 模块,没有 CampaignMemberViews。
grep -rln "crm_campaign_member" src/ --include="*.view.ts" → 只命中 event_attendee.view.ts 自己那句注释。
也就是说,注释里作为「已成立的先例」被引用的那个对象,恰恰是反例。
影响(按注释自己的推理)
如果 event_attendee.view.ts 对机制的描述是准确的——它是本仓对这条渲染路径唯一的成文说明——那么 crm_campaign_member 今天就正处在它描述的退化态:
- 营销活动详情页的 Campaign Members 关联列表按声明顺序渲染全部字段,而不是策展过的列;
- 快速新建弹窗把
member_number(autonumber)当作首个可填字段呈现。
我没有在浏览器里实测(本单按派发要求不起 dev server),所以影响一栏是从该注释的断言推导的,不是观测值。接手的人应先跑一次 dogfood 确认退化的具体形态,再决定补 view 还是改注释。
至少可以确定的是:两者必有一错——要么 crm_campaign_member 缺 view 元数据,要么 event_attendee.view.ts:10 的注释在拿一个不存在的先例说事。
与已有单的边界
建议的处置面
补 src/views/campaign_member.view.ts(grid + form,参照 event_attendee.view.ts 的形状),在 src/views/index.ts 导出,并按 src/translations/{en,zh-CN,es-ES,ja-JP}.ts 四语补 view label;或者,若判定关联列表的默认退化可接受,则改掉 event_attendee.view.ts 那句失实的注释。二选一,别两边都放着。
Refs #715 #597 #938 #942
发现自 #938 / PR #942 的实施过程(marketing/index《Where to find things》一节末句把读者指向「营销活动详情页」去看已加入的线索,核实这条路径时读到的)。
基线
origin/main=11f62429(平台 17.0.0-rc.3)。事实
src/views/event_attendee.view.ts:5-:16的文件头注释,把自己存在的理由建立在crm_campaign_member上:但
crm_campaign_member没有这些 view:ls src/views/ | grep -i campaign→ 只有campaign.view.ts(是crm_campaign的,不是成员的)。src/views/index.ts导出 15 个 view 模块,没有CampaignMemberViews。grep -rln "crm_campaign_member" src/ --include="*.view.ts"→ 只命中event_attendee.view.ts自己那句注释。也就是说,注释里作为「已成立的先例」被引用的那个对象,恰恰是反例。
影响(按注释自己的推理)
如果
event_attendee.view.ts对机制的描述是准确的——它是本仓对这条渲染路径唯一的成文说明——那么crm_campaign_member今天就正处在它描述的退化态:member_number(autonumber)当作首个可填字段呈现。我没有在浏览器里实测(本单按派发要求不起 dev server),所以影响一栏是从该注释的断言推导的,不是观测值。接手的人应先跑一次 dogfood 确认退化的具体形态,再决定补 view 还是改注释。
至少可以确定的是:两者必有一错——要么
crm_campaign_member缺 view 元数据,要么event_attendee.view.ts:10的注释在拿一个不存在的先例说事。与已有单的边界
crm_campaign_member的Basic Information字段组被highlightFields全部提升、导致该组在详情页永不渲染(lint field-group-shadowed,本次pnpm validate仍在报)。那是 object 上fieldGroups与highlightFields的冲突;本单是根本没有 view 文件,两者机制与修法都不同,可能需要一起收但不是同一处改动。needs-user-decision;本单是 UI 元数据缺失,不依赖那些产品决定。marketing/index的《Where to find things》(:74) 只列了 Campaigns,漏掉 Marketing 分组里真实存在的 Products(crm.app.ts:126) #938 / PR docs(marketing): name Products in the index page's "Where to find things" (#938) #942 无重叠:那单只改content/docs/marketing/index*.mdx的散文,src/零改动。建议的处置面
补
src/views/campaign_member.view.ts(grid + form,参照event_attendee.view.ts的形状),在src/views/index.ts导出,并按src/translations/{en,zh-CN,es-ES,ja-JP}.ts四语补 view label;或者,若判定关联列表的默认退化可接受,则改掉event_attendee.view.ts那句失实的注释。二选一,别两边都放着。Refs #715 #597 #938 #942