2024.3.22 「Salesforce - データローダで誤って削除してしまっても "Workbench" ですぐに復元!(お客様のお問合せからの気づきシリーズ)」
お世話になっております。
ウフル カスタマーサポートでございます。
今回は「お客様のお問合せからの気づきシリーズ」と題して、弊社での実際のアプリケーション保守、お客様サポートの現場でスタッフが気づいたことを情報共有させていただきます。
大変だ、データローダで「削除してはいけないレコードまで」一括削除してしまった!
Salesforce 管理者の皆様は、データローダを利用する機会も多いかと思われます。
特に、長期にわたってご利用の場合、データストレージの残りが少なくなってきたために、古いデータの削除を行うこともあるかと存じます。
その場合は、削除対象のレコード一覧を、レポートで条件抽出して Excel にエクスポート、またはデータローダで [Export] してから Excel で開き、絞り込みをして CSV に保存したものを、データローダの [Delete] コマンドで実行するのが一般的です。
しかし、本来は削除すべきではないレコードを、誤って削除してしまった場合は、どうなりますでしょうか。
そのファイルが数件程度ならば、[ごみ箱] を開き、対象のレコードにチェックを付けて「復元」をクリックすればすぐに回復できます。
但し、今回は「データローダを使って一括削除した上での復元」ですから、数件で済むということは恐らくありえないはずです。
ごみ箱のレコード一覧とにらめっこしながら、数千件、場合によっては数万件のレコードを一つ一つ復元するのは、とてもではないですが現実的ではありません。
データローダに「取り消し」ボタンがあればいいのですが、当然ながらそのようなボタンは備わっていないです。
「そうだ、データローダでも [Export All] を使えばごみ箱のデータも取り出せるから、誤って削除したデータを取り出して、[IsDeleted] 列の "TRUE" を "FALSE" に上書きすれば復元できるんじゃないか?」
本記事を執筆しているスタッフはそう思いましたが、[Export All] でごみ箱のデータは取り出せましたが、いざ [Update] をしようとしたとき、[IsDeleted] の項目マッピングで該当する Salesforce 側の項目が表示されていないことに気づきました、そう、データローダでは [IsDeleted] の上書きが出来ないのでした。
IsDeleted = True のデータを新規で [Insert] する方法も考えましたが、他オブジェクトのリレーションがいっぱいあるので、それらの更新を考えたら気が遠くなり、手の動きが一気に鈍くなりました。
さあどうしよう、「削除の取り消し」さえできれば万事解決できるのに・・・。
そのような場合、とあるツールを使えば、削除の取り消しができます。
「Workbench」という、公式の API アクセスツールがあります。
Salesforce ヘルプ - ごみ箱にある複数のレコードを復元する方法
https://help.salesforce.com/s/articleView?id=000384757&type=1
=========================
API にアクセスできる Salesforce エディションであれば、Workbench などのツールで Undelete() API コールを使用すれば、レコードを一括で復元できることがあります。
=========================
Workbench は、Salesforce によって提供されている、ブラウザベースで Salesforce 組織に API でアクセスするツールになります。
forceworkbench (フォースワークベンチ)
https://github.com/forceworkbench/forceworkbench/wiki#general
=========================
Workbench は、管理者や開発者が Force.com API を介して Salesforce.com 組織とやり取りできるように設計された、強力な Web ベースのツールスイートです。Workbench には、Force.com Partner、Bulk、Rest、Streaming、Metadata、Apex API の強力なサポートが含まれており、ユーザーはシンプルで直感的なユーザーインターフェースを使用して、組織のデータとメタデータの両方 Salesforce.com Webブラウザーで直接記述、クエリ、操作、移行できます。
=========================
開発者の便宜を図るうえでオープンソースにて提供されているツールである特性上、Salesforce のスタンダードサポートの範疇には含まれませんが(=何か発生した際にヘルプからカスタマーサポートの問合せを起票しても十分な回答は期待できない)、上記のドキュメントを参照すれば、システム管理者として必要なだいたいのタスクは網羅してます。
今回の「Workbench を使って、誤って削除してしまったレコードを復元する」方法を、画面ショットを交えて順に見ていきましょう。
ログイン画面です。
https://workbench.developerforce.com/login.php
本番組織(Production)か Sandbox かを選択します。
ログインするには利用規約に同意する必要があります。
ユーザ名とパスワードでログイン認証を通過したら、どの操作をどのオブジェクトに行うかを選択します。今回のテーマ「削除を取り消したい」は [Undelete] になります。
操作とオブジェクトの指定が終わったら、実際のプロセスに進みます。
対象ファイルを指定するには、「ID を指定して一件ずつ操作する」か、「複数の ID を含むリストデータのファイルを参照するか」になります。
まずは単一の ID を指定する方法を試してみましょう。
ID 項目に先ほど指定したレコードの ID が紐づけられます。
確認ができたら [Confirm Undelete] をクリックします。
操作の結果にて、Result に無事に "Success" と表示されています。
無事にレコードの復元が完了しました。
ごみ箱を見ると、Undelete 前と後で変化が見られます。
【Undelete 実行前】
【Undelete 実行後】
次は、ID リストをファイル指定する方法を取ってみます。
データローダの Delete 作業の直後なら、Success ログが必ず残っているはずなので、それを使って全件復元してしまうのが最も手っ取り早くかつ確実です。
ID の一覧を CSV 形式で保存しておきます。(データローダで Delete 実行の際の Success ログならそのまま使いまわし可能です)
"From File" を選択し、ファイルを選択します。
CSV からの取り込みの場合は、項目のマッピングが必要です。
CSV ファイルのカラム一行目の、ID を示す項目を選択リストから指定します。
大体の場合は「ID」一列だけ、Success ログの場合も「ID」と「STATUS」しかないので、選択は容易なはずです。
マッピングができたら念のためプレビューで確認しましょう。
[Map Fields] をクリックすると実行直前の画面に遷移します。
[Confirm Undelete] をクリックすると操作が実行されます。
削除取り消しが正常に完了し、リザルトが表示されました。
リザルトの詳細を CSV でエクスポートもできます。([Download Full Results] ボタンをクリック)
もちろん、削除取り消しができるのは、データがごみ箱に残っている場合に限定されます。
ごみ箱を空にしてしまった、もしくはデータローダでいきなり [Hard Delete] (ごみ箱を経由せずデータベース上から物理削除するオプション、Bulk モードでのみ可能)をしてしまった場合は、どうやっても復元できませんのでご注意を。
データローダから通常の [Delete] を行い、ブラウザ上からごみ箱を開き、[組織のごみ箱を空にする] を実行後、サクセスログ CSV から ID をマッチして [Undelete] を試みた際のエラーです。
Entity Is Not In The Recycle Bin (復元を試みたデータはごみ箱に存在しません)とメッセージが表示されています。
こうなったらバックアップから新規インサートをするしか復元方法はなくなります。
======================================
今回は実際のお客様のお問合せから記事のヒントをいただきました。
今後も気づきがありましたら積極的にこちらで共有をさせて頂ければと思います。
お客様からのお問合せが、弊社の宝物となり、ちょっと磨くことで皆様のちょっとした財産になれば幸いです。
今後ともウフル カスタマーサポートチームをよろしくお願いいたします。
コメント