この記事では、Salesforce のカスタム設定について、以下のことを記述しています。
- カスタム設定の特徴
- 数式項目や Apex からカスタム設定のレコードにアクセスする方法
カスタム設定とは?
カスタム設定は項目を持っていたりレコードを作成できたりするなど、カスタムオブジェクトに似ています。
一方で、すべてのカスタム設定データはアプリケーションキャッシュで公開されるという特徴を持ちます。つまりレコードの取得にクエリを使わない高速なアクセスが可能です。
2種類のカスタム設定
階層カスタム設定
階層カスタム設定は、取得するデータをプロファイルやユーザごとに変えたい場合に使用します。
上から、組織 → プロファイル → ユーザというような階層構造になっており、プロファイルやユーザごとにレコードを作成することができます。
リストカスタム設定
リストカスタム設定は、データがプロファイルやユーザごとに異なるということはなく、組織全体で利用できます。
ただし、リストカスタム設定の代わりにカスタムメタデータ型を使用することが推奨されているようで、以下の画像のようにデフォルトだと設定種別が階層カスタム設定に限定されていました。
カスタムメタデータ型は、レコードをパッケージまたはメタデータ API ツールを使用して移行できるというのが相対的に良い点です。
カスタム設定へのアクセス
数式項目からのアクセス
数式項目は階層カスタム設定でのみ機能し、リストカスタム設定には使用できません。
以下のように記述することで、自動で階層内の最も限定的なレコードを取得してくれます。つまり、現在のユーザ → ユーザのプロファイル → 組織と見ていって、レコードがあればその値を取得します。
{!$Setup.CustomSettingName__c.CustomFieldName__c}
Apexからのアクセス
getInstance() を用いることで、階層内で定義された最下位レベル項目に基づいたレコードを取得できます(現在のユーザ → ユーザのプロファイル → 組織と見ていって、レコードがあればその値を取得)。
CustomSettingName__c mc = CustomSettingName__c.getInstance();
ユーザ、プロファイル、組織のデフォルトを直接指定して取得するときは以下のようにします。
// ユーザを指定
CustomSettingName__c mcUser = CustomSettingName__c.getInstance(USER_ID);
// プロファイルを指定
CustomSettingName__c mcProf = CustomSettingName__c.getInstance(Profile_ID);
// 組織のデフォルト
CustomSettingName__c mcOrg = CustomSettingName__c.getOrgDefaults();
コメント