sfコマンドの制限を克服:Salesforceダッシュボードの組織間移行実践ガイド

sfコマンドの制限を克服:Salesforceダッシュボードの組織間移行実践ガイド

本記事では、Salesforceのsfコマンドを使用したダッシュボードの組織間移行について解説します。 現在、sfコマンドではダッシュボードのメタデータを直接取得できない制限があります。そこで、この制限を克服するためのワークアラウンドとして、SOQLクエリとシェルスクリプトを組み合わせた方法を紹介します。ダッシュボードとそのフォルダのメタデータを取得し、別組織へ移行する具体的な手順を、コマンド例を交えて詳しく説明します。 Salesforce管理者や開発者にとって、効率的なダッシュボード管理の一助となれば幸いです。
Clock Icon2024.11.11

情報システム室の進地@日比谷です。

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

See Also

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.