【Salesforce】バッチからデータローダを使用してCSVにエクスポートする
Salesforceのバージョンが上がり、TLS1.0が無効になりましたね。
その影響により、古いデータローダを使用することができなくなったため、既存のバッチを修正する必要が出てきました。
http://resources.docs.salesforce.com/200/7/ja-jp/sfdc/pdf/data_loader_impl.pdf
データをエクスポートするために必要なものとしては
1.データのマッピングファイル
2.バッチプロセスの設定ファイル
3.暗号化したパスワード
といったところでしょうか。
データローダの中にサンプルがあり、それをコピーして編集すると楽なんだとか。
簡単にAccountをCSVにエクスポートしてみます。
1.データのマッピングファイル
エクスポートしたデータをCSVにする際にしようするマッピングファイルでしょうか。
内容は簡単なもので、「SalesforceのAPI名=CSVの列名」を記述するだけのようです。
今回は関係ありませんが、インポートの場合は「CSVの列名=SalesforceのAPI名」になるようです。
「accountExtractMap.sdl」と名前を付けました。
#Mapping values Id=ID Name=NAME
2.バッチプロセスの設定ファイル
データローダの動作を指定するファイルのようです。
こちらの名前は固定のようです。
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="exportAccount" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false"> <description>"Export Account"</description> <property name="name" value="csvAccountExtract"/> <property name="configOverrideMap"> <map> <entry key="sfdc.debugMessages" value="false"/> <entry key="sfdc.debugMessagesFile" value="C:\DataLoaderTest\sfdcSoapTrace.log"/> <entry key="sfdc.endpoint" value="https://login.salesforce.com"/> <entry key="sfdc.username" value="SalesforceのログインID"/> <!-- password specified below is invalid, please generate one using the encrypt.bat utility --> <entry key="sfdc.password" value="Salesfprceにログインする際のパスワードをエンコードした文字列"/> <entry key="sfdc.timeoutSecs" value="600"/> <entry key="sfdc.loadBatchSize" value="200"/> <entry key="sfdc.entity" value="Account"/> <entry key="sfdc.extractionRequestSize" value="500"/> <entry key="sfdc.extractionSOQL" value="Select Id, Name FROM Account"/> <entry key="process.operation" value="extract"/> <entry key="process.mappingFile" value="C:\DataLoaderTest\accountExtractMap.sdl"/> <entry key="dataAccess.type" value="csvWrite"/> <entry key="dataAccess.name" value="C:\DataLoaderTest\Acount.csv"/> </map> </property> </bean> </beans>
編集が必要なものを記述します。
・beanのid
バッチから呼び出す際のプロセス名
・map内のsfdc.debugMessagesFile
ログの出力先
・map内のsfdc.username
SalesforceのログインID
・map内のsfdc.password
Salesforceのログインパスワードを暗号化した文字列
(3で説明します)
・map内のprocess.mappingFile
1で作成したマッピングファイルのパス
・map内のdataAccess.name
出力するCSVファイルの名前
map内のsfdc.extractionSOQLにて取得するためのSOQLが記述されていることが分かりますね。
この例では「C:\DataLoaderTest」のフォルダに各ファイルを置いています。
3.暗号化したパスワード
2のファイルの「sfdc.password」に記述する文字列です。
データローダの「encrypt.bat」によって、ログイン用パスワードを暗号化します。
コマンドプロンプトで「Data Loader/bin」に移動します。
C:\Windows\system32>cd C:\Program Files (x86)\salesforce.com\Data Loader\bin
パスワードを暗号化します。
[password]をSalesforceにログインする際のパスワードに置き換えてください。
C:\Program Files (x86)\salesforce.com\Data Loader\bin>encrypt.bat -e [password]
暗号化されましたね。
2016-07-28 10:31:22,918 INFO [main] security.EncryptionUtil main (EncryptionUtil.java:365) - [暗号化された文字列]
パスワードと暗号化した文字列を比較します。
暗号化されたことが確認できたら、2で作成した「process-conf.xml」内にある「sfdc.password」のkeyに、暗号化された文字列を記述します。
C:\Program Files (x86)\salesforce.com\Data Loader\bin>encrypt.bat -v [暗号化された文字列] [password]
1~3を終えたところで、コマンドからデータローダを動かしてみます。
コマンドプロンプトで「Data Loader/bin」に移動します。
C:\Windows\system32>cd C:\Program Files (x86)\salesforce.com\Data Loader\bin
「process.bat」を起動します。
今回の例では、[process-conf.xmlのフォルダのパス] は2で記述したように「C:\DataLoaderTest」です。
また、[起動するプロセスID]は、「process-conf.xml」で名前を付けた「exportAccount」ですね。
C:\Program Files (x86)\salesforce.com\Data Loader\bin>process.bat [process-conf.xmlのフォルダのパス] [起動するプロセスID]
実際には…
C:\Program Files (x86)\salesforce.com\Data Loader\bin>process.bat C:\DataLoaderTest exportAccount
Account.csvが作成されたかと思います。
ファイルパスに日本語が含まれていると文字コードの関係かうまく動かないことがあるようです。
さー、バッチを作る作業に戻りましょうか。。
One Response to "【Salesforce】バッチからデータローダを使用してCSVにエクスポートする"