Mark Hammer's blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

MetadataComponentDependency クエリを使ってみた

※この記事は 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'

f:id:mark-hammer:20200330012352p:plain
SOQL実行結果

ちなみに、この時指定した項目のページで「使用場所」ボタンをクリックすると以下の通り、SOQLと同様の結果が表示されます。

f:id:mark-hammer:20200330012554p:plain
「使用場所」ボタンクリック時

使い道を考えてみる

上記のように、 RefMetadataComponentId にカスタム項目を指定した場合は「使用場所」ボタンを押したときと同じ結果が得られる(リンクがある「使用場所」ボタンの方が使い勝手がよい)のですが、反対に MetadataComponentId を指定してみます。
以下例では、先ほどの結果で得られた使用場所のうち「キャンペーンメンバー複数選択」プロセスビルダーのIDを RefMetadataComponentId に指定しています。

SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId
FROM MetadataComponentDependency
WHERE MetadataComponentId = '301280000006oNVAAY'

f:id:mark-hammer:20200330014408p:plain
特定のプロセスビルダーで使用されているカスタム項目をチェック

こうすると、特定のプロセスビルダーで使用されているカスタム項目一覧を取得できました。
今回は2項目だけですが、例えば複雑になったプロセスビルダーやフローで、どの項目が使用されているか知りたくなった時に、要素1つずつチェックせずとも使用項目一覧が確認できる、とは言えると思います。

ちなみに、「ID確認は難しいのでプロセスビルダー名を指定すればもっと使いやすくなるのではないか」ということで以下のようなSOQLを指定してみます。

SELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentName, RefMetadataComponentType, RefMetadataComponentId
FROM MetadataComponentDependency
WHERE MetadataComponentType = 'Flow' AND MetadataComponentName = 'キャンペーンメンバー複数選択'

すると、以下のようにエラーが返ってきます。

f:id:mark-hammer:20200330015007p:plain
MetadataComponentName 指定時エラー

これは、リリースノートにも書いてあるように、MetadataComponentName はWHERE句指定のサポートをしていないことが原因です。

次のクエリはサポートされていません。
(中略)
- SOQL WHERE 句 — MetadataComponentName を使用した任意の検索条件の種別

おわりに

今回は、Spring'20にリリースされた開発者向け機能のうち、MetadataComponentDependency クエリについていろいろSOQLを実行して試してみました。
現時点では、MetadataComponentDependency クエリによる SOQL の結果を得るには対象コンポーネントのIDが必要となるため、使いどころは限られる機能といった印象を受けました。
今後、MetadataComponentName や RefMetadataComponentName 、また利用可能な演算子の拡張があれば、WHERE句による幅広い検索が可能となるため、今後のアップデートに期待したいところです。