【Salesforce】カスタム設定機能についてのご紹介
今回は、Salesforceのカスタム設定機能についてご紹介します。
カスタム設定とは
カスタム設定は、カスタムオブジェクトのように任意の項目を設定したり、項目に値を登録したりすることで、
登録した値を固定値として保持することができる機能です。
カスタムオブジェクトやカスタム項目とは異なり、
設定した項目や固定値を、オブジェクトを超えて共有することができます。
そのため、運用していく中で固定値の変更や、項目の修正があった場合、
カスタム設定に登録された固定値を変更するだけで、固定値を設定していた全てのオブジェクトで一括更新することができます。
また、Apexでの値の取得についても、SOQLを使用せずに取得することが可能です。
カスタム設定の作成方法
カスタムオブジェクト作成時の手順と似ており、以下のステップで簡単に設定することができます。
① Salesforceの設定から、「カスタム設定」を選択します

② 新規ボタンを押下します

③ オブジェクトの表示ラベル、オブジェクト名、設定種別、表示、説明をそれぞれ入力します

【補足】設定種別 ~階層とリストの違い~
カスタム設定には、以下の2種類の設定が存在しており、用途に合わせて設定します。
一度設定を保存すると種別については変更ができないため、注意が必要です。
・『リスト』:組織全体でアクセスできるデータを定義できます。
カスタムオブジェクトのように、レコードを作成できます。
・『階層』:特定のプロファイルやユーザーなど、階層ごとに表示する値を定義できます。
④「保存」を押下して、カスタム設定の作成が完了です
カスタム設定の項目作成方法
① 作成したカスタム設定のカスタム項目から「新規」ボタンを押下します

② 項目の表示ラベル、項目名(=API参照名)など、必要な情報を設定して、「次へ」を押下します
【設定できるデータ型】
カスタム設定では、以下のデータ型の項目が作成できます。
・URL
・チェックボックス
・テキスト
・テキストエリア
・パーセント
・メール
・数値
・通貨
・電話
・日付
・日付/時間

③ 「保存」を押下して、カスタム項目の設定が完了です
設定した項目に値を設定する方法
① カスタム設定上の「Manage」というボタンを押下します

② 「新規」ボタンを押下して、レコードを作成します
※組織のデフォルト値を登録する場合は、以下補足画像の①「新規」ボタンを押下してレコードを作成し、
階層ごとに、それぞれの値を登録する場合は②の「新規」ボタンを押下します。

③ 各項目に任意の値を登録し、「保存」を押下して、固定値の設定が完了です

カスタム設定を取り扱う際の注意点
カスタム設定を使用するにあたって注意点がありますので、
こちらについても考慮の上で、実装していただくと良いと思います。
① リリース時に値を含めることができない
リリースで変更セットを作成する際、
カスタム設定のレコードで設定した値については、変更セットに含めることができません。
※カスタム設定自体や項目に関しては、変更セットに含めることが可能です。
リリース時の手動実装作業として、変更セットに値を登録することを忘れないようにしましょう。
② テストクラス内での参照ができない
オブジェクトと異なり、
カスタム設定では、テストクラス内で設定した値を参照することができません。
@seeAllData=Trueを用いるテストクラスに変更するか、
テストクラスの中で、カスタム設定の値を登録することで対策が可能です。
【番外編】Apexでのカスタム設定のレコードの利用
冒頭で少し触れた通り、カスタム設定のレコードは、Apexで取得する際に、
オブジェクトのようにSOQLを使用することもできますが、SOQLを使用せずに取得することも可能です。
今回は、SOQLを投げずにレコード取得を行う方法について、いくつかの例をご紹介します。
1.設定種別がリストのカスタム設定を使用している場合
・getAll()を使用する
指定したカスタム設定に登録されているレコード全てを、
Key=Name、Value=レコードのMapとして、まとめて取得することができます。

また、全レコードのValueのみをMapではなくリストで取得したい場合は、以下のように取得ができます。

2.設定種別が階層のカスタム設定を使用している場合
・getOrgDefault()を使用する
組織レベルで設定した値を取得したい場合、getOrgDefault()で値の取得ができます。

・getInstance()を使用する
プロファイルレベル・ユーザレベルで設定した値を取得したい場合、getInstance()でも値の取得ができます。
()内でプロファイルIDを指定することで、
そのプロファイルに登録されたカスタム設定の項目値を取得することができます。

終わりに
いかがでしょうか。
上記のステップで、簡単にカスタム設定の作成ができるかと思います。
階層ごとにSalesforce上に表示する値を変えたい時や、
複数のオブジェクトの中で共通の項目値を使用したい時などにご活用ください。