8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SalesforceテストデータのTypeID書き換えを自動化した

Last updated at Posted at 2021-12-20

はじめに

本記事はSalesforceを利用したアプリ開発をしている方向けです。
パッケージ開発組織へ任意の初期データを投入するスクリプトを作成したので、その内容について解説します。
以下のコマンド、ツールが利用できることを前提としています。

  • sfdx-cli(v7.120.0)
  • awkコマンド
  • sedコマンド
  • trコマンド
    ※MacOSのターミナル上で実行しています。一部コマンドのオプション等は他環境と異なる可能性があります。

解決したい課題

Salesforceではsfdx:data:tree:importを利用したデータのインポートが可能です。しかし、一部項目はアプリ上で自動採番されるため、テストデータ(json)を投入する際に該当箇所を手動で書き換えていました。めんどうですね。
以下のフローを自動化することが本記事の目的となります。

  1. 自動採番されるデータをアプリから取得する
  2. テストデータ用jsonの該当箇所を書き換える

解決方法

最終的なスクリプト

※npmで利用していたためpackage.jsonからの転記になります。

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___"という文字を仕込んでおくことで取得した値に置き換えてくれます。

test-data.json(実行前)
    "records": [
        {
            "Name": "株式会社ダイアログ",
            "RecordTypeId": "___RecordType1___",
        }
    ]
test-data.json(実行後)
    "records": [
        {
            "Name": "株式会社ダイアログ",
            "RecordTypeId": "0121m000000xxxxxxx",
        }
    ]

最後に

awkやsed、trなど普段使わないコマンドを利用したため勉強になりました。
面倒な作業はどんどん自動化できるようにしていきたいですね。


株式会社ダイアログについて

『物流業界をテクノロジーの力でHAPPYに』
弊社は「物流xITx経営」をキーワードに、W3、Tariffeeといった自社サービスを中心に、他サービス連携やデータプラットフォーム化を通してよりHAPPYな物流を目指して活動しています。
ただいま一緒に働くエンジニアを募集中です。
物流、ロジテック、サービス連携、データプラットフォーム等に興味のある方、カジュアル面談で一度お話しませんか。
詳しい採用情報はWantedly にて。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?