#
ドキュメント

Document

自分のための備忘録です。

データローダ バッチ処理 & Windowsタスクスケジューラ

Ref.

インストール要件

Windows のシステム要件
データローダは Windows で署名されています。Windows 用のデータローダを使用するためのシステム要件は、次のとおりです。
Microsoft® Windows® 10 (64 ビット、Intel x86 版)
120 MB のハードディスクの空き容量
256 MB の空きメモリ
Windows 用の Java Runtime Environment (JRE) バージョン 11 以降 (Zulu OpenJDK バージョン 11 以降など)

ref. https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/installing_the_data_loader.htm

前提

  • データローダ v52.0.0 の情報です
  • ドキュメントの {{...}} は適宜読み替えてください

必要なもの

  • Zule OpenJDK 11
  • データローダー(Salesforce管理画面からダウンロード可能)
  • セキュリティトークン
    • Salesforce管理画面から発行(登録メールアドレスに送信)
1442c8c6-0439-4ac1-8e75-ee82756476df

Zule OpenJDK 11

  1. ダウンロード
  2. インストール
  3. 環境変数にJAVA_HOMEを設定

ダウンロード

Download Azul Zulu Builds of OpenJDKからZule OpenJDK 11をダウンロードします。

zulu

※ データローダはOracleのJDKではなくZulu OpenJDK 11を使用します(2021-10-07時点)。

インストール

C:\Program Files\Zulu\zulu-11\にインストールした前提で勧めます。

環境変数にJAVA_HOMEを設定

システムのプロパティを表示するにはWindows + rに以下を入力する。

sysdm.cpl
environments

新規より変数名JAVA_HOMEを追加します。

  • 変数名:JAVA_HOME
  • 変数値:Zule OpenJDK 11インストールフォルダ(本ドキュメントの例ではC:\Program Files\Zulu\zulu-11\
java_home

データローダ

Salesforce管理画面からインストールしてください。 本ドキュメントではC:\Uesr\my-user\dataloader\v52.0.0にインストールした前提で進めます。

バッチ処理

データローダをダウンロードしたディレクトリにsampleがあるので、それをコピーして作成。
C:\Users\my-user.dataloaderに以下を作成。

.dataloader
  |
  |-- conf
      |
      |-- accountMap.sdl
      |
      |-- process-conf.xml
  |
  |-- data
  |
  |-- log
  |
  |-- status
  |
  |-- dataLoader.key <-- 「データローダ用暗号化パスワード生成」で作成される

基本的にはマップファイルxxxMap.sdlprocess-conf.xmlを作成する。

手順

  1. データローダ用暗号化パスワード生成
  2. process-conf.xmlなどにバッチ処理の設定内容を記載
    • 実際にはその他にもいくつか設定ファイルが必要です
  3. バッチ実行
  4. ↑をタスクスケジューラで実行

データローダ用暗号化パスワード生成

データローダ用暗号化パスワードには以下情報が必要です。

  • Web管理画面ログインパスワード
  • セキュリティトークン

データローダ用暗号化パスワード生成は2つのステップが必要です。

Step1 dataloder.keyを作成

$ cd C:\Uesr\my-user\dataloader\v52.0.0\bin
$ encrypt -k
# デフォルトでは以下フォルダにdataloader.keyが作成されます。
C:\Uesr\my-user\.dataloader\dataLoader.key

Step2 データローダ用暗号化パスワードを生成

Step1でC:\Uesr\my-user\.dataloader\dataLoader.keyを作成済みとします。

$ cd C:\Uesr\my-user\dataloader\v52.0.0\bin
$ encrypt -e {{pass}}{{security token}} C:\Uesr\my-user\.dataloader\dataLoader.key
# 暗号化パスワード表示
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

↑で生成された暗号化パスワードは process-conf.xml の中で使用します。

process-conf.xmlにバッチ処理の内容を記載

https://help.salesforce.com/s/articleView?id=sf.command_line_create_config_file.htm&type=5

バッチ実行

  • バッチ処理コマンド:C:\Uesr\my-user\dataloader\v52.0.0\bin\process.bat
  • process-conf.xmlにバッチ処理の内容を記載

以下の形式でバッチ処理を実行する。

$ process.bat "{{/path/to/conf dirctory}}" {{process name}}

{{process name}}process-conf.xmlに記載したプロセスです。

ref. https://help.salesforce.com/articleView?id=command_line_intro.htm&type=5

具体例)

$ cd C:\Uesr\my-user\dataloader\v52.0.0\bin
$ process.bat "C:\Users\.dataloader\conf" accountInsert

process-conf.xmlC:\Users\.dataloader\confに作成している前提です。

タスクスケジューラで実行

Windowsタスクスケジューラを使用する。
タスクスケジューラを表示するにはWindows + rに以下を入力する。

taskschd.msc

タスクスケジューラ

  • プログラム/スクリプト:C:\Users\my-user\dataloader\v52.0.0\bin\process.bat
  • 引数の追加(オプション)(A):C:\Users\my-user.dataloader\conf accountInsert
  • 開始(オプション)(T):C:\Users\my-user.dataloader

備考

設定ファイル

process-conf.xml

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="accountInsert"
        class="com.salesforce.dataloader.process.ProcessRunner"
        scope="prototype">
        <description>accountInsert job gets the account record from the CSV file 
            and inserts it into Salesforce.</description>
        <property name="name" value="accountInsert"/>
        <property name="configOverrideMap">
            <map>
                <entry key="sfdc.debugMessages" value="true"/>
                <entry key="sfdc.debugMessagesFile" 
                    value="C:\DLTest\Log\account InsertSoapTrace.log"/>
                <entry key="sfdc.endpoint" value="https://login.salesforce.com"/>
                <entry key="sfdc.username" value="dataloader@eampleco.jp"/>
                <!--Password below has been encrypted using key file, 
                    therefore, it will not work without the key setting: 
                    process.encryptionKeyFile.
                    The password is not a valid encrypted value, 
                    please generate the real value using the encrypt.bat utility -->
                <entry key="sfdc.password" value="暗号化パスワード"/>
                <entry key="process.encryptionKeyFile" 
                    value="C:\Users\my-user\.dataloader\dataLoader.key"/>
                <entry key="sfdc.timeoutSecs" value="600"/>
                <entry key="sfdc.loadBatchSize" value="50"/>
                <entry key="sfdc.entity" value="Account"/>
                <entry key="process.operation" value="insert"/>
                <entry key="process.mappingFile" 
                    value="C:\Users\my-user\.dataloader\conf\accountInsertMap.sdl"/>
                <entry key="dataAccess.name" 
                    value="C:\Users\my-user\.dataloader\data\insertAccounts.csv"/>
                <entry key="process.outputSuccess" 
                    value="C:\Users\my-user\.dataloader\log\accountInsert_success.csv"/>
                <entry key="process.outputError" 
                    value="C:\Users\my-user\.dataloader\log\accountInsert_error.csv"/>
                <entry key="dataAccess.type" value="csvRead"/>
                <entry key="process.initialLastRunDate" 
                    value="2005-12-01T00:00:00.000-0800"/>
            </map>
        </property>
    </bean>
</beans>

accountInsertMap.sdl

#Mapping values
#Thu May 26 16:19:33 GMT 2011
Name=Name
NumberOfEmployees=NumberOfEmployees
Industry=Industry

データローダ設定

GUI設定

バッチサイズ (Batch size) 一度の挿入、更新、更新/挿入、削除操作で Salesforce に対して入出力されるレコードは、このオプションで指定したサイズで増分されます。最大 200 レコードです。50 から 100 までの値をお勧めします。 [Bulk API を使用] オプションがオンの場合、最大値は 10,000 です。

https://help.salesforce.com/s/articleView?id=sf.configuring_the_data_loader.htm&type=5

Bulk API を使用 このオプションを選択すると、Bulk API を使用して、レコードの挿入、更新、更新/挿入、削除、および物理削除が行われます。Bulk API は、多数のレコードを非同期で読み込みまたは削除するように最適化されます。並列処理を行い、ネットワーク往復数を少なくすることで、デフォルトの SOAP ベースの API よりも高速に動作します。 警告 データローダで [Use Bulk API (Bulk API を使用)] をオンにすると、レコードを物理削除できます。物理削除されたレコードはただちに削除され、ごみ箱から復元することはできません。

一括 API に対して順次モードを有効にする Bulk API に並列処理ではなく順次処理を使用する場合、このオプションを選択します。並列処理を行うと、データベースの競合が生じる可能性があります。競合が激しいと、読み込みに失敗する可能性があります。順次モードでは、バッチが 1 つずつ処理されますが、読み込みの処理時間が長くなる可能性があります。 [Bulk API を使用] オプションがオンの場合、このオプションだけを使用できます。

https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/configuring_the_data_loader.htm

Bulk APIを有効にしても順次モードを適用することができる

[一括 API に対して順次モードを有効にする] オプションをオンにすることもできます。並列処理を行うと、データベースの競合が生じる可能性があります。競合が激しいと、読み込みに失敗する可能性があります。順次モードでは、バッチが 1 つずつ処理されますが、読み込みの処理時間が長くなる可能性があります。 注意: データローダで [Use Bulk API (Bulk API を使用)] をオンにすると、レコードを物理削除できます。物理削除されたレコードはただちに削除され、ごみ箱から復元することはできません。

https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/loader_configuring_bulk_api.htm

process-conf.xml

https://help.salesforce.com/s/articleView?id=sf.loader_params.htm&type=5

バッチファイルサンプル

rem バッチファイルのコメントはremコマンドを使います
@echo off
rem %0はバッチファイル名が渡されます
rem sample.bat a b c
rem %0 => sample.bat
rem %1 => a
rem %2 => b
rem %3 => c
rem リダイレクト >> によってファイルに追記
echo %0 >> log.txt
echo %1 >> log.txt
echo %2 >> log.txt
echo %3 >> log.txt

実行

> cd /path/to/project
> ./sample.bat a b c

ref.

v44.0.0

データローダインストール

v45からはJavaがZulu 11が必須となった。しかしZulu 11は64ビットしか対応していない。 そのために32ビット機で動かすためにGitHubからダウンロード。

  1. forcedotcom/dataloaderからv44.0.0をダウンロード
  2. Java 8をインストール

Java8をインストールしたら自動で環境変数JAVA_HOMEが追加されてPATHにJDKのパスが追記された。

  • JAVA_HOME:C:\Program Files\Java\jre1.8.0_271
  • PATH:
    • C:\Program Files\Java\jre1.8.0_271\binを先頭に追加
    • C:\Program Files\Common Files\Oracle\Java\javapath;を末尾に移動

JavaのPATHへの追加は下記を参照。

http://ooltcloud.sakura.ne.jp/blog/201802/article_09182611.html https://teratail.com/questions/35801
https://web.plus-idea.net/2017/04/java_home-swich-jdk/

encrypt・proccessインストールディレクトリ

$ C:\Users\{{{username}}\AppData\Local\salesforce.com\Data Loader\bin