【Salesforce】バッチからデータローダを使用してCSVにエクスポートする

【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にエクスポートする"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です