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

Modul 3 dari 10 dalam bab Arsitektur Data Salesforce, bab 3 kursus Data Architect. Setiap modul dapat dibaca secara mandiri. Sebelumnya: Lihat ke Kapal Induk: Model Data Standar · Berikutnya: Di Mana Data Ini Tinggal?
Pertanyaan yang dijawab modul ini: Ketika Salesforce tidak memilikinya, apa yang sebenarnya Anda dapatkan saat membangun objek Anda sendiri?
Di modul sebelumnya kita melihat apa yang sudah dibangun Salesforce. Kadang ia tidak punya yang Anda butuhkan. Steve Trucking mengoperasikan truk, dan tidak ada objek standar Truk. Jadi Anda membangunnya: sebuah objek kustom.
Inilah yang ingin saya tunjukkan di modul ini. Sebuah objek kustom dibuat di metadata, seperti semua hal lain di modul 1, dan begitu objek itu ada, ia langsung datang dengan seperangkat fungsionalitas standar. Ia bukan tabel kosong. Dan layar yang Anda isi untuk membuatnya sebenarnya sedang mengajukan pertanyaan-pertanyaan arsitektur kepada Anda, Anda sadari atau tidak.
Layar New Custom Object
Section titled “Layar New Custom Object ”Buka Setup → Object Manager → Create → Custom Object dan Anda mendapat satu formulir panjang (layar New Custom Object, objek kustom baru). Kebanyakan orang mengisi dua kotak pertama lalu mengeklik Save. Mari kita pelan-pelan dan membacanya.
Label and Plural Label (label tunggal dan jamak). “Truck” dan “Trucks”. Inilah yang dilihat pengguna, di tab, tata letak halaman, dan laporan. Anda bisa mengubahnya nanti tanpa banyak kesulitan.
Object Name (nama objek). Yang ini berbeda: ini adalah nama API, nama yang dipakai kode, integrasi, laporan, dan sekarang juga agen. Ketik “Truck” dan Salesforce menjadikannya Truck__c. Mengubahnya nanti berarti mencari semua hal yang merujuk kepadanya, dan itu lagi-lagi Uji Reversibilitas dari bab 1. Pastikan yang satu ini benar sejak pertama kali.
Description (deskripsi). Isilah. Setiap kali. Di modul 1 saya bilang metadata bukan lagi hiasan: admin berikutnya membacanya, begitu pula setiap alat AI yang mencoba memahami org Anda. Objek kustom dengan deskripsi kosong adalah kotak tanpa label.
Record Name (nama rekaman). Setiap objek kustom punya bidang Name, dan di sinilah Anda menentukan isinya. Nama Text, seperti “Truck 117”, atau Auto Number (Penomoran Otomatis), seperti T-000184, yang diisi Salesforce untuk Anda. Baca peringatan di layar itu: jika Anda berencana menyisipkan rekaman dalam volume tinggi melalui API, Salesforce menyuruh Anda memakai Text. Itulah platform yang memberi tahu Anda sesuatu tentang skala sebelum Anda membuat satu rekaman pun.

Salesforce Setup, New Custom Object: bagian Record Name, dengan peringatannya (tangkapan layar, 2026-10-12). Ukuran penuh
Optional Features (fitur opsional). Allow Reports, Allow Activities, Track Field History, Allow in Chatter Groups. Nonaktif secara default. Masing-masing adalah kemampuan yang Anda nyalakan untuk objek ini; putuskan dengan sengaja.
Object Classification (klasifikasi objek). Allow Sharing, Allow Bulk API Access, Allow Streaming API Access, semuanya aktif secara default. Layar itu mengatakannya dengan gamblang: jika ketiganya aktif, objek itu adalah objek Enterprise Application; jika nonaktif, ia adalah objek Light Application. Nama-nama itu sejalan dengan lisensi langganan aplikasi Salesforce: Lightning Platform Light App tidak punya berbagi di tingkat rekaman dan tidak bisa memakai Bulk API atau Streaming API, sedangkan Enterprise App bisa. Saran saya: biarkan aktif kecuali Anda tahu persis alasan untuk tidak melakukannya. Matikan akses Bulk API pada objek yang nanti akan Anda muat dalam volume besar, dan Anda akan tahu mengapa itu penting.
Deployment Status and Search (status deployment dan pencarian). “In Development” menyembunyikan objek dari pengguna selama Anda membangunnya; “Deployed” membuatnya aktif. Dan Allow Search (izinkan pencarian) nonaktif secara default, jadi pengguna tidak akan menemukan rekaman-rekaman ini di pencarian global sampai Anda menyalakannya. Yang satu itu menjebak orang setiap kali.

Nilai default-nya: tiga pengaturan API aktif, Deployed, dan Allow Search nonaktif (tangkapan layar, 2026-10-12). Ukuran penuh
Klik Save, dan Manajer Objek (Object Manager) menampilkan objek Anda: nama API Truck__c, tanda centang di Custom, label-labelnya, status deployment-nya. Tetapi lihatlah daftar di sisi kiri: Fields & Relationships, Page Layouts, Lightning Record Pages, Record Types, Validation Rules, Triggers, Flow Triggers, Object Access, Field Access. Daftar itu adalah modul 1 yang terlihat oleh mata. Sebuah objek bukan sekadar tempat penyimpanan; ia adalah tempat seluruh perilaku itu bergantung.

Object Manager, Truck: nama API Truck__c, Custom, dan semua yang bergantung pada sebuah objek (tangkapan layar, 2026-10-12). Ukuran penuh
Bidang yang Tidak Anda Buat
Section titled “Bidang yang Tidak Anda Buat ”Buka Fields & Relationships pada objek kustom yang baru saja dibuat, dan ia sudah punya bidang. Setiap objek kustom mendapat seperangkat bidang standar:
- Name, nama rekaman yang baru saja Anda pilih, dipakai di tata letak halaman, daftar terkait, lookup, dan hasil pencarian.
- Owner, pengguna atau antrean (queue) yang memiliki rekaman itu.
- Created By dan Last Modified By, pengguna yang membuat dan terakhir mengubahnya.
- Currency, jika multi-mata uang aktif, dan Division, jika org Anda memakai divisi.
Dan di baliknya, record ID dari modul 1, serta tanggal dibuat dan tanggal diubah. Ekspor beberapa rekaman dengan Data Loader dan Anda akan melihat semuanya.
Salah satunya bisa menghilang. Jadikan objek kustom Anda sisi detail dari sebuah hubungan master-detail, dan bidang Owner hilang: kepemilikan justru datang dari rekaman master. Itu lebih penting daripada kedengarannya, dan kita akan kembali ke sana di modul 7 dan 8.
Awalan dan Akhiran: Apa yang Sedang Anda Lihat
Section titled “Awalan dan Akhiran: Apa yang Sedang Anda Lihat ”Di modul sebelumnya saya bilang objek standar tidak punya awalan maupun akhiran. Semua yang lain punya, dan begitu Anda bisa membacanya, sebuah daftar bidang memberi tahu Anda persis apa yang sedang Anda lihat.
| Bentuknya | Artinya |
|---|---|
Account, Case | Objek atau bidang standar: tanpa awalan, tanpa akhiran |
Truck__c | Objek kustom, atau bidang kustom, seperti Unit_Number__c |
abc__Inspection__c | Objek kustom dari sebuah managed package: abc adalah namespace milik vendor |
Delivery_History__b | Sebuah big object (modul 4) |
Shipment__x | Sebuah objek eksternal: datanya tinggal di sistem lain (modul 4) |
Allergies__pc | Bidang kontak kustom pada akun pribadi (modul 2) |
Truck__r | Hubungan di balik lookup kustom, saat Anda menelusurinya dalam sebuah query |
Beberapa hal yang perlu diperhatikan.
Sejauh ini itu baru sebuah daftar. Beginilah cara saya mengajarkannya: sebagai lapisan. Ada tiga jenis objek, standar, kustom, dan managed package, dan masing-masing bisa punya jenis bidang yang sama: bidang standar bawaannya, dan bidang kustom yang ditambahkan seseorang.
Objek standar. Account tidak punya awalan maupun akhiran, begitu pula bidang-bidang standarnya: Name, Industry, OwnerId. Anda bisa menambahkan bidang kustom ke sebagian besar objek standar, dan setiap bidang yang Anda tambahkan berakhiran __c: Region__c (Custom Fields (opens in a new tab)). Akhiran itulah yang menjaga Anda tetap aman. Salesforce menambahkan bidang standar baru ke Account dalam rilis-rilisnya, dan karena milik Anda selalu berakhiran __c dan milik mereka tidak pernah, bidang standar di masa depan tidak akan pernah bertabrakan dengan bidang yang sudah Anda miliki.
Objek kustom. Objek Anda sendiri berakhiran __c, Truck__c (Custom Objects (opens in a new tab)), begitu pula bidang kustom yang Anda pasang di atasnya: Unit_Number__c. Tetapi bidang-bidang bawaannya sejak lahir, yang dari bagian sebelumnya, adalah bidang standar: Name, OwnerId, CreatedDate, tanpa akhiran. Jadi bahkan pada objek Anda sendiri, akhiran memberi tahu Anda siapa yang membuat setiap bidang.
Objek managed package. Saat Anda memasang managed package dari AppExchange, objek dan bidangnya datang dengan awalan namespace milik vendor: abc__Inspection__c, dan bidang seperti abc__Result__c. Awalan itu unik untuk vendor tersebut, dan tidak berubah (Namespace Prefix (opens in a new tab)). Menurut Salesforce sendiri, awalan itu ditambahkan ke setiap komponen agar unik: name__c menjadi prefix__name__c (AppExchange Object Prefixes and the API (opens in a new tab)). Jadi dua vendor sama-sama bisa mengirimkan objek bernama Invoice__c dan tidak pernah bertabrakan satu sama lain, maupun dengan Anda. Objek-objek paket itu tetap punya bidang standarnya, Name dan OwnerId, tanpa awalan. Sebuah paket juga bisa menambahkan bidang berawalannya sendiri ke objek standar, seperti abc__Score__c pada Account. Dan Anda bisa menambahkan bidang kustom Anda sendiri ke objek sebuah paket: Depot__c pada abc__Inspection__c memakai akhiran __c Anda, tetapi tidak pernah awalan vendor, karena Anda yang membuatnya, bukan mereka (Known Issue: unmanaged custom field on a managed package object (opens in a new tab)).
Baca nama API apa pun dan Anda tahu siapa yang membuatnya. Tanpa akhiran: Salesforce. __c tanpa awalan: org Anda. abc__ di depan: vendor. Itu penting setiap kali Anda merencanakan perubahan. Yang milik Anda, bisa Anda ubah. Yang milik Salesforce, Anda konfigurasikan dan perluas. Yang milik vendor sebagian besar terkunci: beberapa hal, seperti tata letak halaman dan teks bantuan, boleh Anda edit, tetapi sebagian besar paket, dan setiap nama API, adalah milik vendor, dan pembaruan mereka membawa perubahan mereka (Editable Properties After Package Promotion or Installation (opens in a new tab)).
Unmanaged package tidak begitu. Pasang sebuah unmanaged package, dan objek-objeknya mendarat di org Anda seolah-olah Anda sendiri yang membangunnya, tanpa awalan. Jika paket itu membawa Truck__c dan Anda sudah punya satu, terjadilah tabrakan nama. Periksa sebelum memasang.
Bangun Hanya yang Tidak Dimiliki Salesforce
Section titled “Bangun Hanya yang Tidak Dimiliki Salesforce ”Membuat objek kustom itu mudah; justru karena itulah menurut saya kita membuat terlalu banyak. Layar New Custom Object dengan senang hati akan membuatkan Anda Customer__c di org yang sudah punya Account. Jadi sebelum mengekliknya, ajukan pertanyaan dari modul sebelumnya: apakah kapal induk sudah punya ini? Jika sudah, pakailah. Jika belum, bangunlah, dan isi seluruh layar itu seperti seorang arsitek.
Modul berikutnya mengajukan pertanyaan yang lebih awal lagi: apakah data ini seharusnya ada di Salesforce sama sekali?
Yang Diputuskan Arsitek di Sini
Section titled “Yang Diputuskan Arsitek di Sini ”- Apakah Salesforce sudah punya objek standar untuk ini, sebelum membangun objek kustom.
- Nama API, dipilih sekali, dan deskripsi yang ditulis untuk manusia dan mesin.
- Nama rekaman: Text atau Auto Number, dengan mempertimbangkan volume yang Anda perkirakan.
- Fitur opsional, akses API, dan pencarian mana yang dinyalakan, dengan sengaja.
- Apa yang diberitahukan akhiran-akhiran di sebuah org: kustom, managed, big, eksternal, akun pribadi.
- Apakah paket yang akan Anda pasang bisa bertabrakan dengan apa yang sudah Anda bangun.
Jelajahi
Section titled “Jelajahi ”- Custom Objects (opens in a new tab) dan Custom Fields (opens in a new tab), Object Reference (dicek 2026-10-13, bahasa Inggris): “the names of custom objects include a suffix of two underscores followed by a lowercase ‘c’” (nama objek kustom memakai akhiran dua garis bawah diikuti huruf kecil “c”); hal yang sama berlaku untuk bidang kustom; serta tabel objek standar yang mendukung bidang kustom.
- AppExchange Object Prefixes and the API (opens in a new tab), Object Reference (dicek 2026-10-13, bahasa Inggris): awalan namespace membuat setiap komponen dalam paket menjadi unik; “name__c becomes prefix__name__c” (name__c menjadi prefix__name__c).
- Namespace Prefix (opens in a new tab), Apex Developer Guide (dicek 2026-10-13, bahasa Inggris): awalan namespace memisahkan nama objek dan bidang managed package dari nama milik org lain.
- Editable Properties After Package Promotion or Installation (opens in a new tab), Second-Generation Managed Packaging Developer Guide (dicek 2026-10-13, bahasa Inggris): properti komponen paket mana yang bisa diedit oleh pengembang, oleh pelanggan, oleh keduanya, atau tidak oleh siapa pun.
- Custom Object Standard Fields (opens in a new tab), Bantuan Salesforce (dicek 2026-10-12, bahasa Inggris): bidang standar yang didapat setiap objek kustom (Name, Owner, Created By, Last Modified By, Currency, Division), dan mengapa Owner dihapus pada sisi detail sebuah hubungan master-detail.
- Standard User Licenses (opens in a new tab), Bantuan Salesforce (dicek 2026-10-12, bahasa Inggris): Lightning Platform Light App “can’t use the Bulk API or Streaming API” (tidak bisa memakai Bulk API atau Streaming API); Enterprise App “supports record-level sharing, can use the Bulk API and Streaming API” (mendukung berbagi di tingkat rekaman, bisa memakai Bulk API dan Streaming API).
