データローダとは

データローダは、データを一括でインポートまたはエクスポートするためのクライアントアプリケーションです。Salesforce レコードの挿入、更新、削除、またはエクスポートに使用できます。
データのインポート時には、カンマ区切り値 (CSV) ファイルまたはデータベース接続からデータローダの参照、抽出、および読み込みを実行できます。データのエクスポート時には、CSV ファイルが出力されます。

データローダは、次の 2 通りの方法で使用できます。
・ユーザインターフェース — ユーザインターフェースを使用する場合、対話形式で作業して、設定パラメータ、インポートとエクスポートに使用する CSV ファイル、インポートファイルの項目名と Salesforce の項目名を対応付ける項目の対応付けを指定します。
・コマンドライン (Windows のみ) — コマンドラインを使用する場合は、ファイルの設定、データソース、対応付け、アクションを指定します。これにより、自動処理のためにデータローダを設定できます。

データローダには、次の主な特長があります。
・対話形式で使用するための使いやすいウィザードを持つインターフェース
・自動バッチ操作のための代替コマンドラインインターフェース (Windows のみ)
・5 百万レコードまでの大規模ファイルにも対応
・ドラッグアンドドロップによる項目の関連付け
・カスタムオブジェクトを含む全オブジェクトのサポート
・Salesforce および Database.com の両方でのデータ処理に使用できる
・CSV ファイル形式での詳細な成功またはエラーログ
・組込み型 CSV ファイル参照アプリケーション
・Windows および Mac のサポート

データローダバッチ作成方法

今回はデータローダエクスポート用のバッチ作成方法を説明します。
具体的なやり方は下記を参照してください。

環境

OS : Windows10
Java Zulu OpenJDK バージョン 18
 ⇒ https://www.azul.com/downloads/?os=windows

DataLoder 54.0.0バージョン
 ⇒ https://github.com/forcedotcom/dataloader

パスワード暗号化

  • 暗号鍵生成
java -cp dataloader-54.0.0-uber.jar com.salesforce.dataloader.security.EncryptionUtil -k ./conf/dataloader.key
  • 暗号鍵を使用して、パスワードを暗号化する
java -cp dataloader-54.0.0-uber.jar com.salesforce.dataloader.security.EncryptionUtil -e パスワード .conf/dataloader.key

データローダバッチの構成

├─start.bat                     ⇒ 実行ファイル(手動実行可能)
│─dataloader-54.0.0-uber.jar    ⇒ データローダJAR
├─conf
│      map.sdl                  ⇒ オブジェクトのマッピングファイル
│      config.properties        ⇒ データローダ全体的な設定ファイル
│      dataloader.key           ⇒ 暗号鍵
│      log-conf.xml             ⇒ ログ出力用の設定ファイル
│      process-conf.xml         ⇒ データローダの設定ファイル(必須ファイル)
│      setting.properties       ⇒ データローダ環境設定用ファイル
│
├─data                          ⇒ 取り込み対象ファイル格納フォルダ
├─log                           ⇒ エラーログフォルダ
├─status                        ⇒ 処理結果フォルダ

start.bat(実行ファイル)

@echo off

rem
if "%1"=="hide" goto CmdBegin
start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
:CmdBegin
set DATALOADER_PATH=データローダパス ⇒ 実際のパス
set DATALOADER_CONF_PATH=%DATALOADER_PATH%/conf
cd %DATALOADER_PATH%
java -Dfile.encoding=MS932 -jar dataloader-54.0.0-uber.jar run.mode=batch salesforce.config.dir=./conf process.name=プロセスID ⇒ BeanのId
exit 0

map.sdl

# マップイングファイル
Id=ID
Name=Name
...

config.properties

# 中身は空です

log-conf.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" filePattern="./log/dataloader_%d{yyyy-MM-dd_HHmmss}.log.gz">
      <PatternLayout>
        <Pattern>%-5p %d [%t] - %m%n</Pattern>
      </PatternLayout>
      <Policies>
        <CronTriggeringPolicy schedule="0 0 * * * ?"/>
        <SizeBasedTriggeringPolicy size="250 MB"/>
      </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

process-conf.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <!-- 設定Propertyをインポートする -->
        <property name="locations" value="file:./conf/setting.properties"/>
    </bean>
    <bean id="BeanのId" name="name" class="com.salesforce.dataloader.process.ProcessRunner">
        <description>説明</description>
        <property name="name" value="値"/>
        <property name="configOverrideMap">
            <map>
                <entry key="sfdc.endpoint" value="${sfdc.endpoint}"/>
                <entry key="sfdc.username" value="${sfdc.username}"/>
                <entry key="sfdc.password" value="${sfdc.password}"/>
                <entry key="process.encryptionKeyFile" value="${batch.path}/conf/dataloader.key"/>
                <entry key="sfdc.timeoutSecs" value="${timeoutSecs}"/>
                <entry key="sfdc.entity" value="オブジェクト"/>
                <!--ここはSOQL-->
                <entry key="sfdc.extractionSOQL" value="SELECT
                                                        Id,
                                                        Name,
                                                        ...
                                                        FROM
                                                        オブジェクト
                                                        "/>
                <entry key="process.enableLastRunOutput" value="false"/>
                <entry key="process.operation" value="extract"/>
                <entry key="process.mappingFile" value="${batch.path}/conf/map.sdl"/>
                <entry key="dataAccess.name" value="${batch.path}/data/resultData.csv"/>
                <entry key="dataAccess.type" value="csvWrite"/>
                <entry key="loader.csvTab" value="true"/>
                <entry key="loader.csvComma" value="true"/>
                <entry key="dataAccess.readUTF8" value="true"/>
                <entry key="dataAccess.writeUTF8" value="true"/>
                <entry key="process.initialLastRunDate" value="2006-12-01T00:00:00.000-0800"/>
            </map>
        </property>
    </bean>
  ・・・
</beans>

setting.properties

# Loader Config
sfdc.endpoint=Salesforceエンドポイント
sfdc.username=ユーザ名
sfdc.password=暗号化のパスワード
batch.path=データローダバッチパス ⇒ 実際のパス
timeoutSecs=600

Windows タスクスケジューラを作成

下記手順で Window タスクスケジューラを作成します。

データローダバッチ

データローダバッチ

データローダバッチ

データローダバッチ

データローダバッチ

データローダバッチ

関連記事