スクラッチ組織のセットアップ時にレコードを CSV で設定できるようにするプラグイン
やりたいこと
スクラッチ組織で開発するとき、テスト用の初期設定データセットアップがめんどくさいから自動化したい。
sfdx の既存コマンドで満足できない
sfdx
には正式なコマンドとして force:data:tree
が存在するが、このコマンドは JSON を取り込む一方、その方法は SOQL で取得したものを設定する というもの。
SOQL の制限がつくので、あまり複雑なレコード構成ができない…(4階層とか4階層とかリレーションがあるものなど)
どうしたい?
ROR の migrate とかそれに近いことがしたい。
しかし salesforce
は insert / update / delete はSQLのような構文式ではないので、ここは諦めて CSV で書きたい。
作ったもの
なのでこんなもの作ってみた。
インストール
- とりあえず clone してきます
- ディレクトリに入って
yarn && yarn build
コマンドを入力します sf plugins link .
を入力すればOK準備できました
使い方
サンプルスキーマ
とりあえずサンプルのカスタムオブジェクトを用意します。
基本操作
- この組織に認証します(スクラッチ組織を作ってるなら認証はしているはず)
- 適当なディレクトリ(デフォルトは
data
)を作って、次のルールでCSVファイルを作ります。[連番]_[アクション]_[オブジェクト名].csv
- 連番は 1 から始まる数字で、重複禁止。欠番したらそれ以降は処理されません。
- アクションは
insert
,update
,delete
のいずれか。 - オブジェクト名はオブジェクト API 名が指定されます。
- CSV (UTF-8 で指定)の中身は、1行目が項目のAPI名と型を指定し、2行目以降がデータです。
- 1行目項目の書式は
[項目API名]([型])
です。型には次の値が指定できます。ただし、Id 項目だけは型指定しないでください(プライマリキー扱いになるので)。ref
(参照、主従関係等Id参照)bool
(チェックボックス)num
(数値、金額等)per
(パーセント)date
(日付。yyyy-MM-dd
書式)time
(時刻型。HH:mm:ss.sssZ
書式)datetime
(日時型。yyyy-MM-ddTHH:mm(timezone)
書式で、例えば日本時間の23/4/16 午前9時なら2023-04-16T09:00+09:00
)
- Id 項目は実際のID項目ではなく、このインポート操作中のユニークな名称を指定します(この項目だけは、型指定が不要です。)。
- 1行目項目の書式は
サンプル
例えば、こんな構成でファイルを作成します。
data
1_insert_Account.csv
2_insert_Sample__c.csv
3_update_Sample__c.csv
それぞれの中身は
1_insert_Account.csv
取引先を2件 insert します。
Id,Name(text),Phone(text) AccountId1,TestAccount01,09011111111 AccountId2,TestAccount02,09022222222
2_insert_Sample__c.csv
Sample__c
(前述したサンプルスキーマ)に1行追記します。
尚、空欄項目は null
扱いになります
Id,Name(text),Account__c(ref),checkboxField__c(bool),dateField__c(date),datetimeField__c(datetime),numberField__c(num),percent__c(per),textField__c(text),timeField__c(time) Sample01,Sample01,AccountId2,true,2023-04-16,2023-04-16T09:00+09:00,24.9,56,Welcome plugin!,09:00:00.000Z
3_update_Sample__c.csv
Sample__c
の Sample01
に、AccountId2
で指定した取引先を割り当てます。
2 に入れてしまってもいいですが、更新のサンプルです。
Id,Account__c(ref) Sample01,AccountId2
実行サンプル
コマンドとして次のようにお入力します。
因みに、data
ディレクトリに csv がある場合は -d
は省略できます。
$ azalea data apply -u test-9hmhkijjmr5y@example.com -d data
実行後のレコード状態はこんな感じです。
免責
自分が使う規模のことしか考えてません。
あまりに巨大なデータやCSVを扱う、ガバナ制限の対処、例外発生時のトランザクションなどは一切考慮していませんのでお気をつけください。