技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

メタデータリレーションシップ使ってみる

カスタムメタデータの「メタデータリレーションシップ」なるものがあって、オブジェクトの選択とそのフィールドを選択することができる。
で、どう使うかというと

メタデータリレーションの定義

  1. まず適当にカスタムオブジェクトを作成します。
  2. カスタムメタデータを作成します。
  3. カスタムメタデータ項目を作成開始します。
    まずは「メタデータリレーションシップ」を選択します。
  4. リレーションのタイプを「Entity Definition」を使用します。
    最初の一つはこれしか選べません。
  5. カスタムフィールド詳細を追加します。と言ってもここでは名称だけですが…
  6. そのまま保存します。

これで基本設定は完了です。

この時点でレコードを作成しようとすると、接続(relation)先のオブジェクト選択ができます。

するとそのまま保存できるようになります。

フィールドの指定

今度はこのオブジェクトに関連する Metadata Relationship (項目)を指定します。

  1. フィールド作成を開始し、Metadata Relationship
  2. 今度は Field Definition で定義します
  3. Controlling Field 項目で先程作成した「Entity Definition」の項目を指定します。
  4. そしてそのまま保存する

そしたら、追加で入力してみましょう。
すると、TargetObject で指定したオブジェクトのフィールドが選択できるようになります。

Apex から利用する

上記を SOQL で単純に取得しようとすると*1

(TдT)ウヴォァー!!

このIDを直接URLに突っ込んでアクセスすると…該当オブジェクトの ObjectManager にリダイレクトする。
これでは Apex で使いようがないぞ…と思っていたら、いい情報を発見した。

salesforce.stackexchange.com

さすが StackExchange だぜ!
ということで再チャレンジ

SELECT 
 TargetObject__c, TargetObject__r.QualifiedApiName,
 TestField__c, TestField__r.QualifiedApiName
FROM TestMetadata__mdt

やっはー!

*1:SalesforceInspector を利用。個人的に利用頻度が高い。