sfコマンドの制限を克服:Salesforceダッシュボードの組織間移行実践ガイド
情報システム室の進地@日比谷です。
sfコマンドを使うとSalesforce組織間のメタデータの移行を便利に行うことができます。
# sfコマンドでApexコードを組織間移行する例
# 1. まず(例えば)production組織からApexClassを取得
$ sf project retrieve start -o production --metadata ApexClass
# 2. そして、target組織にApexClassをインポート
$ sf project deploy start -o target --metadata ApexClass
しかし、2024/11/11現在、sf project retrieve --metadata Dashboard
コマンドでダッシュボードのメタデータを取得できないため、ダッシュボードの移行においては一工夫必要です。そこで、この記事ではダッシュボードの組織間移行の方法についてまとめてみました。
ダッシュボードのメタデータを取得する方法
ダッシュボードのメタデータを取得するには、sf project retrieve
コマンドの --metadata
オプションに次のフォーマットで指定しなくてはなりません。
`Dashboard:ダッシュボードのFolderName/ダッシュボードのDeveloperName'
ダッシュボードのFolderNameとDeveloperNameは次のSOQLで取得できます。
SELECT DeveloperName, FolderName FROM Dashboard
以上を組み合わせて、組織に存在する全ダッシュボードのメタデータを取得するには次のようなスクリプトを用意するのが楽です。
#!/bin/bash
sf data query -o production --query "SELECT DeveloperName, FolderName FROM Dashboard" --json |
jq -r '.result.records[] | "Dashboard:" + .FolderName + "/" + .DeveloperName' |
while read -r dashboard; do
cmd="sf project retrieve start -o production --metadata '${dashboard}'"
echo "Executing: $cmd"
eval "$cmd"
done
このスクリプトを実行すると、 force-app/main/default/dashboards/
配下にダッシュボードのメタデータが生成されます。
ただし、この状態では生成されるのはあくまでダッシュボードのメタデータのみで、ダッシュボードフォルダのメタデータは生成されません。そこで、次のスクリプトも用意、実行して、ダッシュボードフォルダのメタデータを生成します。
#!/bin/bash
BASE_DIR='force-app/main/default/dashboards/'
find "$BASE_DIR" -mindepth 1 -maxdepth 1 -type d | while read -r dir; do
dashboardFolder="Dashboard:"$(basename "$dir")
cmd="sf project retrieve start -o production --metadata '${dashboardFolder}'"
echo "Executing $cmd"
eval "$cmd"
done
これで準備完了です。
メタデータを使ってダッシュボードを移管する
ダッシュボード(とダッシュボードフォルダ)のメタデータを生成したら、別組織へのデプロイは下記のコマンドで行います。
$ sf project deploy start -o target --metadata Dashboard DashboardFolder