Lewati ke konten

Bidang Juga Bagian dari Arsitektur

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)

A wooden shape-sorter block with round, square, triangular and star holes, the matching pieces beside it and the star resting by its hole.
Gambar dibuat dengan AI

Modul 6 dari 10 dalam bab Arsitektur Data Salesforce, bab 3 kursus Data Architect. Setiap modul dapat dibaca secara mandiri. Sebelumnya: Pilih Objek yang Tepat · Berikutnya: Hubungan Punya Konsekuensi

Pertanyaan yang dijawab modul ini: Bagaimana Salesforce seharusnya merepresentasikan setiap potongan data secara fisik?

Membuat sebuah bidang butuh sekitar satu menit. New Field, pilih tipe, beri nama, Next, Next, Save. Justru itulah sebabnya bidang tidak diperlakukan sebagai arsitektur.

Masuklah ke org yang sudah berumur sepuluh tahun dan buka Akun. Lima ratus bidang. Status2__c, Legacy_Status__c, Old_Status__c, Status_New__c. Tiga nomor pelanggan yang berbeda. Sebuah kotak centang yang tidak berani dihapus siapa pun karena tidak ada yang tahu integrasi mana yang masih memakainya. Membuat bidangnya butuh semenit. Hidup bersamanya butuh bertahun-tahun. Jadi gagasan modul ini sederhana: sebuah bidang adalah keputusan arsitektur. Tidak selalu besar, tetapi setiap bidang menyandikan sesuatu tentang makna, perilaku, identitas, atau kualitas data, dan seperti objek, bidang mudah ditambahkan dan ternyata sulit dihapus.

Di bab 2 kita memberi entitas-entitas kita atribut: Pengiriman punya jendela waktu terjadwal, Truk punya VIN. Sekarang kita mengimplementasikannya, dan di sinilah orang langsung melompat ke “bidang teks.” Tunggu. Sebelum tipenya, saya ingin tahu apa arti datanya. Apakah ia angka, atau pengenal yang kebetulan berisi digit? Tanggal, atau sebuah momen waktu? Teks bebas, atau salah satu dari sekumpulan nilai yang disetujui? Dimasukkan oleh orang, atau dimiliki sistem lain? Bisakah berubah? Haruskah unik? Bisakah kosong? Haruskah disimpan sama sekali, atau dihitung? Itu bukan pertanyaan Setup. Itu pertanyaan arsitektur data, dan tipe bidangnya datang setelah kita menjawabnya.

Steve Trucking memberi setiap truk nomor armada, misalnya 001247. Bidang Number? Kemungkinan besar tidak. Apakah kita menjumlahkan nomor armada? Apakah truk 1247 dikurangi truk 1246 sama dengan satu truk? Itu pengenal yang kebetulan berisi digit, dan bidang Number bahkan akan membuang nol di depannya. Hal yang sama berlaku untuk kode pos, kode produk, nomor rekening, dan nomor pelacakan. Wujud sebuah nilai tidak memberi tahu Anda artinya. Pilih tipe untuk perilaku yang Anda butuhkan, bukan berdasarkan wujud data contohnya.

Apakah Manusia Perlu Mengidentifikasinya?

Section titled “Apakah Manusia Perlu Mengidentifikasinya? ”

Setiap objek kustom mendapat bidang Name, dan keputusan pertamanya adalah teks atau penomoran otomatis. Saya bertanya: apakah manusia perlu mengidentifikasi hal ini? Orang mengenal Mitra Ritel dari namanya dan truk dari nomor armadanya. Tetapi manifes yang dihasilkan sistem setiap malam? Tidak seharusnya ada orang yang mengetik “Manifes 10-02 Nomor 3” hanya karena Salesforce mewajibkan Name. Beri penomoran otomatis. Hanya saja, jangan mencampuradukkan Name yang dihasilkan itu dengan identitas rekamannya: penomoran otomatis membantu pengguna, ID Salesforce mengidentifikasi rekaman, dan referensi manifes milik Mitra Ritel bisa mengidentifikasi hal yang sama lintas sistem. Tiga pekerjaan yang berbeda.

Pilih sebuah tipe, klik Next, dan Setup menanyakan detailnya. Inilah layar tempat sebagian besar keputusan di modul ini benar-benar dibuat, biasanya dengan terburu-buru.

New Custom Field (Bidang Kustom Baru), langkah 2: Description, Help Text, Required, Unique beserta pilihan peka huruf besar-kecilnya, External ID, Auto add to custom report types, dan Default Value

New Custom Field, langkah 2: detailnya (tangkapan layar, 2026-10-12). Ukuran penuh

Dua kotak terlihat mirip tetapi punya tugas berbeda. Description (deskripsi) untuk orang-orang yang memelihara org, dan kini untuk alat AI yang membacanya: apa arti bidang itu, siapa pemiliknya, dari mana asalnya. Help Text (teks bantuan) untuk pengguna di layar: apa yang harus diketik di sini. Isi keduanya. Lalu ada Required (wajib), Unique (unik), dan External ID, dan masing-masing layak mendapat bagiannya sendiri. Di bawahnya, Default Value (nilai bawaan) bisa berupa formula, sehingga rekaman baru bisa dimulai dengan nilai yang masuk akal alih-alih kosong.

Required Adalah Keputusan yang Lebih Besar daripada Kelihatannya

Section titled “Required Adalah Keputusan yang Lebih Besar daripada Kelihatannya ”

Ada kotak centang kecil di wizard bidang berlabel Required, dan seperti yang kita lihat di bab 1, ia bisa menjadi bom waktu. Anda sudah punya sebuah objek selama lima tahun dengan dua juta rekaman, dan sekarang seseorang memutuskan bahwa sebuah bidang baru harus selalu punya nilai. Bagaimana dengan dua juta rekaman yang lebih tua darinya? Integrasi yang tidak mengirimnya? Otomatisasi yang membuat rekaman sebelum nilainya diketahui? Proses di mana nilainya baru muncul tiga langkah kemudian?

“Required” terdengar seperti keputusan kualitas data, dan kadang memang begitu. Tetapi kapan sebuah nilai diketahui adalah bagian dari proses bisnis. Jadi jangan mencentang Required karena seseorang bilang “kami selalu ingin itu ada.” Tanyakan kapan nilainya diketahui, siapa yang memberikannya, dan apa yang terjadi jika tidak ada. Kita akan menaruh ini di tangga konsistensi lengkap di modul 7.

Jika saya menandai sebuah bidang sebagai unik, saya membuat pernyataan tentang bisnis: bukan “biasanya tidak berulang,” melainkan “dua rekaman tidak boleh pernah punya nilai ini.” Itu kuat. Dan layarnya memaksa Anda memutuskan satu hal lagi: apakah “ABC” dan “abc” nilai yang sama atau berbeda? Tidak peka huruf besar-kecil (case-insensitive) adalah bawaan yang lebih aman untuk apa pun yang diketik manusia. Aturan kunci dari bab 2, unik, tidak berubah, tanpa makna, bukan PII, berlaku di sini. Jika seseorang bilang email karyawan itu unik, saya mulai bertanya: bisakah berubah, bisakah seseorang keluar lalu kembali, bisakah alamatnya dipakai ulang, apa yang terjadi setelah akuisisi? Email mungkin berguna, bahkan unik hari ini. Itu tidak menjadikannya pengenal yang baik.

Di sinilah External ID membuktikan manfaatnya. Layarnya menggambarkannya dengan baik: bidang itu menjadi “the unique record identifier from an external system” (pengenal rekaman unik dari sistem eksternal). ERP punya pelanggan 873492; Salesforce punya record ID-nya sendiri. Ketika ERP mengirim pembaruan, bagaimana kita tahu rekaman mana yang dimaksud? Tandai sebuah bidang sebagai External ID dan sebuah integrasi bisa melakukan upsert berdasarkan bidang itu: membuat rekaman jika belum ada, memperbaruinya jika sudah ada (Upsert a Record Using an External ID (opens in a new tab)). Dan ketika Anda memuat rekaman anak, Anda bisa menunjuk induknya melalui External ID-nya alih-alih mengkueri ID Salesforce-nya lebih dulu. Saya suka bilang Anda membiarkan Salesforce mencarikannya untuk Anda. Sangat ampuh.

Perhatikan bahwa nomor ERP tidak menjadi identitas rekaman Salesforce. Ia adalah atribut, dan satu rekaman bisa membawa beberapa: ID pelanggan ERP, ID lama, ID milik mitra. Itu wajar. Satu entitas bisnis bisa dikenal secara berbeda oleh beberapa sistem. Pertanyaan arsitekturnya adalah sistem mana yang memiliki setiap pengenal, dan janji apa yang dibuatnya: tandai unik hanya jika bisnis benar-benar menjaminnya.

Sekarang tipe-tipenya sendiri. Buka New Field di objek mana pun dan Setup menampilkan seluruh daftarnya, dikelompokkan seperti cara saya akan membahasnya: bidang yang dihitung Salesforce untuk Anda, bidang hubungan, lalu tipe-tipe data.

Daftar tipe data di layar New Custom Field, dikelompokkan: Auto Number, Formula, dan Roll-Up Summary; Lookup, Master-Detail, dan External Lookup Relationship; lalu Checkbox, Currency, Date, Date/Time, Email, Geolocation, Number, Percent, Phone, Picklist, Multi-Select Picklist, Text, Text Area, Long, Rich, dan Encrypted Text, Time, URL, dan Address

Setup, New Custom Field, langkah 1: tipe-tipe data (tangkapan layar, 2026-10-12). Ukuran penuh

Inilah seluruh daftarnya sekilas, dengan satu hal yang ingin saya Anda ingat tentang masing-masing.

KelompokTipeIngat
DihitungAuto NumberPaling banyak 30 karakter, 20 di antaranya untuk awalan atau akhiran; label untuk manusia, bukan pengenal rekaman
FormulaDihitung saat dibaca, tidak disimpan; 3.900 karakter
Roll-Up SummaryJumlah, total, minimum, atau maksimum dari rekaman detail; hanya master-detail
HubunganLookup, Master-Detail, External LookupModul 7
DataCheckboxBenar atau salah, dengan bawaan yang Anda pilih; null tetap bisa muncul di flow
Number, Percent, CurrencyAturan pembulatan; nol di depan dibuang; 15 angka desimal
Date, Date/Time, TimeSebuah hari, sebuah momen, atau jam dalam sehari; momen disimpan dalam UTC
Email, Phone, URLDiformat dan diperiksa saat disimpan: 80, 40, dan 255 karakter
Geolocation, AddressBidang majemuk yang memakan lebih dari satu bidang: 3 dan 9
Picklist, Multi-SelectKosakata terkendali, dimiliki oleh admin
Text, Text Area, Long, Rich, EncryptedSampai 255 di rekaman dan bisa diindeks; di atas itu, tanpa indeks atau pemfilteran

Auto Number (Penomoran Otomatis) memberi nomor berikutnya dalam sebuah urutan kepada setiap rekaman baru, dalam format yang Anda tentukan, seperti T-{000000}. Pakai ketika manusia butuh pegangan yang ramah dan tidak seorang pun seharusnya harus mengarangnya. Seluruh nilainya paling banyak 30 karakter, dan 20 di antaranya disediakan untuk awalan atau akhiran. Ingat saja dari bab 2: ia adalah label untuk manusia, bukan pengenal rekaman, dan nomornya tidak selalu berurutan dengan ketat.

Bidang Formula menghitung nilai dari bidang-bidang lain. Bidang ini ampuh, dan dihitung saat rekaman dibaca, bukan saat disimpan, jadi tidak ada yang tersimpan yang bisa basi. Anda memilih apa yang dikembalikan formula: checkbox, mata uang, tanggal, tanggal/waktu, angka, persen, teks, atau waktu.

Tipe hasil formula: Checkbox, Currency, Date, Date/Time, Number, Percent, Text, dan Time, masing-masing dengan contoh formula

New Custom Field, formula: memilih tipe hasil (tangkapan layar, 2026-10-12). Ukuran penuh

Lalu Anda menulis formulanya sendiri, dengan bidang, operator, dan fungsi, dan memeriksa sintaksnya. Perhatikan tombol Use Formula Assistant: AI Salesforce kini akan membantu Anda menulis formulanya. Pakailah, lalu baca apa yang ditulisnya. Andalah pemilik formula itu, bukan asistennya.

Editor formula: tab Simple Formula dan Advanced Formula, Insert Field, Use Formula Assistant, dan Insert Operator

Editor formula, dengan Formula Assistant (tangkapan layar, 2026-10-12). Ukuran penuh Sebuah formula bisa sampai 3.900 karakter, dan tidak boleh melebihi 15.000 byte saat disimpan atau dikompilasi; formula yang panjang bisa dipecah ke beberapa bidang formula yang saling merujuk. Area teks panjang, bidang terenkripsi, dan bidang Description tidak bisa dipakai di dalamnya.

Bidang Roll-Up Summary (ringkasan roll-up) berada di master dan menghitung jumlah, total, atau mengambil nilai minimum atau maksimum dari rekaman-rekaman detailnya. Bidang ini hanya bekerja melalui hubungan master-detail, yang merupakan salah satu alasan terbesar untuk memilih master-detail sama sekali. Kita akan kembali ke bidang ini, dan batasannya, di modul 7.

Apakah kita perlu menyimpan nilai ini sama sekali? Jika saya punya jumlah dan harga satuan, apakah seseorang, atau suatu otomatisasi, perlu memelihara totalnya? Mungkin sebuah formula sebaiknya menurunkannya: satu sumber untuk perhitungannya, dihitung ulang saat dibaca, jadi ubah jumlahnya dan jawabannya ikut berubah. Formula punya batasannya sendiri (ukuran saat disimpan dan panjang yang ditampilkan; Formula Field Limits and Restrictions (opens in a new tab)), dan formula yang rumit menjadi sulit dipelihara.

Tetapi kadang bisnis tidak menginginkan jawaban hari ini. Bisnis menginginkan jawaban sebagaimana adanya saat itu. Jika aturan diskon berubah tahun depan, haruskah faktur tahun lalu tiba-tiba menampilkan jumlah yang berbeda? Tentu tidak. Jadi pertanyaannya bukan “bisakah Salesforce menghitung ini?” Pertanyaannya adalah “apakah ini perhitungan saat ini atau fakta historis?” Fakta historis disimpan.

Hubungan Lookup, Master-Detail, dan External Lookup juga merupakan bidang, dan di sanalah garis-garis model Anda menjadi nyata. Lookup adalah tautan longgar; master-detail mengikat hidup, kepemilikan, dan keamanan anak pada induknya; external lookup menjangkau objek eksternal dari modul 4, mencocokkan berdasarkan External ID-nya. Memilih di antara ketiganya adalah keputusan yang cukup besar sehingga mendapat modulnya sendiri.

Checkbox (kotak centang) adalah bidang paling sederhana yang ada: benar atau salah, dicentang atau tidak. Ia sempurna untuk fakta ya/tidak tentang rekaman: Is Active, Install Required, Signed For. Ketika Anda membuatnya, Salesforce memaksa Anda memilih nilai bawaannya, dicentang atau tidak, dan itu keputusan sungguhan: itulah nilai awal setiap rekaman baru, termasuk rekaman yang dibuat integrasi tanpa mengirim bidang itu. Laporan dan tampilan daftar memfilternya sebagai True dan False; alat impor dan ekspor mingguan menampilkannya sebagai 1 dan 0.

Ada satu jebakan yang perlu diketahui. Bidang di rekaman punya dua nilai, tetapi otomatisasi di sekitarnya bisa punya nilai ketiga. Di sebuah flow, variabel checkbox yang tidak pernah diisi bernilai null, bukan false, dan menyimpannya ke rekaman akan gagal (Trailblazer Community (opens in a new tab); lihat juga known issue Salesforce W-11208535 (opens in a new tab)). Pilih nilai bawaan yang masuk akal, dan buat flow serta kode Anda menangani null dengan sengaja.

Number (angka) menyimpan bilangan real, dan membuang nol di depan, dan justru itulah sebabnya nomor armada seperti 001247 bukan Number. Salesforce membulatkan bidang angka setengah menjauhi nol (half away from zero): 12,345 menjadi 12,35, dan −12,345 menjadi −12,35. Dan di merge field, pembulatannya mengikuti lokal pengguna, bukan jumlah angka desimal yang Anda atur pada bidang.

Percent (persen) menyimpan desimal dan menampilkan persentase: masukkan 0,10 dan Anda melihat 10%. Nilainya kehilangan presisi setelah 15 angka desimal.

Currency (mata uang) diformat untuk uang, dan di org dengan beberapa mata uang ia membawa kode mata uangnya dan bisa memakai kurs; dengan advanced currency management (opens in a new tab), peluang bisa memakai kurs bertanggal (dated), yaitu kurs untuk periode saat kesepakatan ditutup. Hanya peluang dan hal-hal di sekitarnya (produk, jadwal, split, dan laporannya) yang memakai kurs bertanggal; bidang mata uang di objek lain tetap memakai satu kurs statis. Perhatikan pembulatannya: tanpa angka desimal, Salesforce sekadar memotongnya (23,5 menjadi 23); dengan satu angka desimal atau lebih, ia membulatkan setengah menjauhi nol.

Tiga tipe, tiga makna berbeda. Date (tanggal) adalah sebuah hari: kontrak berakhir pada suatu tanggal. Date/Time (tanggal/waktu) adalah sebuah momen: pengiriman tiba pukul 9:42 pagi itu. Time (waktu) adalah jam dalam sehari tanpa tanggal sama sekali: toko buka pukul 7:00, setiap hari.

Jebakannya ada pada momen. Salesforce menyimpan nilai tanggal/waktu dalam GMT (UTC). Waktu yang diketik pengguna dibaca dalam zona waktu pengguna itu, dikonversi, lalu disimpan; ketika seseorang membacanya, nilai itu dikonversi lagi ke zona waktu pembacanya. Sering kali itulah persis yang Anda inginkan. Tetapi inilah contoh yang saya berikan di kelas: seorang koordinator di Los Angeles mencatat pengiriman larut pada Minggu malam, pukul 22.00 waktu Pasifik. Di baliknya, Salesforce menyimpan Senin pagi, pukul 05.00 GMT. Laporan yang dikelompokkan per hari di zona waktu lain, atau integrasi yang membaca nilai mentahnya, bisa menaruh pengiriman hari Minggu itu di hari Senin. “Hari kejadiannya” bergantung pada jam siapa yang Anda tanya. Perhatikan zona waktu para pengguna, dan putuskan zona mana yang dimaksud bisnis.

Dan berhati-hatilah saat membandingkannya. Di baliknya, tanggal/waktu adalah satu angka besar: Apex membacanya sebagai jumlah milidetik sejak 1 Januari 1970, 00:00:00 GMT (Datetime Class (opens in a new tab)). Ia adalah momen yang presisi, bukan sebuah hari. Jadi menanyakan apakah dua tanggal/waktu sama (==) hampir tidak pernah menghasilkan yang Anda inginkan: 9:42:00 dan 9:42:01 tidak sama, begitu pula “Senin” dan momen apa pun pada hari Senin. Sebagai gantinya, tanyakan sebuah rentang: pada atau setelah awalnya (>=) dan pada atau sebelum akhirnya (<=). “Setiap pengiriman pada hari Senin” adalah setiap pengiriman >= Senin 00:00 dan <= Senin 23:59:59, dalam zona waktu yang sudah Anda putuskan sebagai yang dimaksud bisnis.

Dan satu hal yang menarik: Salesforce tidak bisa menyimpan sembarang tanggal. Tanggal yang valid berkisar dari 1 Januari 1700 sampai 31 Desember 4000, dan Salesforce memberikan rentang yang sama untuk tanggal maupun tanggal/waktu (Data Import Dates (opens in a new tab)). Bahkan batas-batasnya adalah momen dalam GMT, jadi bagi pengguna di zona waktu Pasifik, nilai valid paling awal adalah pukul 16.00 pada 31 Desember 1699. Tanggal pendirian perkumpulan sejarah Anda mungkin tidak bisa masuk. Dan trik klasik “tanpa tanggal akhir”, 31 Desember 9999, akan ditolak; jika Anda butuh placeholder di masa depan yang jauh, ia harus berada di tahun 4000 atau sebelumnya.

Inilah bidang-bidang yang diformat, dan bidang ini melakukan lebih dari sekadar menyimpan karakter. Email menampung paling banyak 80 karakter dan diperiksa formatnya; pada kontak dan prospek, mengkliknya akan memulai email ke alamat itu. Phone (telepon) menampung paling banyak 40 karakter, diformat sebagai nomor telepon, dan menjadi click-to-dial (klik untuk memanggil) ketika org punya sistem telepon yang terhubung. URL menampung paling banyak 255 karakter dan terbuka sebagai tautan. Itulah platform yang memberi Anda perilaku secara gratis, dan itulah sebabnya saya tidak akan pernah menyimpan nomor telepon di bidang teks biasa.

Integrasi juga diperiksa. Nilai yang tidak cocok dengan format bidang, seperti alamat email yang formatnya salah, gagal validasi, dan seluruh rekamannya ditolak, bukan hanya bidang itu. Jadi ketika data di sistem sumber berantakan, bersihkan sebelum tiba, atau rencanakan untuk rekaman-rekaman yang tidak akan termuat.

Geolocation (geolokasi) menampung garis lintang dan garis bujur. Di baliknya, bidang bernama Location__c sebenarnya adalah dua nilai yang bisa Anda baca dan isi sendiri-sendiri, Location__Latitude__s dan Location__Longitude__s. Dan Anda bisa mengkueri berdasarkan bidang itu: fungsi DISTANCE dan GEOLOCATION di SOQL menemukan rekaman dalam radius tertentu, atau mengurutkannya berdasarkan jaraknya. “Setiap pengiriman terbuka dalam radius 25 mil dari truk ini” adalah satu kueri: WHERE DISTANCE(Location__c, GEOLOCATION(33.45, -112.07), 'mi') < 25 (Location-Based SOQL Queries (opens in a new tab)). Address (alamat) menampung alamat lengkap, jalan, kota, negara bagian atau provinsi, kode pos, dan negara, dan pengguna bisa mencari sebuah alamat lalu bagian-bagiannya terisi otomatis.

Keduanya adalah bidang majemuk (compound field): satu bidang di layar, beberapa di baliknya. Dan keduanya memakan lebih dari satu bidang dari batas objek Anda: Geolocation dihitung sebagai tiga bidang kustom, dan Address dihitung sebagai sembilan. Pada objek yang sudah penuh sesak, itu penting.

Daftar pilihan (picklist) mengendalikan apa yang bisa dimasukkan pengguna: satu nilai dari daftar yang Anda tentukan. Status? Kemungkinan besar daftar pilihan. Tetapi nilai-nilainya adalah metadata, dan seorang admin harus menambah atau mengubahnya. Jadi saya tetap bertanya siapa pemilik nilai-nilainya, seberapa sering nilainya berubah, apakah beberapa objek butuh daftar yang sama, apakah nilainya membawa informasi sendiri, dan apakah sistem lain yang memiliki kosakatanya.

Di mana nilai-nilai itu tinggal juga sebuah keputusan. Ketika sebuah daftar dipakai sekali, pada satu bidang, simpan nilainya di bidang itu sendiri, di objeknya; itulah yang dilakukan Salesforce secara bawaan. Tetapi ketika kumpulan nilai yang sama mulai muncul di beberapa tempat, sebuah Wilayah di akun, di pengiriman, dan di gudang, naikkan menjadi set nilai global sebelum salinan-salinannya mulai berbeda. Set nilai global (global value set) menyimpan satu daftar untuk semuanya, sampai 1.000 nilai, aktif dan tidak aktif digabungkan (Picklist Limitations (opens in a new tab)). Deskripsi di Setup sendiri menjelaskan mengapa ini penting: set nilai itu “is restricted so users can’t add unapproved values through the API” (dibatasi agar pengguna tidak bisa menambahkan nilai yang tidak disetujui melalui API). Satu daftar, satu pemilik, dan tidak ada integrasi yang menyelipkan ejaan baru.

Poin terakhir itu adalah perbedaan antara terbatas (restricted) dan tidak terbatas (unrestricted). Pada daftar pilihan terbatas, hanya nilai yang ditentukan admin yang diizinkan, dari mana pun: pengguna, impor, atau integrasi yang mengirim nilai lain akan mendapat error, “bad value for restricted picklist field”, dan rekamannya tidak tersimpan. Pada daftar pilihan tidak terbatas, pengguna tetap memilih dari daftar di layar, tetapi API, impor, dan otomatisasi bisa mengirim nilai apa pun, dan Salesforce menyimpannya lalu menambahkannya sebagai nilai tidak aktif (Picklist Limitations (opens in a new tab); Create a Custom Picklist Field (opens in a new tab)). Begitulah sebuah org akhirnya punya “Delivered”, “delivered”, dan “Dlvrd”. Set nilai global selalu terbatas. Bawaan saya adalah terbatas; tidak terbatas adalah pilihan yang disengaja ketika sistem lain benar-benar memiliki nilainya, dan kemudian harus ada seseorang yang bertanggung jawab membersihkan nilai-nilai yang tidak aktif.

Set nilai global baru: label, nama, deskripsi, nilai-nilai satu per baris, dan opsi untuk mengurutkannya secara alfabetis atau memakai nilai pertama sebagai bawaan

Setup, Picklist Value Sets: set nilai global baru (tangkapan layar, 2026-10-12). Ukuran penuh

Daftar pilihan multi-pilih (multi-select picklist) memungkinkan pengguna memilih beberapa nilai, disimpan bersama dan dipisahkan titik koma. Praktis di layar, canggung di tempat lain: lebih sulit difilter, dilaporkan, dan diintegrasikan, dan tidak bisa dipakai di filter ringkasan roll-up. Beberapa nilai untuk satu rekaman biasanya berarti pelajaran dari bab 2: ada objek anak yang sedang mencoba keluar.

Daftar pilihan juga punya satu nilai lagi selain yang Anda tentukan: kosong. Sebuah rekaman bisa dibiarkan tanpa pilihan apa pun, dan itu sering menjebak orang. Di formula atau aturan validasi, Anda tidak bisa menguji daftar pilihan dengan ISBLANK saja; Anda menulis ISBLANK(TEXT(Field__c)), atau ISPICKVAL(Field__c, "") (Trailblazer Community (opens in a new tab)). Jadi putuskan apa arti “tanpa nilai” untuk setiap daftar pilihan: apakah itu diizinkan, dan apa artinya ketika terjadi? Lalu buat formula, aturan validasi, dan filter Anda menanganinya.

Dan kadang sebuah atribut sebenarnya adalah entitas. Seseorang meminta daftar pilihan pusat distribusi. Ada sembilan. Mudah. Lalu kita mengetahui bahwa masing-masing punya alamat, manajer, jam operasional, kapasitas, wilayah, dan truk. Itu bukan daftar pilihan; itu sebuah benda. Jangan mengubah entitas menjadi daftar pilihan hanya karena jumlahnya belum banyak. Rasanya hebat di tahun pertama dan buruk di tahun kelima. (Modul 5 di bab 2 berisi patokan saya tentang kapan sebuah daftar layak menjadi objek sendiri.)

Saya mengajarkan teks sebagai dua jenis, dan garis pemisahnya adalah 255 karakter.

Sampai 255: disimpan bersama rekaman. Text (teks) menampung paling banyak 255 karakter, dan Anda bisa memakainya hampir di mana saja: di formula, filter, laporan, tampilan daftar, sebagai bidang unik atau External ID, dan ia bisa diindeks. Text Area (area teks) juga menampung 255, dalam beberapa baris, seperti catatan pendek.

Di atas 255: disimpan melalui referensi. Text Area (Long) menampung paling banyak 131.072 karakter, dan Text Area (Rich) menampung jumlah yang sama dengan format, tautan, dan gambar. Saya membayangkannya disimpan di samping, dengan rekaman memegang penunjuknya, dan perilakunya memang begitu: tanpa indeks, jadi Anda tidak bisa menjadikannya unik atau External ID; Anda tidak bisa memfilternya di klausa WHERE SOQL (SOQL WHERE (opens in a new tab)); formula tidak bisa memakainya (Formula Field Limits and Restrictions (opens in a new tab)); dan laporan hanya menampilkan 254 karakter pertama dari bidang kustom jenis ini, dengan filter laporan hanya mencari di sekitar 255 karakter pertama (Filter Restrictions for Text Area (Long) Fields (opens in a new tab)). Gambar yang diunggah ke bidang teks kaya bisa berukuran paling besar 1 MB masing-masing, dan dihitung terhadap penyimpanan file, sedangkan teksnya dihitung terhadap penyimpanan data (Rich Text Area Field Considerations (opens in a new tab)). Jadi jika ada yang perlu mencari, mengurutkan, mencocokkan, atau melaporkan nilainya, jaga agar di bawah 255 dan tetap jadikan bidang Text.

Text (Encrypted) menyimpan paling banyak 175 karakter dalam bentuk terenkripsi, memakai Classic Encryption. Jika org Anda memakai Shield Platform Encryption, Anda mengenkripsi bidang Text biasa sebagai gantinya, dan banyak tipe lain juga bisa dienkripsi dengan cara itu.

Standar saya: setiap bidang mendapat deskripsi. Saya sudah lama meyakininya, dan di masa AI hal ini lebih penting dari sebelumnya: setiap alat AI dan agen yang membaca org Anda membaca deskripsinya untuk memahami arti sebuah bidang. Deskripsi yang kosong adalah tebakan yang tinggal menunggu waktu. Apa arti Customer_Status__c? Siapa pemiliknya? Dari mana asalnya? Bisakah pengguna mengeditnya, atau apakah ERP akan menimpanya malam ini? Dalam enam bulan saya tidak akan ingat, dan dalam tiga tahun admin yang memelihara org tidak akan tahu kecuali kita memberi tahunya. Label bukanlah dokumentasi, begitu pula nama API.

Pada objek yang dipakai bersama secara intensif (Akun, Kontak, Peluang), saya juga memakai awalan penamaan untuk bidang-bidang khusus, agar asal dan tujuannya terlihat di namanya sendiri: semua yang dimiliki ERP dimulai dengan awalan yang sama, misalnya. Saya tidak mengejar nama API dua belas kata. Saya ingin model menjelaskan dirinya sendiri.

Klasifikasikan yang Penting: Bidang Taksonomi

Section titled “Klasifikasikan yang Penting: Bidang Taksonomi ”

Salesforce memberi setiap bidang sekumpulan metadata klasifikasi. Saya menyebutnya bidang taksonomi. Anda bisa mencatat pemilik data (data owner); pemakaian bidang (field usage: Active, DeprecateCandidate, Hidden); tingkat sensitivitas data (data sensitivity level: Public, Internal, Confidential, Restricted, MissionCritical); dan kategorisasi kepatuhan (compliance categorization): PII, HIPAA, GDPR, PCI, CCPA, dan lainnya. Semuanya berlaku untuk bidang standar maupun kustom (Data Classification Metadata Fields (opens in a new tab)).

Mengapa repot? Karena proses bisa membacanya. Tandai sebuah bidang GDPR dan sebuah proses bisa menemukan setiap bidang GDPR pada sebuah rekaman lalu menyamarkan atau menghapusnya. Dan ketika trust layer Salesforce mengirim prompt ke large language model, ia bisa memakai klasifikasi ini untuk menyamarkan bidang sensitif: ia menukar nama pelanggan, misalnya “Maria Lopez”, dengan placeholder saat keluar, model tidak pernah melihat namanya, dan nama itu ditukar kembali ke dalam respons saat masuk (Einstein Trust Layer (opens in a new tab)).

Sebuah pembaruan. Salesforce kini mendokumentasikan bahwa penyamaran berbasis pola dan berbasis bidang untuk LLM dinonaktifkan untuk agen: penyamaran bisa menghilangkan konteks yang dibutuhkan agen untuk menjawab (Data Masking Limitations in Agentforce (opens in a new tab)). Klasifikasi tetap menggerakkan penyamaran untuk fitur AI generatif lainnya, tetapi jangan mengandalkannya untuk menjauhkan data pribadi dari agen; itu keputusan akses dan desain (bab 12).

Posisi saya: klasifikasi penting pada saat-saat kunci. Jangan mengubahnya menjadi tiga minggu mengisi setiap kotak hanya karena tata kelola berkata begitu. Pakai di tempat yang penting: data pribadi, data keuangan, data yang diatur regulasi, dan bidang di mana bisnis butuh pemilik yang disebutkan namanya. Intinya, sensitivitas berhenti menjadi pengetahuan di kepala seseorang dan menjadi bagian dari bidang itu.

Di luar ujian: apa yang diubah AI. Dokumentasi bidang yang buruk dulu menyusahkan admin berikutnya. Sekarang ia menyesatkan setiap alat AI dan agen yang membaca skemanya: apakah Flag2__c sensitif, otoritatif, masih dipakai? AI juga membuat bidang lebih cepat daripada tim mana pun, jadi nama, deskripsi, dan klasifikasi adalah bagian dari arsitektur, bukan urusan beres-beres.

Begitu sebuah bidang mulai mengumpulkan data, semuanya mulai bersandar padanya. Layar menampilkannya, flow bercabang berdasarkan bidang itu, aturan validasi memeriksanya, laporan mengelompokkan berdasarkan bidang itu, integrasi mengirim dan membacanya, dan kini alat AI bernalar tentangnya. Masing-masing membuat asumsi tentang bidang itu: tipenya, panjangnya, apakah ia pernah kosong, dan apa arti nilai-nilainya. Ubah bidangnya nanti dan Anda harus menemukan setiap asumsi itu lebih dulu. Mengganti nama nilai daftar pilihan, memperpendek bidang teks, atau mengubah bidang Text menjadi daftar pilihan terdengar seperti perubahan kecil, dan itu bisa merusak integrasi di sistem milik perusahaan lain. Itulah sebabnya sebuah bidang adalah komitmen.

Satu atribut, empat keputusan Satu atribut, Status Pengiriman, melalui empat keputusan. Pertama, makna: posisi sebuah pengiriman saat ini, dengan nilai Scheduled, Out, Delivered, dan Failed, dipakai oleh dispatch, laporan, dan feed peritel. Kedua, tipe: daftar terkendali, jadi daftar pilihan, disimpan alih-alih diturunkan, dan set nilai global karena dipakai di banyak tempat. Ketiga, aturan: wajib, karena setiap pengiriman punya status; terbatas, sehingga tidak ada ejaan baru yang masuk dari API; tidak unik dan bukan ID Eksternal. Keempat, terdokumentasi: deskripsi untuk manusia dan untuk AI, pemilik di operasional dispatch, dan tingkat sensitivitas Internal. Di bagian bawah: mengklik New Field adalah langkah terakhir, bukan yang pertama. 1 · Makna apa artinya? Posisi sebuah pengiriman saat ini Scheduled, Out, Delivered, Failed Dipakai dispatch, laporan, dan feed peritel 2 · Tipe data jenis apa? Daftar terkendali: daftar pilihan Disimpan, bukan diturunkan Dipakai di banyak tempat: set nilai global 3 · Aturan apa yang dijaminnya? Wajib: setiap pengiriman punya status Terbatas: tak ada ejaan baru dari API Tidak unik, bukan ID Eksternal 4 · Terdokumentasi siapa yang membacanya nanti? Deskripsi, untuk manusia dan AI Pemilik: operasional dispatch Sensitivitas: Internal Mengklik New Field adalah langkah terakhir, bukan yang pertama. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Saya tidak ingin Anda meninggalkan modul ini dengan rasa takut membuat bidang. Salesforce dibangun untuk diperluas; manfaatkan itu. Saya ingin pertanyaannya berubah dari “tipe bidang apa yang harus saya pilih?” menjadi “apa arti data ini, dan perilaku apa yang kita janjikan?” Tipe, required, unik, External ID, daftar pilihan, formula, deskripsi, klasifikasi: bersama-sama semuanya adalah ungkapan fisik dari model logis di bab 2.

  • Apa arti sebuah nilai sebelum memilih tipe bidangnya, dan apakah ia atribut, pengenal, kosakata terkendali, atau sebenarnya entitas lain.
  • Apakah sebuah nilai adalah perhitungan saat ini yang bisa diturunkan atau fakta historis yang harus disimpan.
  • Sistem mana yang memiliki setiap pengenal, dan apakah keunikannya adalah janji bisnis yang nyata.
  • Kapan sebuah nilai wajib benar-benar diketahui, dan apa yang terjadi pada rekaman dan integrasi yang tidak memilikinya.
  • Deskripsi, penamaan, dan klasifikasi apa yang dibutuhkan bidang itu agar orang, proses, dan AI bisa memakainya dengan aman.