关于 generating-custom-object
用于生成 Salesforce 自定义对象 XML 元数据的技能,提供避免 Metadata API 部署错误的要求与检查项,并根据对象用途指导命名、共享设置、名称字段和功能配置。
主要功能
- 01自定义对象 XML 生成规则
- 02共享模型决策逻辑
- 03文本或自动编号名称字段
- 04面向用户的功能设置
- 05命名与关系约束
- 06生成前核对清单
适用场景
- 01创建 Salesforce 自定义对象
- 02配置对象共享行为
- 03准备对象元数据以供部署
- 04检查对象及验证规则命名
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill generating-custom-object安装后在 Claude Code 中输入/generating-custom-object确认已加载。
详细介绍
何时使用此技能
在需要执行以下操作时使用此技能:
- 创建新的自定义对象
- 生成自定义对象元数据 XML
- 配置对象共享和安全设置
- 设置对象功能和特性
- 排查与自定义对象相关的部署错误
规范
1. 概述和用途
本文档定义了生成 CustomObject 元数据 XML(.object-meta.xml 文件)时必须遵守的约束。Agent 必须在输出 XML 前验证这些约束,以防止 Metadata API 部署错误。
文件扩展名: .object-meta.xml
2. 语法要点(Tier 1)
要使 XML 正文成功部署,必须满足以下约束。
注意: API 名称(fullName)不是标签,而是文件名(例如,Vehicle__c.object-meta.xml)。
必需元素
| 元素 | 要求 | 备注 |
|---|---|---|
<label> | 必需 | 单数形式的 UI 名称 |
<pluralLabel> | 必需 | 复数形式的 UI 名称 |
<sharingModel> | 必需 | 参见下文“共享模型规则” |
<deploymentStatus> | 必需 | 始终设置为 Deployed |
<nameField> | 必需 | 主要记录标识符(需要 <label> 和 <type>) |
<visibility> | 必需 | 始终设置为 Public |
共享模型规则
默认值: 将 <sharingModel> 设置为 ReadWrite。
例外: 如果此对象包含主从关系字段,<sharingModel> 必须为 ControlledByParent。
决策逻辑:
- 如果对象没有主从关系字段 → 使用
ReadWrite - 如果对象有主从关系字段 → 使用
ControlledByParent - 如果要向现有子对象添加主从关系字段 → 还必须将该现有对象的
<sharingModel>更新为ControlledByParent
❌ 错误 — 将导致错误:Cannot set sharingModel to ReadWrite on a CustomObject with a MasterDetail relationship field
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<label>Order Line Item</label>
<pluralLabel>Order Line Items</pluralLabel>
<sharingModel>ReadWrite</sharingModel>
<deploymentStatus>Deployed</deploymentStatus>
</CustomObject>
✅ 正确:
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<label>Order Line Item</label>
<pluralLabel>Order Line Items</pluralLabel>
<sharingModel>ControlledByParent</sharingModel>
<deploymentStatus>Deployed</deploymentStatus>
</CustomObject>
3. 智能默认值和决策逻辑(Tier 2)
Agent 必须根据对象的预期用途选择要启用的功能。
A. 名称字段的选择
| 类型 | 使用场景 | 其他要求 |
|---|---|---|
| Text | 默认用于以名称标识的实体(项目、地点、团队) | 无 |
| AutoNumber | 用于交易、日志或 ID(发票、请求、工单) | 必须包含 <displayFormat>(例如,INV-{0000})和 <startingNumber>1</startingNumber> |
Text 名称字段示例:
<nameField>
<label>Project Name</label>
<type>Text</type>
</nameField>
AutoNumber 名称字段示例:
<nameField>
<label>Invoice Number</label>
<type>AutoNumber</type>
<displayFormat>INV-{0000}</displayFormat>
<startingNumber>1</startingNumber>
</nameField>
B. 对象描述
<description>:必需。每个对象都必须包含专业的摘要。
如果意图含糊,则生成摘要:
“用于在组织内跟踪和管理 [Intent] 的对象。”
C. 联接对象命名
如果对象是连接两个父对象的多对多关系,请结合两个父实体为对象命名,确保架构直观易懂。
示例:
Position_Candidate__c(连接 Position 和 Candidate)Job_Application__c(连接 Job 和 Application)
D. 功能启用(精简 XML)
为保持“精简 XML”,仅在需要偏离 Salesforce 平台默认值 false 时才包含可选标签。
场景 A:面向用户的对象(应用、跟踪器、业务实体)
- 触发条件:对象用于直接与用户交互
- 操作:将
<enableSearch>、<enableReports>、<enableActivities>和<enableHistory>设置为true
场景 B:面向系统的对象(联接对象、后台日志)
- 触发条件:对象用于技术关联或后台数据
- 操作:省略这些标签,以保持 UI 整洁、XML 精简
4. 关键约束和常见错误
保留字
切勿将保留字用作自定义对象或自定义字段的 API 名称:
| 类别 | 保留字(请勿用作 API 名称) |
|---|---|
| SOQL/SQL | Select、From、Where、Limit、Order、Group |
| 系统 | User、External、View、Type |
| 时间 | Date、Number |
关系上限
单个对象最多只能创建 2 个主从关系。如果需要第三个关系,请改用查找关系。
XML 根元素
请勿在 .object-meta.xml 文件的根元素中包含 <fullName> 标签。API 名称根据文件名确定。
❌ 错误:
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>Vehicle__c</fullName>
<label>Vehicle</label>
</CustomObject>
✅ 正确:
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<label>Vehicle</label>
</CustomObject>
验证规则命名约定
验证规则名称遵循与自定义字段不同的约定。
规则:
- 只能包含字母数字字符和下划线
- 必须以字母开头
- 不能以下划线结尾
- 不能包含连续两个下划线
- 不能以
__c结尾(与自定义字段不同)
❌ 错误:
<validationRules>
<fullName>Require_Start_Date__c</fullName>
<active>true</active>
<errorMessage>Start Date is required.</errorMessage>
<formula>ISBLANK(Start_Date__c)</formula>
</validationRules>
错误: The validation name can only contain alphanumeric characters, must begin with a letter, cannot end with an underscore...
✅ 正确:
<validationRules>
<fullName>Require_Start_Date</fullName>
<active>true</active>
<errorMessage>Start Date is required.</errorMessage>
<formula>ISBLANK(Start_Date__c)</formula>
</validationRules>
命名模式参考:
| 元数据类型 | 命名模式 | 示例 |
|---|---|---|
| 自定义字段 | 以 __c 结尾 | Start_Date__c |
| 验证规则 | 无后缀 | Require_Start_Date |
| 自定义对象 | 以 __c 结尾 | Vehicle__c |
5. 验证清单
生成自定义对象 XML 之前,请确认:
语法检查
- 是否同时包含
<label>和<pluralLabel>? -
<deploymentStatus>是否设为Deployed? -
<visibility>是否设为Public? -
<nameField>是否包含<label>和<type>? - 如果
<type>是AutoNumber,是否包含<displayFormat>和<startingNumber>?
共享模型检查(关键)
- 此对象是否有主从关系字段?
- 如果是 →
<sharingModel>必须设为ControlledByParent - 如果否 →
<sharingModel>应设为ReadWrite
- 如果是 →
约束检查
- API 名称是否不含保留字?
- 主从关系是否不超过 2 个?
- XML 根元素中是否不含
<fullName>?
验证规则检查(如适用)
- 验证规则名称是否没有以
__c结尾? - 验证规则名称是否符合字母数字字符加下划线的模式?
架构检查
- 是否包含带有明确摘要的
<description>? - 如果面向用户,是否将
<enableSearch>和<enableReports>设为true? - 文件名是否与预期的 API 名称一致?