Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

データローダをバッチで自動化してみた

こんにちは、ロジカル・アーツの岡田です。

データローダを自動で決まった時間に動かすために、先日バッチの開発について学習しました。 注意点も上げながらバッチの作成方法を(暗号化キー・暗号化パスワードを主に)まとめたいと思います。
※バッチ作成を行う際は、使用するデータローダバージョンの確認が必須です。

フォルダーの構成

今回は検証の為の作業フォルダーを一つ作成します(下記写真では「blogbatch」)。その中に下記フォルダーを配置していきます。
※作成するバッチの内容によってフォルダー数、格納場所は変わります。

1、.dataloader : keyファイル/keyテキストの格納
2、bin : バッチファイル格納
3、conf : 項目の対応付けファイル・設定ファイル等を格納
4、in : CSVファイルなどを格納
5、log : ログファイルを格納

f:id:logicalarts:20200131102733p:plain

バッチ作成の手順

前準備

まずデータローダをインストールします。バージョンによってこの後行う作業方法に分岐が生じるので、もし自動化したい環境でデータローダのバージョン指定がある場合は環境に合わせたものをインストールする必要があります。
データローダの最新バージョンをインストールするには、Salesforceにログイン→クイック検索で「データローダ」を検索。 旧データローダのインストールは下記サイトからダウンロードできます。

古いバージョンのデータローダのインストール

下記作業からデータローダのバージョンで作成方法が変わるため、バージョンごとにまとめています。

1-1、暗号化キーの作成(Ver.42以前)

  1. 任意の場所にkey.txtといテキストファイルを作成します。
    このブログでは上記フォルダー構成にある「.dataloader 」内に格納しています。

  2. コマンドプロンプトを開きデータローダのbinフォルダーへ移動します。
    ・例: cd C:\Users\Logical\dataloader\bin

  3. 暗号化キーを生成するため、encrypt.bat -g OptionalText の "OptionalText" を任意の文字で置き換えます。
    以下画像は実際にキーを作成したものです。下線部が任意の文字、赤枠内が出力された暗号化キーです。
    f:id:logicalarts:20200121160931p:plain

  4. キーは1、で作成したテキスト(key.txt) に貼り付けます。
    これで暗号化キーの作成ができました。

1-2、暗号化キーの作成(Ver.43以降)

  1. コマンドプロンプトを開きデータローダのbinフォルダーへ移動します。
    ・例: C:\Users\Logical\dataloader\bin

  2. 暗号化キーファイルを生成するため、encrypt.bat -e Keyfileの "Keyfile" を、任意の場所と拡張子が.keyのテキストファイルを含むパスに変更します。
    以下画像は実際にキーを作成したものです。下線部が任意の場所と拡張子が.keyのテキストファイルを含むパス、赤枠内が出力された暗号化キーです。 f:id:logicalarts:20200206174443p:plain これで暗号化キーの作成ができました。

2-1、暗号化パスワードの作成(Ver.42以前)

 1-1で作成した暗号化キーを用いて暗号化パスワードを作成します。

  1. コマンドプロンプトencrypt.bat -e password KeyfilePathの”password”を、データローダでSalesforceにログインするユーザのパスワード、”KeyfilePath”は1-1で作成したキーファイル名(key.txt)を含むパスに置き換えます。
    以下の画像は実際に暗号化したパスワードを作成したものです。赤線が Salesforce にログインするために使用するパスワード、赤枠内が出力された暗号化パスワードです。
    これで暗号化パスワードの作成は完了です。
    f:id:logicalarts:20200129095402p:plain

  2. 「config.properties」ファイルをdataloader>samples>confからコピー、1-1で作成した「conf」内に貼り付けます。
    その中に、1-1で出力されたキーのフルパスと、パスワードを、”process.encryptionKeyFile”、”sfdc.password”の値として設定します。
    この「config.properties」には接続先情報やプロキシ設定、ログ出力設定等、必要なものを記載します。 f:id:logicalarts:20200129100347p:plain

2-2、暗号化パスワードの作成(Ver.43以降)

 1-2で作成した暗号化キーファイルを用いて暗号化パスワードを作成します。

  1. コマンドプロンプトencrypt.bat -e password KeyfilePathの”password”をデータローダでSalesforceにログインするユーザのパスワード、”KeyfilePath”は1-2で作成したkeyファイルを保存したディレクトリとファイル名に置き換えます。
    以下の画像は実際に暗号化したパスワードを作成したものです。赤線が Salesforce にログインするために使用するパスワード、赤枠内が出力された暗号化パスワードです。
    f:id:logicalarts:20200206174513p:plain これで暗号化パスワードの作成は完了です。 ここからデータローダ42以前のバージョンと手順は同じなので省略します。

3、項目の対応付けファイル・データローダの設定ファイルの作成

  • 対応付けファイル
    拡張子を”.sdl”として作成し、1-1で作成した「conf」内に配置。
    対応付けファイルに関しては、 以下の様に設定します。
    ・等号符の左:データソース
    ・等号符の右:保存先項目

 f:id:logicalarts:20200128155125p:plain

   詳細は下記サイトを参照ください。
  「項目の対応付けファイルを作成する

  • 設定ファイル
    データローダのディレクトリから”\samples\conf”に進んだ先の「process-conf.xml」をコピーし、こちらも「conf」に配置します。
    設定ファイルはデータローダがデータを処理するために必要な情報が含まれているので、必要な箇所のみ編集します。

f:id:logicalarts:20200206174851p:plain    こちらも詳細は下記サイトを参照ください。
  「設定ファイルを作成する

4、バッチファイルの作成と実行

バッチファイル(拡張子は.bat)の作成方法は、ファイルにコマンドプロンプト上で入力するコマンドを入力するのみです。
主流なコマンドとしては、
・「call」で別のバッチファイルを呼び出す
・「copy」でファイルをコピーする
・「move」でファイルを移動させる
例を挙げればたくさんあります。
それでは実際にデータローダーを動作させるバッチファイルを作成してみます。
下記コードはインポートを行うバッチファイルの例です。

rem auto_execution.bat

cd C:\Users\Logical\Desktop\blogbatch\in

rem test.csvが存在すれば、移動してdataloader.batを呼び出し、なければ処理終了
if exist test.csv (
 cd C:\Users\Logical\Desktop\blogbatch\in
) else (
 exit
)

call dataloader.bat

cd C:\Users\Logical\Desktop\blogbatch

rem logrename.batを呼び出し
call logrename.bat test.csv C:\Users\Logical\Desktop\blogbatch\in

”cd”コマンドでディレクトリの移動を行い、csvファイルが確認できたら”call”コマンドで「dataloader.bat」を呼び出してデータローダを起動、動作させています。 csvファイルが見つからない場合は動作を停止させています。
次に、”call”コマンドで「logrename.bat」を呼び出します。

rem logrename.bat
cd C:\Users\Logical\Desktop\blogbatch\log

rem データローダーで吐き出されたsuccessとerrorのcsvファイルの名前を変更
for /F "tokens=1* delims=" %%a in ('dir /b /O:D C:\Users\Logical\Desktop\blogbatch\log\error*.csv') do set fname1=%%a
for /F "tokens=1* delims=" %%a in ('dir /b /O:D C:\Users\Logical\Desktop\blogbatch\log\success*.csv') do set fname2=%%a

echo %%fname1%%

echo %%fname2%%

set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set date2=%year%%month%%day%

rem 変数year、month、monthをdate2に代入し、日付のついたファイル名に変更
rename %fname1% %date2%_error.csv
rename %fname2% %date2%_success.csv

「logrename.bat」はログのファイル名を変更するバッチファイルです。変数を使い”rename”で独自の名前に変更しています。

rem auto_execution.bat
cd C:\Users\Logical\Desktop\blogbatch

rem add_date.batを呼び出し
call add_date.bat test.csv

先程の「auto_execution.bat」から”call”コマンドで「add_date.bat」を呼び出します。

rem add_date.bat
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set date2=%year%%month%%day%

rem  読み込み元のcsvファイルの名前を変更し、別フォルダに移動させる
cd C:\Users\Logical\Desktop\blogbatch\in
rename %1 %date2%_%1
move %date2%_%1 ..\DATA\

「add_date.bat」はインポートで使用したcsvファイルの名前を変更し、別のフォルダーへ移動させています(フォルダー構成上にないフォルダーを指定しています)。これで一連の処理は終了です。
「auto_execution.bat」については切り分けて説明したので、下記に全容を記載しておきます。

rem auto_execution.bat
cd C:\Users\Logical\Desktop\blogbatch\in

if exist test.csv (
 cd C:\Users\Logical\Desktop\blogbatch
) else (
 exit
)

call dataloader.bat

cd C:\Users\Logical\Desktop\blogbatch

call logrename.bat test.csv C:\Users\Logical\Desktop\blogbatch\in

cd C:\Users\Logical\Desktop\blogbatch

call add_date.bat test.csv

上記のバッチファイルは一例となります。コマンドはたくさんあるので、いろいろ調べてみても面白いですよ。 バッチファイルができたら、あとは元となるファイルをたたくと起動してくれます!

まとめ

データローダのバージョンによって多少作成方法に違いはありますが、大きな違いはありません。注意する点は、ファイルの配置場所です。
ファイルを固めて同じフォルダー内に置いてバッチファイルを作成することで、環境が変わってもバッチ内のパスを変更すれば簡単に起動させることができます。上記で紹介しているインポートを行うバッチファイルは、すべてbinフォルダーと同じディレクトリに置くようにしています。
開発環境で動作させるとは限らないので、その点に注意すれば後々使いまわせるので便利ですよ!