カスタムメタデータタイプとは
Salesforceでの開発やリリースを計画している時に「オブジェクトのレコードも変更セットやパッケージに含めたい!」 そう思ったことはないでしょうか。
Summer'15で正式リリースされ、先日Developers Japan Blogでも紹介されていたカスタムメタデータタイプという機能は、そんな要望をかなえることができる新機能です。
Salesforceのシステムを構成するメタデータ(設定データ)としては、オブジェクト定義データ、ページレイアウト定義データ、ワークフロー定義データ、ApexClass定義データ、その他様々な定義データがあり、開発者は標準UI設定や時にはコーディングをし、メタデータを作成することでSalesforce上にアプリケーションを構築していきます。
しかし、Salesforceが提供しているメタデータの種類以外の設定データを保持させて、それをApexなどから参照したくなった場合はどうするでしょうか? 例えばオブジェクトの項目として存在しないVisualforce上で表示する選択リスト値、プログラムから外部連携するために必要なシステム情報、トランスレーションワークベンチで管理できない翻訳値などなど・・
こういった場合、今までは「カスタムオブジェクト」「カスタム設定」「カスタム表示ラベル」などで管理することが多かったかと思います。 ただ、前者2つはリリースに設定値となるレコードを含めることができませんし、カスタム表示ラベルはあくまでラベルやメッセージに特化したものなので独自の型や構造体として管理することはできません。
そこで、これらを解決する手段として、カスタムメタデータタイプを使うことができます。 カスタムメタデータタイプの特徴を簡単に書くと、以下のようなものです。
- カスタムオブジェクトのような独自のメタデータ用オブジェクトを作れる
- カスタムメタデータのオブジェクトにレコードを作ることができる
- レコードも変更セットやパッケージに含めてリリースすることができる
- SOQLで取得できる
- SOQLのクエリ数のガバナ制限に影響しない
- テストメソッド内でseeAllDataを付けることなく参照できる
- 現時点で設定およびレコードを作成する標準UIはないがロードマップにはあるらしい(せーふはーばー)
機能的にはカスタム設定の"リスト"に近いと言えますが、「レコードを含めてリリースできる」「テストメソッドで参照できる」「(現時点で)標準UIがない」といった点が異なります。
作り方
先にも述べたように、現時点で設定やレコード登録のUIはありませんが、メタデータAPIを使うことでカスタムメタデータタイプの設定およびレコード登録をすることができます。
メタデータAPIを扱うにはMigrationToolやWorkBenchといったツールを使う方法がありますが、今回はeclipse (Force.com IDE)を使って登録します。
シナリオ
開発画面で表示する選択リスト用のデータとして、以下のようなカスタムメタデータを登録します。
※今回はシンプルな設定にしています
カスタムメタデータタイプの定義
レコードを保存するカスタムメタデータ用のオブジェクト定義はobjectのメタデータディレクトリに入りますが、後ろが__cではなく__mdtになります。
src/object/CustomPickList__mdt.object
続いてカスタム選択リスト(CustomPickList__mdt.object)に入るレコードもメタデータとして定義します。 これは1レコード1ファイルとなり、customMetadataのディレクトリに入ります。
src/customMetadata/CustomPickList.Value01.md
src/customMetadata/CustomPickList.Value02.md
ファイル名は「CustomPickList.Value01.md」のような形式となり
「[オブジェクト名].[DeveloperName].md」とするようです。
ちなみにpackage.xmlは以下の通りです。
これらのファイルができたら、eclipse上からserverへ保存します。
できているか確認
繰り返しになりますがカスタムメタデータタイプは現時点でUIがありません。
今回はSOQLで取得できることと、変更セットに入れられることを確認してみます。
SOQL
execute Anonymousからdebug実行
結果
クエリの取得は問題なくできました。
変更セット
続いて変更セットに入れられることを確認します。
まずオブジェクト定義は「カスタムメタデータ型」というコンポ―ネント種類に入っているのが分かります。
名前がリンクになっていたのでクリックしてみると、オブジェクト定義も見れました。 ただし、残念ながらここから項目を追加変更することはできないようです。
続いてカスタムメタデータのレコードです。 コンポーネントの種類はメタデータの名前がそのまま表示されているようです。 ここは今後もう少しユーザーフレンドリーに変わってくるかもしれませんね。
まとめ
このように現在は標準UIがなくても、メタデータAPIを利用することでカスタムメタデータタイプを利用することはできるようです。 レコードを含めた独自の定義をリリースに入れたい場合は、ぜひカスタムメタデータタイプを利用してみてください。
標準UI(追記)
本投稿を一通り書き終わって公開を待っていたのですが、Winter'16のプレリリース環境を見ていたらカスタムメタデータタイプの標準UIが追加されていました。
(!) せーふはーばーではあるものの、次のバージョンアップでは画面からカスタムメタデータタイプの追加およびレコード作成ができるようになりそうです。
参考情報
・USの公式ブログ ・カスタムメタデータタイプの実装ガイド(PDF)