​ ​

【SFDC】linuxでシェルからDataLoaderを呼んでみた

こんにちは。salesforceでの開発などを行なっています、alpacaです。

先日、salesforceのデータローダをlinuxでシェルから動かしてみるということをやってみました。

データローダのコマンドライン実行について、詳細な手順は下記リンク先ページのステップをご参照ください。
データローダのコマンドラインの概要

上記ページにて、「データローダのコマンドラインインターフェースは、Windows でのみサポートされています。」と書かれています。
しかし、データローダはJavaで出来ているので、linux環境にJavaをインストールし、実行することでlinuxからデータローダを動かすことが出来ました。

検証環境は下記です。

$ cat /etc/system-release  
Amazon Linux AMI release 2017.09  
$ java -version  
openjdk version "1.8.0_161"  
OpenJDK Runtime Environment (build 1.8.0_161-b14)  
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

まず、Windowsでの手順はざっくり下記のような感じです。

  1. encrypt.batで、パスワードを暗号化する
  2. csvファイル(データローダで処理するデータ)を作成する
  3. sdlファイル(マッピング)を作成する
  4. process-conf.xml(処理情報)を作成する
  5. process.batで、データローダの処理を実行する

2〜4については、環境関係なくできると思います。上記リンクページなどをご参照ください。
しかし、1,5のバッチファイルはlinuxで実行できない・・困りました。

しかし落ち着いて1,5のバッチファイルの中身を見てみると、どうやらJavaを実行しているようです。
そのJava実行部分のコマンドを、linuxで実行すればできるのでは?ということで下記のようにやってみました。

Windowsにて、process.batは次のように呼び出します。 (参照:ステップ 5: データをインポートする

process.bat "<file path to process-conf.xml>" <process name>

process.batの中身は次のような感じになっています。

〜略〜  
set PROCESS_OPTION=  
if not [%2]==[] set PROCESS_OPTION=process.name=%2  
〜略〜  
"%JAVA_HOME%\bin\java" -cp ..\dataloader-42.0.0-uber.jar -Dsalesforce.config.dir=%1 com.salesforce.dataloader.process.ProcessRunner %PROCESS_OPTION%  
〜略〜

なのでlinuxでも下記のように実行することができました。

java -cp ../dataloader-42.0.0-uber.jar -Dsalesforce.config.dir=<file path to process-conf.xml> com.salesforce.dataloader.process.ProcessRunner process.name=<process name>

あとは上記コマンドをシェルにまとめてlinuxからシェルにてデータローダを動かすことができました!

今回、
process.batについてはlinuxで動作を確認しましたが、
encrypt.batはWindows環境で実行し、暗号化しました。
encrypt.batもlinux環境でうまく動作するのかは検証できていませんが、パスワードの暗号化は最初に一度だけ行えば良いのでシェルにするような必要は特に無いかと思います。

弊社では基本的にみんなmacで仕事をしているので、Windowsだけサポートだと悲しくなりますね。
Windowsに詳しい方、お待ちしております。IISとか教えてください。
macしか愛せない方、是非来てください。

このエントリーをはてなブックマークに追加