mcpField
G
generating-custom-object

generating-custom-object

github.com/forcedotcom开发1.1k4.0k 次安装1 天前更新
代码仓库

关于 generating-custom-object

用于生成 Salesforce 自定义对象 XML 元数据的技能,提供避免 Metadata API 部署错误的要求与检查项,并根据对象用途指导命名、共享设置、名称字段和功能配置。

主要功能

  1. 01自定义对象 XML 生成规则
  2. 02共享模型决策逻辑
  3. 03文本或自动编号名称字段
  4. 04面向用户的功能设置
  5. 05命名与关系约束
  6. 06生成前核对清单

适用场景

  1. 01创建 Salesforce 自定义对象
  2. 02配置对象共享行为
  3. 03准备对象元数据以供部署
  4. 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/SQLSelect、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 名称一致?

评论

支持 Markdown