dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[Salesforce]Summer'15でGAになるCustom Metadata Typeについて

リリースノートで言うとここ。

http://docs.releasenotes.salesforce.com/en-us/summer15/release-notes/rn_forcecom_development_additional_custom_metadata.htm

上のリリースノートからもリンクが貼られていたけど、詳しい解説っぽいブログ記事。

https://developer.salesforce.com/blogs/engineering/2015/04/custom-metadata-types-ga.html

これを読んで、何ができるようになるのかほんとにざっくりとだけ理解できたのでメモ。

何ができるようになるのか

アプリの設定(Configuration)やプリセットデータなど(メタデータでなくレコードとして作っていたもの)を、
「パッケージに含めたり 」「Sandbox から変更セットとして本番組織にリリースする」ことができるようになる。

何が問題だったか

カスタムオブジェクトやカスタム項目 それ自体メタデータとしてパッケージに含めたりすることはこれまでも可能だったが、
アプリの設定をカスタムオブジェクトのレコードとして持たせていた場合、あるいは特定のオブジェクトのプリセットデータみたいなものをアプリで用意していた場合、(メタデータではないので)パッケージに含めることができなかった。

そのため、アプリの設定項目をレコードで持たせたい開発者はインストール後にレコードを生成するために
Apex 側でコード書いてがんばったり、カスタム設定(Custom Settings)でうまく回避する必要があった。

その必要が Custom Metadata Type の登場によってなくなりますよ、という話らしい。

サンプル

上の話と若干逸れてしまうが、リンク先の記事のコメントに Dreamforce 14 の動画が紹介されてたので軽く見てみた。

http://dreamforce.vidyard.com/watch/Wzzbh7ebd1PgNRBllkwQ8g

ここでは、Demo として再利用可能な選択リスト(Reusable Picklists)を作っていた。

f:id:dackdive:20150430171352p:plain

内容としては

1) ReusablePicklist__mdt というテーブルで選択リストそのものの定義。
(Planets という選択リスト項目そのものの定義)

選択リストの項目については 2) PicklistEntry__mdt で定義
(Planets の値は Mercury と Venus と Earth と...、並びは順に 1, 2, 3, ...)

で、それが実際にどのカスタムオブジェクトのどの項目に使われるのかを 3) PicklistUsage__mdt で定義
(Greetings__c オブジェクトの PlanetVisited__c フィールドと
Bookings__c オブジェクトの Destination__c フィールドに、
同じ内容の選択リスト Planets を使います、というように)

かなあ。。。(英語がわからないので)

今のところわからないこと

肝心の実装方法とかについては情報なし。
あと、Custom Metadata Type なので機能自体は「独自のメタデータタイプを作成できる」ということなんだろうけど
そのことと上述した問題が解決されるっていう話があまり自分の中でつながってない。。。

その他

また、以下はリリースノートから引用。

Use SOQL queries to retrieve data from custom metadata types and their records. Unlike other Apex transactions, you can make unlimited SOQL queries for custom metadata types and records.

ガバナ制限がないらしい。

See the Custom Metadata Types Implementation Guide (not available until release time)

ということなので、専用の開発者ガイドみたいなドキュメントがリリース時には公開されるそうです。

あとは、ブログ記事のコメントで見たけど
Summer'15 から権限セットとカスタム設定も管理パッケージから削除できるようになるそう。

http://docs.releasenotes.salesforce.com/en-us/summer15/release-notes/rn_forcecom_isvforce_packaging_deleting_components.htm?edition=&impact=

カスタム設定やめて Custom Metadata Type に移行しよう!という布石か。