【Salesforce】どこに保存されているかわからないデータを抽出する方法

2022.01.18

Hola〜みなさんこんにちは!Salesforceシステム管理者の清水です。

今日はSOSLを使って、不特定多数のオブジェクトの「どこか」の項目に保存されているレコードを、抽出した手順を記載したいと思います。

普段データの抽出を行うときには、特定のオブジェクトの、特定の項目まで把握している状態なので、ユーザーの方でSalesforceのレポートを作成するだけで事足りることが多かったです。しかし今回の要件では不特定多数のオブジェクトに存在している可能性があり、かつどの項目に該当のデータが保存されているのかわからないといった内容だったので、レポートでは抽出は難しいと判断しました。

SOSL クエリを利用する

レコードを抽出するには?

調べてみるとシステム管理者側で出来る方法として、通常のSOQLで抽出する方法とは別に、SOSLを利用する方法がありました。SOQLでは一度に1つのオブジェクトからしか特定の情報を検索出来ないのに対して、SOSLでは一度に複数のオブジェクトから検索可能なようです。

SOQL および SOSL の概要 | SOQL および SOSL リファレンス | Salesforce Developers

また制限として、SOSLでは1つのオブジェクトにつき2000件までしか取得できないということなので、それを超える可能性がある場合には、検索結果の並び替えをしてあげるなどの工夫は必要です。

検索結果に対する SOSL の制限 | SOQL および SOSL リファレンス | Salesforce Developers

ORDER BY 句 | SOQL および SOSL リファレンス | Salesforce Developers

今回の要件ではSOSLの利用が良さそうなので、これを踏まえた上でデータを抽出してみます。

SearchQueryを開発者コンソールで実行する

参考にしたのはこちらです。

FIND {SearchQuery} | SOQL および SOSL リファレンス | Salesforce Developers

今回の要件では、社内マニュアルのURLを含んでいるレコードとそのレコードの項目に入っている値を確認したいといったものでした。

可能性がありそうなオブジェクトを全て指定してあげて、以下のような構文を実行してみました。

FIND {classmethod.atlassian.net/wiki} IN ALL FIELDS RETURNING Account, Contact, Opportunity, Lead, Campaign, Task

レコードIDが表示され、各オブジェクトにそれぞれいくつ該当レコードがあるか表示されているかがわかります。

データローダーを使う事はできない

ちなみに、データローダーではSOSLは動作しないのか?と思った方もいらっしゃるかもしれません。

データローダーの場合、SOQLしか対応していないので、SOSLでは動作せずエラーとなりますのでご注意ください。

データのエクスポートを行う

開発者コンソールはデータをエスクスポートできない

次に開発者コンソール上で表示された、レコードIDを別のツールを使ってその後の処理を行いたいのでエクスポートします。

開発者コンソールを触ったことがある方ならみなさんご存知だと思いますが、こちらのツールそのままだとデータのエクスポートの機能が実装されておらず、またデータを選択してコピーすらできません。

Chrome拡張機能を利用

標準機能ではできないため、以下のツールを利用しデータの抽出を行います。

SDFC Dev Console Data Exporter - Chrome ウェブストア

こちらを利用すると、実行直前に開発者コンソールで開いた全てのタブの結果が別ウィンドウで開き、そのままCSVとしてダウンロードが可能になります。

CSVはこのようなデータになります。

一致したレコードを全件データに結合する

Alteryxを利用して、SOSLで取得したレコードを全件データと結合させる

今の状態ですと、社内マニュアルのURLを含んでいるレコードは特定ができましたが、実際のレコードのどの項目に何が入っているかまではわかりません。そのため取得したレコードIDと、Salesforceの各オブジェクトの全件データを結合してデータを取得します。

ここで以前にもご紹介したAlteryxの登場です。

Alteryxを使ってSalesforceのテストレコードの投入をしやすくしたお話

Alteryxの詳細は以前の記事をご参考にしていただきたいのですが、オブジェクトの全件データとSOSLで取得したレコードID同士を結合するだけです。

結果、以下のようにデータの確認が可能となりました。

終わりに

Salesforceのみで全ての作業を行おうとすると、SOSLを利用しキーワード検索までしか行うのが難しいかと思います。

そのためAlteryxのような2つのデータを結合するツールを利用すると、このような作業は短時間で可能になるかと思います。どなたかの参考になれば幸いです。