はじめに
レポートをユーザーに自由に作らせていると、公開レポートがどんどん増えて整理されず、気付けばカオスな状態になってるなんてことはあるあるだと思います。いざ整理しようと思っても、UIからだと1個ずつしか移動できないので、数百もあると時間がいくらあっても足りない…。
そこで、一括でフォルダ移動や削除ができる方法を試してみたので、その手順をこの記事にまとめました。同じ方法でダッシュボード等も整理やレポート等をバックアップもできるので、ぜひ参考にしていただけるとうれしいです。
環境・バージョン情報
- Windows 11 Home
- VSCode(1.93.1)
- Salesforce CLI(@salesforce/cli/2.58.7 win32-x64 node-v20.17.0)
こんな人向け
- 整理したいレポートが数十以上ある
- Salesforceシステム管理者
- レポートなどをバックアップしておきたい
- 「メタデータをダウンロードする」まででOK。
やりたいこと
6個の公開レポートをフォルダー「Sample」に一括で移動する。
方法
プロジェクトを作成する
コマンドパレット(Ctrl+Shift+P)から「SFDX:マニフェストファイルを使用してプロジェクトを作成」を呼び出す。
「標準」を選択する。
適当な名前を付ける(このプロジェクトフォルダーの名前)。
Salesforce組織へ接続する
コマンドパレットから「SFDX:組織を認証」を呼び出す。
「プロジェクトのデフォルト」を選択する。
組織のエイリアスは特にこだわりなければそのままEnterを押せば「vscodeOrg」になる。
ブラウザでログイン画面が開かれるので、対象のレポートがある組織にログインすると接続が完了する。
VSCodeにOrg Browserタブが表示され、接続した組織のデータが確認できる。「unfiled$public」(公開レポート)直下に並んでいるレポートを一括でSampleフォルダへ移動する。
メタデータをダウンロードする(≒バックアップ)
移動・削除をせず、メタデータをダウンロードで止めておけばバックアップになる。
manifestフォルダのpackage.xmlを開く。
<types>タグに挟まれた部分を↓の記述に書き換える(レポートAPI参照名=レポートの一意の名前)。
<name>Report</name>
<members>[フォルダAPI参照名]/[レポートAPI参照名]</members>
移動したいレポートの分だけ<members>タグを追加してpackage.xmlを保存する。
package.xmlを右クリックし「SFDX:Retrieve Source in Manifest to Org」を選択すると、レポートのメタデータが取得される。
Tips:package.xmlを楽に作る方法
- カスタムレポートタイプでレポートのレポートを作る(「レポートの一意の名前」は必須)
- 1をExcelかcsvにエクスポートする
- CONCAT関数等で
<members>[フォルダAPI参照名]/[レポートAPI参照名]</members>
となるように加工する - まとめてpackage.xmlにコピペする
一括で移動する
移動先のフォルダのAPI参照名と同じ名前のフォルダをローカルに作成する。
エクスプローラー上で対象のレポートを切り取り、移動先のフォルダに貼り付けする。
reportsフォルダを右クリックし、「SFDX:Deploy This Source to Org」をクリックする。
正常に完了すると、Salesforce上でSampleフォルダにレポートが移動していることが確認できる。
注意点
- フォルダごと移動することはできない(デプロイが完了したように見えても実際には移動が反映されない)
- 非公開レポート、非公開ダッシュボードのメタデータは取得できないため移動もできない
一括で削除する
「メタデータをダウンロードする」までは同じ手順で、削除したいレポートのメタデータを右クリックで「SFDX:Delete from Project and Org」を選択する。正常に完了すると、このプロジェクトとSalesforce組織の両方からレポートが削除される。
ごみ箱には残るので間違って削除した場合も復元できる。安心。
トラブルシューティング
Error: read ECONNRESETが出てデプロイできない
多くの場合はネット接続や組織との接続が不安定であることが原因と思われる。当方環境だと、ネットの接続を見直して組織の認証をやり直すとうまくいった。
参考
デプロイすると「Required field is missing:RecordType」と返ってくる
エラーとして返ってきたレポートで参照しているレコードタイプがすでに組織にはないために発生する。あきらめて手動で対応するしかない。
デプロイに失敗するとリクエストはロールバックされるので途中まで反映されている、ということはないので安心。
今後の課題
今回この方法を試すうえで、できたらもっと楽なのにと感じた点。調べる限りよさげな方法見つからなかったのでとりあえず備忘として置いておく。
- 一括で組織内のすべてのレポートやダッシュボードのメタデータを取得する方法はない?
- フォルダのAPI名一覧を取得する方法(SOQLを使えばいい?)
- 定期的にメタデータをバックアップする方法を確立する
参考
- メタデータによるレポートの移動全般
- How do I mass-move reports into one | Salesforce Trailblazer Community
- Updating reports with Eclipse and the Force.com IDE | Teach Me Salesforce (リンクを見失ったので後で更新)
- メタデータダウンロード
- GUIでのメタデータバックアップ
コメント