以前カスタム設定・カスタムメタデータについての記事を書いたのですが、具体的に有効な場面については記述していませんでした。
今回は実体験を基に、カスタム設定・カスタムメタデータの使い所について書いてみたいと思います。
Sandboxと本番環境で異なる定数値を使用できる
1つ目は、Sandboxと本番環境で異なる定数値を使用する場合です。
カスタム設定を使うことで、コードをシンプルに書くことができます。
例として、連携ツール等のURLをSandboxと本番環境で切り替える場合を想定します。
「例示用URL」という項目を持ったカスタム設定を作成し、デフォルトの組織レベルの値を設定しておきます。
この値をSandboxと本番環境で変えておけば、別々の値を取得できます。


Apexコード内で以下のように書くことで、環境に応じた値を取得できます。
String sampleURL = CustomSettingTest__c.getOrgDefaults().SampleURL__c;
コード改修を行わずに、コード中で使用する値や、値同士の対応関係を変えられる
2つ目は、コード内で静的に定義する値が頻繁に改修される場合です。
例えば、コード内で以下のような Map を使っているとします。
Map<String, String> numberToAlphabet = new Map<String, String>{
'101' => 'A',
'102' => 'B',
'103' => 'C'
};
このMapの対応関係を変更しようと思ったら、コード改修 → デプロイ までの一連の手順を踏まねばならず、面倒です。
これをカスタムメタデータを使うことで改善します。
まずカスタムメタデータを作成します。


Apexコードで以下のように書くことで、先に示したものと同様の Map を作ることができます。
List<NumberToAlphabet__mdt> mdts = [SELECT NumberCode__c, Alphabet__c FROM NumberToAlphabet__mdt];
Map<String, String> numberToAlphabet = new Map<String, String>();
for(NumberToAlphabet__mdt mdt : mdts){
numberToAlphabet.put(mdt.NumberCode__c, mdt.Alphabet__c);
}
この Map の対応関係を変更したい場合は、カスタムメタデータの値を変えるだけで良いので変更の負担が小さいです。
コメント