※この記事は Salesforce 開発者向けブログキャンペーンへのエントリー記事です。
はじめに
2020/2にリリースされた Spring'20。
今回はSpring'20にリリースされた開発者向け機能のうち、MetadataComponentDependency クエリを触ってみました。
内容
以下、リリースノートより抜粋。
多くの組織には、使用しなくなったさまざまなメタデータコンポーネント (カスタムオブジェクトや項目など) が散乱しています。Tooling API の MetadataComponentDependency オブジェクトを使用する Dependency API 機能を使用して、組織内のメタデータコンポーネント間の連動関係を表示できます。この情報を基に、コンポーネントを削除しても問題ないかどうかを判断することができます。コンポーネント間で連動関係を見つければ、メタデータをパッケージに分割する場合にも役立ちます。単一の組織を操作する代わりにパッケージのセットを操作することで、変更の管理やバージョン管理の使用、継続的インテグレーションシステムの使用が容易になります。
簡単にいうと、Winter'20で正式リリースとなった項目の参照の確認をAPI経由でも利用可能になった、と理解しています。
実際に利用してみる
それでは、実際にSOQLを実行してみましょう。
MetadataComponentDependency クエリを管理者コンソールから実行する際は、「Use Tooling API」を有効にする必要があります。
今回はキャンペーンメンバーオブジェクトのカスタム項目を対象にしています。
SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId FROM MetadataComponentDependency WHERE RefMetadataComponentId = '00N2800000FHCbbEAH'
ちなみに、この時指定した項目のページで「使用場所」ボタンをクリックすると以下の通り、SOQLと同様の結果が表示されます。
使い道を考えてみる
上記のように、 RefMetadataComponentId
にカスタム項目を指定した場合は「使用場所」ボタンを押したときと同じ結果が得られる(リンクがある「使用場所」ボタンの方が使い勝手がよい)のですが、反対に MetadataComponentId
を指定してみます。
以下例では、先ほどの結果で得られた使用場所のうち「キャンペーンメンバー複数選択」プロセスビルダーのIDを RefMetadataComponentId
に指定しています。
SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId FROM MetadataComponentDependency WHERE MetadataComponentId = '301280000006oNVAAY'
こうすると、特定のプロセスビルダーで使用されているカスタム項目一覧を取得できました。
今回は2項目だけですが、例えば複雑になったプロセスビルダーやフローで、どの項目が使用されているか知りたくなった時に、要素1つずつチェックせずとも使用項目一覧が確認できる、とは言えると思います。
ちなみに、「ID確認は難しいのでプロセスビルダー名を指定すればもっと使いやすくなるのではないか」ということで以下のようなSOQLを指定してみます。
SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId FROM MetadataComponentDependency WHERE MetadataComponentType = 'Flow' AND MetadataComponentName = 'キャンペーンメンバー複数選択'
すると、以下のようにエラーが返ってきます。
これは、リリースノートにも書いてあるように、MetadataComponentName はWHERE句指定のサポートをしていないことが原因です。
次のクエリはサポートされていません。
(中略)
- SOQL WHERE 句 — MetadataComponentName を使用した任意の検索条件の種別
おわりに
今回は、Spring'20にリリースされた開発者向け機能のうち、MetadataComponentDependency クエリについていろいろSOQLを実行して試してみました。
現時点では、MetadataComponentDependency クエリによる SOQL の結果を得るには対象コンポーネントのIDが必要となるため、使いどころは限られる機能といった印象を受けました。
今後、MetadataComponentName や RefMetadataComponentName 、また利用可能な演算子の拡張があれば、WHERE句による幅広い検索が可能となるため、今後のアップデートに期待したいところです。