
Gaye Dinç
6 Ağustos 2025
Salesforce ekosisteminde esnek ve ölçeklenebilir bir yapı kurmak isteyen her geliştirici ya da adminin yolu mutlaka "Custom Metadata Types" ile kesişir. Peki nedir bu özel metadata türleri ve neden bu kadar önemlidir?
Uygulamalar geliştikçe koddan bağımsız bir şekilde yapılandırmaları yönetebilmek hem zaman kazandırır hem de bakım sürecini büyük ölçüde kolaylaştırır. İşte Custom Metadata Types tam da bu noktada devreye girer. Kod yazmadan uygulama davranışını belirleyebilmek, yapılandırmaları kolayca taşımak ve tüm bu süreci yönetilebilir kılmak; modern Salesforce geliştirme süreçlerinde vazgeçilmez hale gelmiştir.
- Data (Veri): Kullanıcının girdiği ya da sistemin kaydettiği gerçek bilgilerdir.
Örneğin: “Zeynep”, “1994-10-01”, “İstanbul” → bunlar veridir. - Metadata (Üst Veri): Bu verilerin yapısını tanımlar.
Örneğin: “Adı” bir metin alanı mı, maksimum kaç karakter olmalı gibi bilgiler → metadata’dır. - Custom Metadata Type (Özel Metadata Türü):
Salesforce’ta tekrar eden sabit tanımları (oranlar, kurallar, eşleştirmeler gibi) veri değil yapı olarak saklamanı sağlayan bir sistem bileşenidir.
Örneğin bir form düşünün:
Kutucukların adı (“Ad”, “Doğum Tarihi”) → metadata
Kutulara yazılan bilgiler (“Zeynep”, “1994-10-01”) → data
Bu formun kurallarını (örneğin “Sadece 18 yaş üstü kişiler başvurabilir”) başka yerlerde de tekrar kullanmak istiyorsan ve kodlamak istemiyorsan → Custom Metadata Type devreye girer.
Salesforce’da Custom Metadata Types Nedir?
Custom Metadata Type Salesforce içinde uygulama yapılandırmalarını tanımlamak için kullanılan özel bir nesne türüdür. Bu nesneler yalnızca metadata içerir. Yani tanımlayıcı bilgi taşır. Örneğin kullanıcı girdisi ya da işleme sonucu gibi doğrudan veri değil.
Basitçe anlatmak gerekirse:
- "Alan adları", "veri tipi", "ilişki türleri" gibi yapılar metadata iken;
- Bu alanlara girilen değerler yani asıl içerik data olarak adlandırılır.
Custom Metadata Type Salesforce’un sunduğu güçlü metadata yönetimi sayesinde yapılandırma verilerini sistem genelinde kullanılabilir hale getirir. Bu sayede uygulamalarınızı kodda sabit verilerle (hard-coded) değil merkezi bir yapılandırma sistemiyle kontrol edebilirsiniz.
Neden Kullanılır?
- Yapılandırmaları kolayca paketleyip başka ortamlara taşıyabilmek için
- Apex, Flow, Validation Rule gibi araçlarla birlikte çalışabilmesi için
- Kayıtların değişim setleri veya yönetilen paketlerle dağıtılabilmesi için
- Koddan bağımsız, kullanıcı arayüzü üzerinden düzenlenebilir olması için
Değişim Setleri (Change Sets) Nedir?
Change Set Salesforce içinde bir ortamdan (örneğin sandbox) başka bir ortama (örneğin production) yapılandırmaları (metadata) taşımak için kullanılan bir araçtır. Kod, nesne, alan, sayfa düzeni gibi bileşenleri içerir.
Örnek: Sandbox'ta bir Custom Metadata Type oluşturdun. Bunu production ortamına geçirmek için bir change set hazırlayıp gönderebilirsin.
Sandbox: Salesforce'ta geliştiricilerin ve adminlerin test, geliştirme veya deneme amaçlı kullandığı kopya ortamdır. Gerçek veriler içermez, değişiklikler risk oluşturmaz. Örneğin yeni bir kural ekleyeceksin ama canlı sistemi bozmamak için önce sandbox’ta denersin.
Production (Canlı Ortam): Kullanıcıların gerçek verilerle çalıştığı canlı sistemdir. Tüm müşteri verileri ve iş süreçleri burada yürür. Örneğin satış temsilcileri gerçek müşteri kayıtlarını production ortamında girer ve takip eder.
Yönetilen Paketler (Managed Packages) Nedir?
Managed Package özellikle ISV (bağımsız yazılım geliştirici) olanlar için oluşturulan ve AppExchange gibi platformlarda dağıtılabilen, versiyonlanabilir uygulama paketleridir. İçinde Apex kodları, nesneler, metadata türleri, sayfalar vb. yer alabilir.
Örnek: Birden fazla müşteri için aynı muhasebe uygulamasını geliştiriyorsan tüm kurallar ve yapılandırmalar Custom Metadata Type olarak paketlenir ve bir yönetilen paket olarak dağıtılır.
Custom Metadata vs. Custom Settings
Salesforce projelerinde yapılandırma verilerini saklamak gerektiğinde iki güçlü seçenek karşımıza çıkar: Custom Settings ve Custom Metadata Types. Her ikisi de örneğin KDV oranları, destek seviyeleri gibi sabit liste verilerini saklamak için kullanılabilir. Ancak aralarındaki farklar kullanım senaryosuna göre doğru tercihi yapmayı gerektirir.
Custom Settings Nedir?
Custom Settings Salesforce’ta sistemin davranışını belirleyen sabit değerleri kullanıcı dostu bir şekilde saklamanı sağlayan özel veri yapılandırmasıdır. Tıpkı özel nesneler (custom object) gibidir ama verileri bellekte (cache) tutarak performans avantajı sağlar.
İki türü vardır:
- List Custom Settings (Liste Temelli):
Tüm kullanıcılar için geçerli olan ortak ayarları tutar. Örnek: Tüm sistem genelinde geçerli olan %18 KDV oranı. - Hierarchy Custom Settings (Hiyerarşi Temelli):
Kullanıcıya, profile veya organizasyon seviyesine özel ayar tanımlamaya imkân tanır. Örnek: Satış müdürleri için %10 komisyon, satış temsilcileri için %5 komisyon tanımı.
Peki Neden Custom Metadata Types ile Kıyaslanıyor?
Çünkü her iki yapı da sistemde sabit tanımları saklamak için kullanılır. Ancak aralarında bazı kritik farklar vardır. Özellikle taşınabilirlik, ilişkisel yapı desteği ve Apex/Flow/Formula gibi araçlarla entegrasyon noktasında Custom Metadata Types öne çıkar.
Custom Settings vs. Custom Metadata Types
| Özellik | Custom Settings | Custom Metadata Types |
|---|---|---|
| Dağıtım | Sadece yapısı taşınabilir, kayıtlar manuel girilir | Yapı ve kayıtlar birlikte Change Set, Metadata API veya paket ile taşınabilir |
| Hiyerarşi Desteği | Kullanıcı, profil veya organizasyon seviyesinde özelleştirme | Yok |
| Performans | Bellekte tutulur → daha hızlı erişim | Standart metadata gibi erişilir |
| İlişki Alanı | Yok | Diğer metadata türleriyle lookup yapılabilir |
| Apex CRUD | Create, Read, Update, Delete desteklenir | Create, Read, Update desteklenir (Delete desteklenmez) |
| Kullanım Alanı | Kullanıcı/profil bazlı sistem ayarları | İş kuralları, eşleştirme tabloları, sabit yapılandırmalar |
Eğer kullanıcıya veya profile özel dinamik ayarlar gerekiyorsa → Custom Settings tercih edilir.
Eğer sabit, taşınabilir ve merkezi olarak yönetilen iş kuralları veya yapılandırmalar gerekiyorsa → Custom Metadata Types çok daha güçlü ve esnektir.
Metadata API: Salesforce’taki yapılandırmaları (metadata) programlı bir şekilde alma, güncelleme, silme veya başka ortamlara taşıma imkânı sağlayan bir uygulama programlama arayüzüdür (API). Daha teknik ve esnek bir yöntemdir. Özellikle CI/CD süreçlerinde (yani kodların otomatik test edilip dağıtıldığı sistemlerde) kullanılır. CI/CD süreçleri yazılımın elle kontrol edilmeden test edilip farklı ortamlara aktarılmasını sağlayan otomatik sistemlerdir. Tıpkı her gün aynı saatte çıkan otomatik bültenler ya da onaylandıktan sonra otomatik yayımlanan e-ticaret ürünleri gibi düşün. Örnek: GitHub Actions veya Bitbucket Pipelines üzerinden Apex sınıflarını ve Custom Metadata’ları otomatik olarak canlı ortama göndermek.
Custom Metadata Types Ne Zaman Kullanılır?
Salesforce'da Custom Metadata Types sadece yapılandırma saklamak için değil aynı zamanda uygulama davranışını yönlendirmek için de kullanılır. İşte yaygın kullanım senaryolarından bazıları:
Eşleştirmeler (Mappings)
Farklı nesneler ya da değer kümeleri arasında ilişki kurmanız gerekiyorsa özel metadata türleri oldukça etkilidir. Örneğin bir ülkeye ait şehirleri ya da eyaletleri belirli bölgelere bağlayan bir yapı oluşturmak istiyorsanız bunu Custom Metadata Types ile kolayca yapabilirsiniz.
İş Kuralları (Business Rules)
Uygulamanızda farklı koşullara göre karar mekanizmaları gerekiyorsa Custom Metadata Types bu kuralları Apex kodu ile birleştirerek çalıştırmanıza olanak tanır. Örneğin bir ödeme yönlendirme sistemi geliştiriyorsanız ödemelerin doğru API uç noktasına gönderilmesini metadata tabanlı olarak sağlayabilirsiniz.
Birincil Veri Tanımlamaları (Primary Data)
Muhasebe gibi sistemlerde sabit oranlar, KDV dilimleri, harçlar gibi tanımlı değerleri tutmak için özel metadata türleri idealdir. Bu tür değerleri bir extension package içinde tanımlayıp başka organizasyonlara aktarabilir, böylece tek merkezden yönetilen bir bilgi yapısı kurabilirsiniz.
Extension Package Nedir?
Extension Package Salesforce’ta daha önce oluşturulmuş ve yayımlanmış bir ana (base) yönetilen paketin (managed package) üzerine yeni özellikler, nesneler veya yapılandırmalar eklemek için kullanılan ek (genişletme) pakettir. Bu paket mevcut bir uygulamayı genişletmek veya özelleştirmek isteyen ISV (Independent Software Vendor) geliştiriciler için kullanılır.
- Bir ana pakete bağımlıdır (tek başına çalışmaz).
- Yeni bileşenler (nesne, field, Apex sınıfı, custom metadata, vs.) ekleyerek var olan paketi özelleştirir veya tamamlar.
- Özellikle müşteri ihtiyaçlarına özel versiyonlar oluşturmak için kullanılır.
Diyelim ki bir muhasebe uygulamanız var (ana paket). Farklı ülkelerde KDV oranları farklı olduğu için her ülkeye özel oranları tanımlayan bir Custom Metadata Type oluşturdunuz. Bu tanımları bir extension package içine koyarak her ülkeye özel genişletilmiş sürümler sunabilirsiniz.
Hangi Alan Türlerini Destekler?
Custom Metadata Types çoğu standart alan türünü destekler. Bu da onu son derece esnek bir araç haline getirir. Desteklenen bazı alan türleri şunlardır:
- Metadata ilişkileri (lookup)
- Onay kutusu (Checkbox)
- Tarih ve Tarih/Saat
- E-posta ve Telefon
- Sayı ve Yüzde
- Seçim listesi (Picklist)
- Metin ve Metin Alanı
- URL
Bu çeşitlilik sayesinde çok farklı senaryolara uyarlanabilir bir yapı sunar.
Geliştirici Desteği ve Kullanım Alanları
Geliştiriciler için Custom Metadata Types hem yapılandırma hem de esneklik açısından güçlü imkanlar sunar:
- SOQL ile Okunabilir: Custom Metadata kayıtları SOQL sorguları ile doğrudan okunabilir.
- Metadata API ile Güncellenebilir: Oluşturma ve güncelleme işlemleri Metadata API ile yapılabilir.
- Apex ile Kullanılabilir: Apex içinde Create, Read ve Update işlemleri yapılabilir (Delete desteklenmez).
- Flow, Formula ve Validation Rule’larla Entegre Edilebilir: Kod yazmadan birçok platform aracında doğrudan kullanılabilir.
Bu sayede Custom Metadata Types kod ve yapılandırma arasında güçlü bir köprü işlevi görür.
Flow (Akışlar)
Flow Salesforce’un görsel otomasyon aracıdır. Kod yazmadan süreçleri otomatikleştirmenizi sağlar. Örneğin bir kayıt oluşturma, e-posta gönderme, karar verme vb.
Gerçek hayattan bir örnek vermek gerekirse bir müşteri yeni bir ürün satın aldığında ürün türüne göre farklı temsilcinin atanmasını istiyorsunuz. Hangi ürün tipine hangi temsilcinin atanacağını Custom Metadata Type ile tanımlayıp Flow içinde bu metadata'yı okuyarak yönlendirme yapabilirsiniz.
Formula Field (Formül Alanları)
Formula Field diğer alanların değerlerini kullanarak dinamik ve otomatik hesaplama yapmanızı sağlar. Kod gerekmez, tıpkı Excel formülleri gibi çalışır.
Gerçek hayat örneği ise bir sözleşmenin bitiş tarihine göre “Garanti Durumu” hesaplamak istiyorsunuz. Garanti süresi her ürün tipi için Custom Metadata’dan alınır. Formül alanı ile bu sürelere göre otomatik olarak "Aktif" ya da "Süresi Dolmuş" gibi sonuçlar gösterebilirsiniz.
Validation Rule (Doğrulama Kuralları)
Validation Rule belirli koşullarda kullanıcıların yanlış ya da eksik veri girmesini engelleyen kurallardır. Hatalı girişlerde kullanıcıya mesaj gösterilir.
Gerçek hayat örneği ise kampanya oluşturulurken bazı sektörlerde %50’nin üzerinde indirim yapılmaması gerekiyor. İzin verilen maksimum indirim oranlarını Custom Metadata Type içinde saklayıp Validation Rule ile bu oranlar aşıldığında uyarı verebilirsiniz: “Bu sektörde maksimum indirim oranı %50’dir.”
Neden Custom Metadata Types Kullanmalısınız?
Salesforce projelerinizde sürdürülebilirlik, yönetilebilirlik ve taşınabilirlik hedefliyorsanız Custom Metadata Types vazgeçilmezdir. Hem geliştiriciler hem de yöneticiler için büyük kolaylık sağlar:
- Kod tekrarını önler
- Yapılandırma taşımayı kolaylaştırır
- Yönetilen paketlerle çalışmayı optimize eder
- Uygulama yaşam döngüsünü sadeleştirir
- Denetim ve uyumluluk süreçlerinde avantaj sağlar
İster küçük bir yapılandırma olsun ister kompleks iş kuralları barındıran bir uygulama Custom Metadata Types doğru kurulduğunda Salesforce projelerinizi bir üst seviyeye taşır.
Gerçek Hayatta Custom Metadata Types’ı Nerelerde Kullanırız?
Salesforce geliştiricileri ve adminleri için Custom Metadata Types yalnızca teorik bir kavram değil gerçek projelerde somut sorunları çözmekte oldukça işe yarar. İşte bazı örnek senaryolar:
1. API Anahtarlarını ve Sabit URL'leri Yönetmek
Ödeme servisleri, üçüncü parti entegrasyonlar veya sistem dışı bağlantılar kullanıyorsanız API endpoint’lerini kod içerisine yazmak yerine Custom Metadata’da saklayarak hem güvenli hem taşınabilir bir çözüm üretmiş olursunuz.
2. Bölgeye Göre İş Kuralları Tanımlamak
Farklı şehir veya ülke bazlı iş kurallarınız varsa örneğin KDV oranları ya da fiyat politikaları gibi. Bu kuralları Custom Metadata ile tanımlayıp Apex veya Flow içerisinde dinamik olarak çağırabilirsiniz.
3. Dinamik Akış Kontrolü (Flow Routing)
Flow’lar içerisinde karar noktalarını metadata’ya bağlayarak her değişiklikte Flow’u güncellemeden sistem davranışını değiştirebilirsiniz. Örneğin belirli bir ürün tipi seçildiğinde farklı temsilciye yönlendirme gibi.
4. Profil ya da Yetkiye Bağlı Uygulama Davranışı
Bazı kullanıcı profillerinin sadece belirli işlemleri yapabilmesi gerekiyorsa bu kontrolleri Custom Metadata üzerinden tanımlayıp dinamik şekilde Apex veya LWC tarafında kontrol sağlayabilirsiniz.
5. Yönetilen Paket Geliştirme
Bir ISV (Independent Software Vendor) olarak AppExchange’e uygulama geliştiriyorsanız Custom Metadata Types kullanarak hem yapılandırma kayıtlarını hem iş mantığını tek bir paket içerisinde dağıtabilir, müşteri ortamında ekstra kurulum gerekmeden yapılandırmaları hazır hale getirebilirsiniz.
AppExchange
Salesforce’un resmi uygulama mağazasıdır. Salesforce ekosistemi için geliştirilen ücretsiz veya ücretli uygulamaları barındırır. Hazır çözümlerle zaman kazanmanızı sağlar (örneğin e-imza, SMS entegrasyonu, veri temizliği gibi). ISV (Independent Software Vendor) iş ortakları tarafından geliştirilmiştir. Popüler AppExchange uygulamaları DocuSign, Conga, Field Trip, FormAssembly, OwnBackup
Nasıl kullanılır?
- https://appexchange.salesforce.com adresinden uygulama bulunur.
- Sandbox ortamına yüklenip test edilir.
- Onay sürecinden sonra production’a aktarılır.
“Custom Metadata Types, kodu değil, davranışı taşır.”
Uygulamanızın yapı taşlarını dışa bağımlı olmadan yönetmek, ortamlar arasında kolayca taşıyabilmek ve değişiklikleri kod yazmadan uygulamak istiyorsanız, Custom Metadata Types tam size göre.
