カスタムメタデータの「メタデータリレーションシップ」なるものがあって、オブジェクトの選択とそのフィールドを選択することができる。
で、どう使うかというと
メタデータリレーションの定義
- まず適当にカスタムオブジェクトを作成します。
- カスタムメタデータを作成します。
- カスタムメタデータ項目を作成開始します。
まずは「メタデータリレーションシップ」を選択します。
- リレーションのタイプを「Entity Definition」を使用します。
最初の一つはこれしか選べません。
- カスタムフィールド詳細を追加します。と言ってもここでは名称だけですが…
- そのまま保存します。
これで基本設定は完了です。
この時点でレコードを作成しようとすると、接続(relation)先のオブジェクト選択ができます。
するとそのまま保存できるようになります。
フィールドの指定
今度はこのオブジェクトに関連する Metadata Relationship (項目)を指定します。
- フィールド作成を開始し、Metadata Relationship
- 今度は Field Definition で定義します
Controlling Field
項目で先程作成した「Entity Definition」の項目を指定します。
- そしてそのまま保存する
そしたら、追加で入力してみましょう。
すると、TargetObject
で指定したオブジェクトのフィールドが選択できるようになります。
Apex から利用する
上記を SOQL で単純に取得しようとすると*1
(TдT)ウヴォァー!!
このIDを直接URLに突っ込んでアクセスすると…該当オブジェクトの ObjectManager にリダイレクトする。
これでは Apex で使いようがないぞ…と思っていたら、いい情報を発見した。
さすが StackExchange だぜ!
ということで再チャレンジ
SELECT TargetObject__c, TargetObject__r.QualifiedApiName, TestField__c, TestField__r.QualifiedApiName FROM TestMetadata__mdt
やっはー!
*1:SalesforceInspector を利用。個人的に利用頻度が高い。