【Salesforce】カスタムメタデータ型を活用して入力規則を作成する
.png&w=3840&q=75)
今回はカスタムメタデータについての解説と入力規則での活用例を紹介します。
カスタムメタデータ型とは
メタデータ
カスタムメタデータ型の説明の前に、そもそもメタデータとは何かについて整理をします。
メタデータとは一言で言うとデータを説明するためのデータです。
よくシステム開発で使われるデータベース用語の「カラム」もメタデータの一部であると言えます。
Salesforceの例を挙げて考えてみます。
「設定」→「オブジェクトマネージャー」→「取引先」→「項目とリレーション」を開きます。
「項目とリレーション」では取引先というオブジェクトにどんな項目名でどんなデータ型で保存するのかということが定義されています。

これらのデータを説明するためのデータがメタデータです。
取引先データを作成する際に取引先名などのメタデータに保存される値がデータとなります。

カスタムメタデータ型
Salesforceにおける通常のオブジェクトは項目がメタデータ、値がデータでしたが、カスタムメタデータ型の場合、項目と値が両方ともメタデータとして構成されています。
カスタムメタデータ型の特徴
カスタムメタデータ型の主な特徴・メリットについて以下が挙げられます。
- デプロイが可能(Sandbox→本番など環境間での設定の移行が簡単)
- Apexやフローから簡単に参照が可能
カスタムメタデータ型の利用シーン
カスタムメタデータ型の利用シーンとして商品のカテゴリや、税率などシステムの中で共通の値であるマスタデータの定義が挙げられます。
税率10%などの値をシステム全体でコードとして参照することで税率が変更された場合もコードの変更が不要になります。
他にもプロファイルごとの機能の利用可否など頻繁に変わることがないが運用していく上で変更があり得る設定に向いています。
カスタムメタデータ型の作成
「設定」から「カスタムメタデータ型」を検索してアクセスします。

「新規カスタムメタデータ型」をクリックします。

項目を入力して保存をクリックします。
- 表示ラベル
- 表示ラベル(複数形)
- オブジェクト名

これでカスタムメタデータ型が作成できましたが、項目が何もない状態なので追加をしてきます。
「カスタム項目」→「新規」をクリックします。

通常のオブジェクトのカスタム項目作成時と同じようにデータ型を選択する画面が表示されます。
カスタム項目の場合よりデータ型の選択肢は少なくなっています。
今回はテキストを選択して「次へ」をクリックします。

以下の項目を入力して「次へ」→「保存」をクリックします。
- 項目の表示ラベル
- 文字数
- 項目名

項目を作成できたのでレコードを追加します。
「Manage テスト(カスタムメタデータ型名)」をクリックします。

まだレコードは存在しないので以下のような画面が表示されます。

「新規」をクリックします。
以下の項目を入力して「保存」をクリックします。
- 表示ラベル
- テスト名
- テスト項目

これでレコードの作成が完了しました。
カスタムメタデータ型の参照
作成したカスタムメタデータ型を参照する手順を説明します。
入力規則
カスタムメタデータ型は数式エディタで参照が可能です。
今回は入力規則内で参照してみます。
「設定」から任意のオブジェクト(今回は取引先)を選択します。
「入力規則」→「新規」をクリックします。

今回は入力規則の作成まではせず、カスタムメタデータ型の参照の方法の確認のみ行います。
「エラー条件数式」→「項目の挿入」をクリックします。

「$CustomMetadata」→「テスト(カスタムメタデータ型名)」→「テストレコード(レコード名)」の順にクリックします。

参照する項目「テスト項目」を選択して「挿入」をクリックします。

これでカスタムメタデータ型のレコードを参照することができました。

このように数式に値を直書きするのではなく、カスタムメタデータを使用することでメンテナンス性が向上します。
Apex
Apexでの参照を行ってみます。
「設定メニュー」から「開発者コンソール」を立ち上げます。

「Debug」→「Open Execute Anonymous Window」をクリックします。

以下の内容をエディタに記述します。
Test__mdt record = [
SELECT TestField__c
FROM Test__mdt
WHERE DeveloperName = 'TestRecord'
];
System.debug('TestField__c: ' + record.TestField__c);
カスタムメタデータレコードはオブジェクト名__mdt
で表されます。
今回は新規カスタムメタデータ型作成時にオブジェクト名をTest
としたのでSOQL上でFROM Test__mdt
として取得元を指定しています。
WHERE句ではレコード作成時にDeveloperName
がテスト名として指定したTestRecord
と等しいことを条件として定義しています。
SELECT句では取得する項目としてカスタム項目として作成したTestField__c
を指定してます。
「Execute」をクリックします。
「Debug Only」にチェックを入れるとカスタム項目の値が取得できていることが確認できます。

カスタムメタデータ型を活用して入力規則を作成する
最後にカスタムメタデータを使って入力規則を作成します。
想定シーン
契約の種別に応じて、契約期間(契約終了日 - 契約開始日)が最小期間以上でなければならない場合を想定します。
契約の種別と最小契約期間は以下とします。
契約種別 | 最小契約期間(日) |
---|---|
短期 | 30 |
通常 | 180 |
長期 | 365 |
カスタム項目を作成
「契約」オブジェクトにカスタム項目「契約種別」を追加します。
「設定」→「オブジェクトマネージャー」→「契約」→「項目とリレーション」にアクセスして「新規」をクリックします。
データ型は「選択リスト」を選択して「次へ」をクリックします。

以下の内容で作成します。

作成後、新規契約作成時に項目が追加されていることを確認します。
時間が経っても反映されない場合は一度ログアウトして再ログインを試してみてください。

カスタムメタデータを作成
「設定」→「新規カスタムメタデータ型」にアクセスして「新規カスタムメタデータ型」をクリックします。
以下の内容で作成します。
項目 | 値 |
---|---|
表示ラベル | 契約種別ごとの最低期間 |
表示ラベル(複数形) | 契約種別ごとの最低期間 |
オブジェクト名 | Contract_Type_Minimum_Duration |

カスタム項目を追加します。
「カスタム項目」→「新規」から以下の内容でカスタム項目を作成します。
項目 | 値 |
---|---|
データ型 | 数値 |
項目の表示ラベル | 最低契約期間(日) |
項目名 | MinimumDuration |
必須項目 | true |

「Manage 契約種別ごとの最低期間」→「新規」からレコードを以下の内容で3つ追加します。
表示ラベル | 契約種別ごとの最低期間名 | 最低契約期間(日) |
---|---|---|
短期 | short | 30 |
通常 | standard | 180 |
長期 | long | 365 |

入力規則の作成
「契約」→「入力規則」→「新規」をクリックします。
「ルール名」を「CheckMinimumDuration」とします。
「エラー条件数式」に以下の内容で数式を追加します。
IF(
(ISPICKVAL(ContractType__c, "短期") &&
(EndDate - StartDate) < $CustomMetadata.Contract_Type_Minimum_Duration__mdt.short.MinimumDuration__c )
||
(ISPICKVAL(ContractType__c, "通常") &&
(EndDate - StartDate) < $CustomMetadata.Contract_Type_Minimum_Duration__mdt.standard.MinimumDuration__c )
||
(ISPICKVAL(ContractType__c, "長期") &&
(EndDate - StartDate) < $CustomMetadata.Contract_Type_Minimum_Duration__mdt.long.MinimumDuration__c ),
TRUE,
FALSE
)
「エラーメッセージ」は「契約期間が最低契約期間を下回っています。」とします。

動作確認
「契約」のページにアクセスし「新規」をクリックします。
「契約種別」を「通常」、「契約 期間(月)」を「1」として保存しようとするとエラーが発生することが確認できます。

カスタムメタデータ型を活用した入力規則の作成は完了です。
Apexやフローと組み合わせることでより多くのことができるのでまた別記事で紹介できればと思います。