自定义对象
另有 28 种语言版本
English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

第 3 个模块,共 10 个,属于 Data Architect 课程第 3 章Salesforce 数据架构。每个模块都可以单独阅读。 上一篇:看向母舰:标准数据模型 · 下一篇:这些数据放在哪里?
**本模块回答的问题:**当 Salesforce 没有你需要的东西时,你自己构建一个对象,实际上会得到什么?
在上一个模块里,我们看了 Salesforce 已经构建好的东西。有时候它没有你需要的东西。Steve Trucking 经营卡车,而 Salesforce 没有标准的卡车对象。所以你自己构建一个:一个自定义对象。
这是我希望你在这个模块里看到的。自定义对象是在元数据中创建的,就像模块 1 里讲的其他一切一样,而它一存在,就自带一套标准功能。它不是一张空白的表。而你为创建它而填写的那个界面,正在问你架构问题,不管你有没有注意到。
New Custom Object 界面
Section titled “New Custom Object 界面 ”进入设置 → 对象管理器 → Create → Custom Object,你会看到一张很长的表单。大多数人填完前两个框就点保存。我们放慢速度,把它读一遍。
Label 和 Plural Label(标签和复数标签)。“Truck”和“Trucks”。这些是用户看到的,出现在选项卡、页面布局和报表里。以后修改它们不会太痛苦。
Object Name(对象名称)。这一个不一样:它是 API 名称,是代码、集成、报表以及现在的智能体所使用的名称。输入“Truck”,Salesforce 就会把它变成 Truck__c。以后修改它,意味着要找出所有引用它的地方,这又是第 1 章里的可逆性测试。第一次就把它定对。
Description(描述)。把它填上。每一次都要填。在模块 1 里我说过,元数据不再只是装饰:下一位管理员会读它,每一个试图理解你 org 的 AI 工具也会读它。一个描述为空的自定义对象,就是一个没贴标签的箱子。
Record Name(记录名称)。每个自定义对象都有一个名称字段,你在这里决定它是什么。一个文本(Text)名称,比如“Truck 117”,或者一个自动编号(Auto Number),比如 T-000184,由 Salesforce 替你填写。读一读那个界面上的警告:如果你打算通过 API 插入大量记录,Salesforce 会告诉你使用文本。这是在你还没创建一条记录之前,平台就在告诉你一些关于规模的事。

Salesforce 设置,New Custom Object:Record Name 部分及其警告(截图,2026-10-12)。 查看大图
Optional Features(可选功能)。Allow Reports、Allow Activities、Track Field History、Allow in Chatter Groups。默认都是关闭的。每一项都是你为这个对象打开的一项能力;要有意识地决定。
Object Classification(对象分类)。Allow Sharing、Allow Bulk API Access、Allow Streaming API Access,默认都是打开的。界面说得很直白:这些打开时,对象是 Enterprise Application 对象;关闭时,它是 Light Application 对象。这些名称与 Salesforce 的应用订阅许可相对应:Lightning Platform Light App 没有记录级共享,也不能使用 Bulk API 或 Streaming API,而 Enterprise App 可以。我的建议:除非你确切知道为什么不要,否则让它们保持打开。如果你在一个以后要大批量加载数据的对象上关闭了 Bulk API 访问,你就会明白它为什么重要了。
Deployment Status(部署状态)和 Search(搜索)。“In Development”会在你构建时对用户隐藏这个对象;“Deployed”则让它上线。而 Allow Search(允许搜索)默认是关闭的,所以在你把它打开之前,用户在全局搜索里找不到这些记录。这一点每次都会让人中招。

默认设置:三项 API 设置打开、Deployed、Allow Search 关闭(截图,2026-10-12)。 查看大图
点击保存,对象管理器就会向你展示这个对象:API 名称 Truck__c、Custom 处打了勾、各个标签、部署状态。不过,看看左侧那一栏:Fields & Relationships、Page Layouts、Lightning Record Pages、Record Types、Validation Rules、Triggers、Flow Triggers、Object Access、Field Access。这个列表就是把模块 1 变得看得见。对象不只是存储;它是所有这些行为挂靠的地方。

对象管理器,Truck:API 名称 Truck__c、Custom,以及挂在一个对象上的所有东西(截图,2026-10-12)。 查看大图
那些不是你创建的字段
Section titled “那些不是你创建的字段 ”在一个全新的自定义对象上打开 Fields & Relationships,它已经有字段了。每个自定义对象都会得到一套标准字段:
- Name(名称),也就是你刚刚选定的记录名称,用在页面布局、相关列表、查找和搜索结果里。
- Owner(所有人),拥有这条记录的用户或队列。
- Created By(创建人)和 Last Modified By(上次修改人),创建它以及最后修改它的用户。
- Currency(币种),如果启用了多币种;以及 Division(部门),如果你的 org 使用部门。
而在底层,还有模块 1 里讲过的记录 ID,以及创建日期和修改日期。用 Data Loader 导出几条记录,你就能看到它们全部。
其中有一个可能会消失。把你的自定义对象设为主从关系中的从对象一方,Owner 字段就会消失:所有权改为来自主记录。这件事比听起来更重要,我们会在模块 7 和模块 8 里再回到它。
前缀和后缀:你看到的是什么
Section titled “前缀和后缀:你看到的是什么 ”在上一个模块里我说过,标准对象没有前缀也没有后缀。其他一切都有,而一旦你能读懂它们,一个字段列表就能准确告诉你你看到的是什么。
| 它看起来是什么样 | 它是什么 |
|---|---|
Account、Case | 标准对象或标准字段:没有前缀,没有后缀 |
Truck__c | 自定义对象,或者自定义字段,比如 Unit_Number__c |
abc__Inspection__c | 来自托管软件包的自定义对象:abc 是供应商的命名空间 |
Delivery_History__b | 大对象(模块 4) |
Shipment__x | 外部对象:数据存放在另一个系统里(模块 4) |
Allergies__pc | 个人客户上的自定义联系人字段(模块 2) |
Truck__r | 在查询中沿着自定义查找关系走时,它背后的那个关系 |
有几点需要注意。
到这里,这还只是一个列表。下面是我的讲法:把它当作几层来看。对象有三种:标准对象、自定义对象和托管软件包对象,而每一种上面都可以有同样几类字段:它自带的标准字段,以及某个人添加的自定义字段。
标准对象。Account 没有前缀也没有后缀,它的标准字段也没有:Name、Industry、OwnerId。你可以给大多数标准对象添加自定义字段,而你添加的每一个都以 __c 结尾:Region__c(Custom Fields (opens in a new tab),英文)。正是这个后缀保护了你。Salesforce 会在它的版本中给客户对象添加新的标准字段,而因为你的字段总是以 __c 结尾,它们的永远不会,所以未来的标准字段永远不会和你已有的字段冲突。
**自定义对象。**你自己的对象以 __c 结尾,比如 Truck__c(Custom Objects (opens in a new tab),英文),你放在它上面的自定义字段也一样:Unit_Number__c。但它与生俱来的那些字段,也就是上一节讲的那些,是标准字段:Name、OwnerId、CreatedDate,没有后缀。所以即使在你自己的对象上,后缀也能告诉你每个字段是谁创建的。
托管软件包对象。当你从 AppExchange 安装一个托管软件包时,它的对象和字段都带有供应商的命名空间前缀:abc__Inspection__c,以及像 abc__Result__c 这样的字段。这个前缀是供应商独有的,而且不会改变(Namespace Prefix (opens in a new tab),英文)。用 Salesforce 自己的话说,前缀会被添加到每个组件上,让它独一无二:name__c 变成 prefix__name__c(AppExchange Object Prefixes and the API (opens in a new tab),英文)。所以两个供应商可以都发布一个叫 Invoice__c 的对象,彼此之间、和你之间都永远不会冲突。软件包的对象仍然有它们的标准字段 Name 和 OwnerId,不带前缀。软件包也可以给标准对象添加它自己带前缀的字段,比如客户上的 abc__Score__c。而你也可以给软件包的对象添加你自己的自定义字段:abc__Inspection__c 上的 Depot__c 带的是你的 __c 后缀,但永远不会带供应商的前缀,因为它是你创建的,不是他们创建的(Known Issue: unmanaged custom field on a managed package object (opens in a new tab),英文)。
读任何一个 API 名称,你都知道它是谁创建的。没有后缀:Salesforce。有 __c 但没有前缀:你的 org。前面有 abc__:供应商。每次你计划一项变更时,这都很重要。你的东西,你可以改。Salesforce 的东西,你可以配置和扩展。供应商的东西大多是锁定的:少数几样,比如页面布局和帮助文本,可以由你编辑,但软件包的大部分内容以及每一个 API 名称都属于供应商,他们的升级会带来他们的变更(Editable Properties After Package Promotion or Installation (opens in a new tab),英文)。
**非托管软件包没有前缀。**安装一个非托管软件包,它的对象就会落进你的 org,就好像是你自己构建的一样,没有前缀。如果它带来一个 Truck__c,而你已经有一个了,你就遇到了名称冲突。安装之前先检查。
只构建 Salesforce 没有的东西
Section titled “只构建 Salesforce 没有的东西 ”创建自定义对象很容易;正因为如此,我认为我们创建得太多了。New Custom Object 界面会很乐意在一个已经有客户对象的 org 里为你创建一个 Customer__c。所以在你点下去之前,先问上一个模块里的那个问题:**母舰是不是已经有这个了?**如果有,就用它。如果没有,就构建它,并且像架构师一样把整个界面填完。
下一个模块会问一个更早的问题:这些数据到底应不应该放在 Salesforce 里?
架构师在这里决定什么
Section titled “架构师在这里决定什么 ”- 在构建自定义对象之前,Salesforce 是否已经有一个标准对象可以做这件事。
- API 名称,一次定好;以及一段为人和机器而写的描述。
- 记录名称:文本还是自动编号,同时考虑你预期的数据量。
- 要打开哪些可选功能、API 访问和搜索,有意识地决定。
- 一个 org 里的后缀告诉你什么:自定义、托管、大对象、外部对象、个人客户。
- 你即将安装的软件包是否可能和你已经构建的东西冲突。
- Custom Objects (opens in a new tab) 和 Custom Fields (opens in a new tab),Object Reference(英文,查阅日期 2026-10-13):“自定义对象的名称带有一个后缀,由两个下划线和一个小写的‘c’组成”;自定义字段也一样;以及支持自定义字段的标准对象一览表。
- AppExchange Object Prefixes and the API (opens in a new tab),Object Reference(英文,查阅日期 2026-10-13):命名空间前缀让每个打包的组件独一无二;“name__c 变成 prefix__name__c”。
- Namespace Prefix (opens in a new tab),Apex Developer Guide(英文,查阅日期 2026-10-13):命名空间前缀让托管软件包的对象和字段名称与其他 org 的区分开来。
- Editable Properties After Package Promotion or Installation (opens in a new tab),Second-Generation Managed Packaging Developer Guide(英文,查阅日期 2026-10-13):软件包组件的哪些属性可以由开发者、订阅者、双方编辑,或者都不能编辑。
- Custom Object Standard Fields (opens in a new tab),Salesforce Help(英文,查阅日期 2026-10-12):每个自定义对象都会得到的标准字段(Name、Owner、Created By、Last Modified By、Currency、Division),以及为什么在主从关系的从对象一方会移除 Owner。
- Standard User Licenses (opens in a new tab),Salesforce Help(英文,查阅日期 2026-10-12):Lightning Platform Light App “不能使用 Bulk API 或 Streaming API”;Enterprise App “支持记录级共享,可以使用 Bulk API 和 Streaming API”。
