Skip to content

自訂物件

另有 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)

In a truck body shop, a custom white box body hangs on chains above a standard truck chassis, already fitted with its doors, lights and mud flaps.
圖片由 AI 生成

第 3 個模組,共 10 個,屬於 Data Architect 課程第 3 章Salesforce 資料架構。每個模組都可以單獨閱讀。 上一篇:看向母艦:標準資料模型 · 下一篇:這些資料放在哪裡?

**本模組回答的問題:**當 Salesforce 沒有你需要的東西時,你自己構建一個物件,實際上會得到什麼?

在上一個模組裡,我們看了 Salesforce 已經構建好的東西。有時候它沒有你需要的東西。Steve Trucking 經營卡車,而 Salesforce 沒有標準的卡車物件。所以你自己構建一個:一個自訂物件。

這是我希望你在這個模組裡看到的。自訂物件是在後設資料中建立的,就像模組 1 裡講的其他一切一樣,而它一存在,就自帶一套標準功能。它不是一張空白的表。而你為建立它而填寫的那個介面,正在問你架構問題,不管你有沒有注意到。

進入設定 → 物件管理員 → 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 會告訴你使用文字。這是在你還沒建立一條記錄之前,平台就在告訴你一些關於規模的事。

New Custom Object 介面的 Record Name 部分:Record Name 框、資料類型為 Text,以及如果你打算通過 API 插入大量記錄就使用 Text 資料類型的警告

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(允許搜尋)預設是關閉的,所以在你把它開啟之前,使用者在全域搜尋裡找不到這些記錄。這一點每次都會讓人中招。

Object Classification、Deployment Status 和 Search Status 部分:Allow Sharing、Allow Bulk API Access 和 Allow Streaming API Access 已勾選;已選擇 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 Name 為 Truck__c、已勾選 Custom、單數和複數標籤,以及左側從 Fields & Relationships 到 Validation Rules 的清單

物件管理員,Truck:API 名稱 Truck__c、Custom,以及掛在一個物件上的所有東西(截圖,2026-10-12)。 檢視大圖

在一個全新的自訂物件上開啟 Fields & Relationships,它已經有欄位了。每個自訂物件都會得到一套標準欄位:

  • Name(名稱),也就是你剛剛選定的記錄名稱,用在頁面配置、相關清單、查閱和搜尋結果裡。
  • Owner(所有人),擁有這條記錄的使用者或佇列。
  • Created By(建立人)和 Last Modified By(上次修改人),建立它以及最後修改它的使用者。
  • Currency(幣種),如果啟用了多幣種;以及 Division(部門),如果你的 org 使用部門。

而在底層,還有模組 1 裡講過的記錄 ID,以及建立日期和修改日期。用 Data Loader 匯出幾條記錄,你就能看到它們全部。

其中有一個可能會消失。把你的自訂物件設為主要-詳細資料關係中的從物件一方,Owner 欄位就會消失:所有權改為來自主記錄。這件事比聽起來更重要,我們會在模組 7 和模組 8 裡再回到它。

在上一個模組裡我說過,標準物件沒有字首也沒有後綴。其他一切都有,而一旦你能讀懂它們,一個欄位清單就能準確告訴你你看到的是什麼。

它看起來是什麼樣它是什麼
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),英文)。

讀懂名稱 三種物件,每一種都按同樣的四層來讀。標準物件,由 Salesforce 建立:Account;它的標準欄位,例如 Name、OwnerId 和 Industry,沒有字尾;受管理套件可以加入自己的欄位,例如 abc__Score__c;你的自訂欄位以 __c 結尾,例如 Region__c。自訂物件,由你建立:Truck__c;它的標準欄位 Name、OwnerId 和 CreatedDate 沒有字尾;沒有套件欄位,因為物件是你的;你的自訂欄位以 __c 結尾,例如 Unit_Number__c。受管理套件物件,從供應商 abc 安裝:abc__Inspection__c;它的標準欄位沒有字首;套件自己的欄位帶有字首,例如 abc__Result__c;而你加入的欄位,例如 Depot__c,用你的 __c 字尾,但絕不用供應商的字首。底部註明:無字尾是 Salesforce 的,__c 是自訂的,abc__ 是供應商的,而且永遠不變。 標準物件 由 Salesforce 建立 物件本身 Account 它的標準欄位 Name、OwnerId、Industry:無字尾 套件的欄位 abc__Score__c,若有套件新增 你的自訂欄位 Region__c 自訂物件 由你建立 物件本身 Truck__c 它的標準欄位 Name、OwnerId、CreatedDate:無字尾 套件的欄位 無:物件是你的 你的自訂欄位 Unit_Number__c 受管理套件物件 已安裝,來自供應商 abc 物件本身 abc__Inspection__c 它的標準欄位 Name、OwnerId、CreatedDate:無字首 套件的欄位 abc__Result__c 你的自訂欄位 Depot__c:用你的字尾,絕不用他們的字首 無字尾:Salesforce 的。__c:自訂。abc__:供應商的,而且永遠不變。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

讀任何一個 API 名稱,你都知道它是誰建立的。沒有後綴:Salesforce。有 __c 但沒有字首:你的 org。前面有 abc__:供應商。每次你計劃一項變更時,這都很重要。你的東西,你可以改。Salesforce 的東西,你可以配置和擴充套件。供應商的東西大多是鎖定的:少數幾樣,比如頁面配置和幫助文字,可以由你編輯,但軟體包的大部分內容以及每一個 API 名稱都屬於供應商,他們的升級會帶來他們的變更(Editable Properties After Package Promotion or Installation (opens in a new tab),英文)。

**非託管軟體包沒有字首。**安裝一個非託管軟體包,它的物件就會落進你的 org,就好像是你自己構建的一樣,沒有字首。如果它帶來一個 Truck__c,而你已經有一個了,你就遇到了名稱衝突。安裝之前先檢查。

建立自訂物件很容易;正因為如此,我認為我們建立得太多了。New Custom Object 介面會很樂意在一個已經有客戶物件的 org 裡為你建立一個 Customer__c。所以在你點下去之前,先問上一個模組裡的那個問題:**母艦是不是已經有這個了?**如果有,就用它。如果沒有,就構建它,並且像架構師一樣把整個介面填完。

下一個模組會問一個更早的問題:這些資料到底應不應該放在 Salesforce 裡?

  • 在構建自訂物件之前,Salesforce 是否已經有一個標準物件可以做這件事。
  • API 名稱,一次定好;以及一段為人和機器而寫的描述。
  • 記錄名稱:文字還是自動編號,同時考慮你預期的資料量。
  • 要開啟哪些可選功能、API 存取和搜尋,有意識地決定。
  • 一個 org 裡的字尾告訴你什麼:自訂、託管、大物件、外部物件、個人帳戶。
  • 你即將安裝的軟體包是否可能和你已經構建的東西衝突。