tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:SalesforceDXプロジェクトのdataフォルダの利用を試してみました

SalesforceDXプロジェクトのdataフォルダの利用を試してみました。「data」フォルダはプロジェクトのデフォルトフォルダではありませんが、テストデータのインポート作業でサンプルコードがこの名称でフォルダを用意していました。


スクラッチ組織作成後にファイルをインポートする形でテストデータを一括登録するコマンドが用意されています。

sf data import tree -p data/sample-data-plan.json


インポートファイルはCSV形式ではなく、JSON形式で用意する感じでした。
(Dreamhouse-lwcのサンプルプロジェクトで確認)

brokers-data.json

brokersオブジェクトのレコード情報。


contacts-data.json

取引先責任者オブジェクトのレコード情報。


sample-data-plan.json

インポート対象となる複数のファイルをまとめたもの。プラン定義ファイルと呼ばれる。


取り込み対象のレコードの情報は「-data.json」という命名で、複数レコードのリレーション設定は「-data-plan.json」という命名のようです。この命名ルール出ないとエラーになるわけではなさそうですが、こちらを参考して進めました。

インポートファイルの用意

今回は取引先と取引先責任者のインポート操作を試しました。まずは取引先のインポートファイルの作成です。JSON形式で1から作成するのは大変なので、exportコマンドで既存データからJSON形式で取得したものを使用します。


手順としては最初にqueryフォルダを作成して、その中にgetAccounts.txtファイルを用意します。このファイルの中で取引先オブジェクトに対するSOQLクエリを宣言します。エクスポートコマンドのクエリの実行条件として使用できます。


エクスポートコマンドの内容です。-qでクエリファイルのパスを指定、 -dで出力先を指定。-oで対象組織を指定してます。

sf data export tree -q query/getAccounts.txt --plan -d export-out -o sfdc-my-playground


実行するとこのようにファイルが出力されます。


このファイルの値を変更してテストデータを用意する感じです。


インポート用のJSONファイルの用意ができたら、dataフォルダを作成します。その中に先程のJSONファイルを編集したものを「accounts-data.json」のファイル名にして格納します。また覚えておくべき点として、子オブジェクトの紐付けがある場合、referenceIdのフィールドで宣言した値が紐付け時の判定で使用されるようです。


contacts-data.jsonファイルも似たような感じで用意します。AccountIdで取引先と紐付けますが、先頭に @ とつけて取引先JSONファイルのreferenceIdに指定した文字列を宣言すると紐付けされるようになっています。


最後に「-data-plan.json」という感じのファイル名でプラン定義ファイルを作成します。のインポート処理で使用する複数のファイルを定義するためのファイルとなります。


プラン定義ファイルのsaveRefsとresolveRefsの意味については、web検索で調べてみたところ、大まかな内容確認できました。とりあえず、resolveRefsをtrueと宣言することで、「@ referenceId 」による紐付け処理が有効になるみたいです。

インポートコマンドの実行

今回用意したインポート作業用のファイルは次の3ファイルです。

  • accounts-data.json : 取引先データの情報。
  • contacts-data.json : 取引先責任者データの情報。
  • accounts-data-plan.json : プラン定義ファイル。複数のインポートデータをまとめて処理を実行できる。


インポートコマンドは次のようになります。

sf data import tree -p data/accounts-data-plan.json -o sfdc-my-playground


実行結果です。対象件数分のデータのINSERTに成功しました。


実際に取引先ページを見てみると予定どおりに取引先データが作成されていました。


また、取引先責任者も取引先に紐付く形で登録ができていました。


Salesforce DX プロジェクトのdataフォルダを使ったテストデータのインポート作業はこのような感じで実行できました。dataフォルダ自体はデフォルトでは作成されていないフォルダなので必ずしもこの命名にする必要はありませんが、サンプルコードなどでよく使われているのでそれに合わせておいたほうがイメージしやすい気がします。


最初、dataフォルダの中にimportフォルダ、exportフォルダと用意して管理した方が良いかと思いましたが、exportフォルダは「export-out」のような命名でサンプルコードが用意されていたので、別フォルダ管理で良い気がします。


今回のデータインポート機能はスクラッチ組織やSandbox組織作成時のテストデータの初期投入用です。そのため用意したテストデータのJSONファイルはGitのバージョン管理の対象に含めて、プロジェクト内で繰り返し利用する使い方となります。(テストデータなので本番データは含めないようにします。)


エクスポートデータについては、基本的に繰り返し利用するという必要は無いはずです。「export-output」フォルダのように別に分けた際には.gitignoreでGit管理の対象外に設定しておくと良いと思います。


準備は少し大変ですが一度用意できればSandbox組織を作成するたびに初期データの投入で利用できるので便利なコマンドとなります。うっかり本番環境に対して実行したりしないようにの注意だけ気をつけた方が良さそうです。