はじめに
本記事はSalesforceを利用したアプリ開発をしている方向けです。
パッケージ開発組織へ任意の初期データを投入するスクリプトを作成したので、その内容について解説します。
以下のコマンド、ツールが利用できることを前提としています。
- sfdx-cli(v7.120.0)
- awkコマンド
- sedコマンド
- trコマンド
※MacOSのターミナル上で実行しています。一部コマンドのオプション等は他環境と異なる可能性があります。
解決したい課題
Salesforceではsfdx:data:tree:import
を利用したデータのインポートが可能です。しかし、一部項目はアプリ上で自動採番されるため、テストデータ(json)を投入する際に該当箇所を手動で書き換えていました。めんどうですね。
以下のフローを自動化することが本記事の目的となります。
- 自動採番されるデータをアプリから取得する
- テストデータ用jsonの該当箇所を書き換える
解決方法
最終的なスクリプト
※npmで利用していたためpackage.jsonからの転記になります。
"scripts" {
"setRecordType": "s=$(sfdx force:data:soql:query -q \"SELECT DeveloperName, Id, Name FROM RecordType WHERE sObjectType='[オブジェクト名]'\" 2>/dev/null | grep -E 'RecordType1|RecordType2' | awk '{print \"s/___\"$1\"___/\"$2\"/\"}' | tr '\\n' ';'); sed -i -e $s test-data/test-data.json;"
}
コマンドごとに分解した解説
1コマンドずつ値がどのようになっているかを追っていきます。
sfdx force:data:soql:query -q \"SELECT DeveloperName, Id, Name FROM RecordType WHERE sObjectType='[オブジェクト名]'\" 2>/dev/null
アプリ側にクエリを投げてレコードタイプを取得します。
実行後
DEVELOPERNAME ID NAME
───────────── ───────────────── ────
RecordType1 0121m000000xxxxxxx 事業会社
RecordType2 0121m000000xxxxxxx 支払先
grep -E 'RecordType1|RecordType2'
grepコマンドで対象行のみ抽出します
実行後
RecordType1 0121m000000xxxxxxx 事業会社
RecordType2 0121m000000xxxxxxx 支払先
awk '{print \"s/___\"$1\"___/\"$2\"/\"}'
awkコマンドを用いてスペースごとにテキストを分割します。
分割したテキストは先頭から$1、$2…という風に番号が振られ、printアクションでそれらを利用してテキストを再構築できます。
実行後
s/___RecordType1___/0121m000000xxxxxxx/
s/___RecordType2___/0121m000001xxxxxxx/
tr '\\n' ';'
trコマンドで改行コードを;に置き換えます
実行後
s/___RecordType1___/0121m000000xxxxxxx/;s/___RecordType2___/0121m000001xxxxxxx/;
sed -i -e $s test-data/test-data.json
sedコマンドを利用してファイル内の文字列を置き換えます。
s/abc/ABC
はabcをABCに置き換えるという意味になります。
test-data.json内で変更する箇所に"___RecordType1___"という文字を仕込んでおくことで取得した値に置き換えてくれます。
"records": [
{
"Name": "株式会社ダイアログ",
"RecordTypeId": "___RecordType1___",
}
]
"records": [
{
"Name": "株式会社ダイアログ",
"RecordTypeId": "0121m000000xxxxxxx",
}
]
最後に
awkやsed、trなど普段使わないコマンドを利用したため勉強になりました。
面倒な作業はどんどん自動化できるようにしていきたいですね。
株式会社ダイアログについて
『物流業界をテクノロジーの力でHAPPYに』
弊社は「物流xITx経営」をキーワードに、W3、Tariffeeといった自社サービスを中心に、他サービス連携やデータプラットフォーム化を通してよりHAPPYな物流を目指して活動しています。
ただいま一緒に働くエンジニアを募集中です。
物流、ロジテック、サービス連携、データプラットフォーム等に興味のある方、カジュアル面談で一度お話しませんか。
詳しい採用情報はWantedly にて。