来源:#834 实施过程中的顺带发现(同一节的另一条 bullet,不在 #834 的改动面内,未在该 PR 中修改)。基线 origin/main = eb4a7e1。
事实
content/docs/administration/automation.mdx:122(zh-Hans :120、zh-Hant :120):
- Merge fields —
{{Opportunity.Name}}, {{Account.Owner.Email}}.
- 合并字段 ——
{{Opportunity.Name}}、{{Account.Owner.Email}}。
占位符语法本身是对的。 EmailTemplateDefinitionSchema(node_modules/@objectstack/spec/src/system/email-template.zod.ts,spec 17.0.0-rc.2)的头注释写明:subject / body 承载 {{path.to.value}} 占位符,按每次发送的 data 载荷渲染;EmailTemplateDefinitionVariableSchema.name 的描述是 Variable name as referenced in placeholders (snake_case or dotted path)。
不对的是路径的拼写。 本仓的对象是 crm_opportunity / crm_account,字段是 name / owner_id / email。Opportunity、Name、Account.Owner.Email 这几段在本仓不是任何对象或字段的拼写,是 Salesforce 式 PascalCase 的借用示例。AGENTS.md 对此有硬约束:
The name in source = the name at runtime = the name in DB = the name in URL = the name in docs. No translation layer.
同页其余地方(flow 表、顺序小节)引用字段时用的都是真实拼写(end_date、expiration_date、owner_id),只有这一条 bullet 例外。
影响与证据边界
管理员在 设置 → 电子邮件模板 里照抄这两个示例写占位符,渲染时对不上任何值。
未实测的部分,如实说明:本仓不 author 任何邮件模板,也没有调用 IEmailService.sendTemplate() 的代码路径(#834 已复核:dist/objectstack.json 顶层无邮件模板集合,产物内 email_template 零命中),因此无法在本仓端到端测出渲染结果。这里只证明了「示例里的拼写在本仓不存在」,没有证明平台侧对这两个字符串会怎么处理。
修复面(未做,留给 triage)
把示例换成本仓真实拼写即可让这一条自洽。但换成什么形状取决于一个本仓测不出的问题:模板的 data 载荷究竟以什么形状传入(record 展平成 {{name}},还是带前缀的 {{record.name}} / {{crm_opportunity.name}})。spec 只说「按每次发送的 data 载荷渲染」,载荷形状由调用方决定,而本仓没有调用方。所以这一条要么写成不依赖载荷形状的说法,要么先向平台侧确认一次再定示例文本。
Refs #834 #800
来源:#834 实施过程中的顺带发现(同一节的另一条 bullet,不在 #834 的改动面内,未在该 PR 中修改)。基线
origin/main= eb4a7e1。事实
content/docs/administration/automation.mdx:122(zh-Hans:120、zh-Hant:120):占位符语法本身是对的。
EmailTemplateDefinitionSchema(node_modules/@objectstack/spec/src/system/email-template.zod.ts,spec 17.0.0-rc.2)的头注释写明:subject / body 承载{{path.to.value}}占位符,按每次发送的data载荷渲染;EmailTemplateDefinitionVariableSchema.name的描述是Variable name as referenced in placeholders (snake_case or dotted path)。不对的是路径的拼写。 本仓的对象是
crm_opportunity/crm_account,字段是name/owner_id/email。Opportunity、Name、Account.Owner.Email这几段在本仓不是任何对象或字段的拼写,是 Salesforce 式 PascalCase 的借用示例。AGENTS.md 对此有硬约束:同页其余地方(flow 表、顺序小节)引用字段时用的都是真实拼写(
end_date、expiration_date、owner_id),只有这一条 bullet 例外。影响与证据边界
管理员在 设置 → 电子邮件模板 里照抄这两个示例写占位符,渲染时对不上任何值。
未实测的部分,如实说明:本仓不 author 任何邮件模板,也没有调用
IEmailService.sendTemplate()的代码路径(#834 已复核:dist/objectstack.json顶层无邮件模板集合,产物内email_template零命中),因此无法在本仓端到端测出渲染结果。这里只证明了「示例里的拼写在本仓不存在」,没有证明平台侧对这两个字符串会怎么处理。修复面(未做,留给 triage)
把示例换成本仓真实拼写即可让这一条自洽。但换成什么形状取决于一个本仓测不出的问题:模板的
data载荷究竟以什么形状传入(record 展平成{{name}},还是带前缀的{{record.name}}/{{crm_opportunity.name}})。spec 只说「按每次发送的data载荷渲染」,载荷形状由调用方决定,而本仓没有调用方。所以这一条要么写成不依赖载荷形状的说法,要么先向平台侧确认一次再定示例文本。Refs #834 #800