【Salesforce】カスタム設定・カスタムメタデータの実用法

close up photo of abstract painting Apex
Photo by Dids on Pexels.com

以前カスタム設定・カスタムメタデータについての記事を書いたのですが、具体的に有効な場面については記述していませんでした。
今回は実体験を基に、カスタム設定・カスタムメタデータの使い所について書いてみたいと思います。

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 の対応関係を変更したい場合は、カスタムメタデータの値を変えるだけで良いので変更の負担が小さいです。

コメント

タイトルとURLをコピーしました