DataLoaderのバッチ実行モード
今はDataLoader自身をコマンドラインから起動させることができる。
https://help.salesforce.com/apex/HTViewHelpDoc?id=command_line_intro.htm&language=ja
Batch ModeでDataLoaderを動かすときに、DataLoader Githubにサンプルコードが約にたつ。
https://github.com/forcedotcom/dataloader/tree/master/src/test/resources/testfiles/conf
サンプルを分析してみるとBatch Modeでコマンドラインから実行する以外に、DataBaseに接続し、テーブルのデータをSalesforceへ反映したり、Salesforceのデータを取り出してDataBaseに同期化することもできる。
データベース連動については別の記事を参照
DataLoaderとDatabaseを連動する【V58】【SQLite編】
https://qiita.com/KangHyewon/items/81c3d8ba7b634e0f4c67
DataLoaderのSpringFrameworkのXMLスキーマ設定
このDataLoaderはSpringFramework 5.xで作られているので、基本のサンプルコードのやり方以外に色々とカスタマイズすることができる。
ただし、サンプルの設定ファイルがSpring2.0のDTDで作成されているのでSpringFramework3.0以上ので増えた機能を利用することができない。
SpringFrameworkの機能を使いこなすためには、xmlの上の方をDTD形式から以下のようにXMLスキマーに書き換えてあげる必要がある。
変更前
database-conf.xml
process-conf.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
変更後
database-conf.xml
process-conf.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/tool
http://www.springframework.org/schema/tool/spring-tool.xsd">
SpringFrameworkのPropertiesファイルを活用する
XMLスキマー形式に変更したら、便利な機能の1つとして独自のプロパティを活用することができる
process-conf.xml
<beans...
<!-- プロパティファイルロード -->
<context:property-placeholder location="classpath:my.properties"/>
<!-- util:propertiesを利用してプロパティを設定 -->
<util:properties id="myProps">
<prop key="exampleProperty">exampleValue</prop>
</util:properties>
<!-- For the absolute paths below, replace with a better mechanism, eg. config.properties param for base location -->
<bean id="maximumBatchRowsDbProcess"
class="com.salesforce.dataloader.process.ProcessRunner"
scope="prototype">
<description>maximumBatchRowsDb job gets the Account updates from database and uploads them to salesforce using 'upsert'.</description>
<property name="name" value="maximumBatchRowsDbProcess"/>
<property name="configOverrideMap">
<map>
<!-- プロパティファイルのプロパティを利用の例 -->
<entry key="process.outputSuccess" value="${propertyFromMyProperties}/status/maximumBatchRowsDbSuccess.csv"/>
<entry key="process.outputError" value="${propertyFromMyProperties}/status/maximumBatchRowsDbError.csv"/>
<entry key="sfdc.debugMessagesFile" value="${propertyFromMyProperties}/status/maximumBatchRowsDbSoapTrace.log"/>
<entry key="sfdc.externalIdField" value="Oracle_Id__c"/>
<entry key="process.operation" value="upsert"/>
<!-- util:propertiesのプロパティを利用の例 -->
<entry key="process.mappingFile" value="#{myProps['exampleProperty']}/data/maximumBatchRowsDbMap.sdl"/>
<entry key="dataAccess.name" value="queryAccount"/>
<entry key="dataAccess.type" value="databaseRead"/>
<entry key="dataAccess.readBatchSize" value="750"/>
<entry key="process.initialLastRunDate" value="2005-12-01T00:00:00.000-0800"/>
</map>
</property>
</bean>
</beans>
Proxy環境の注意
社内でProxyを利用する場合、XMLスキマー検証時エラーが発生する場合がある。
SpringFrameworkのXMLスキマー検証をOFFにすることができればいいが、DataLoaderソースに手を出してしまうため、よろしくはない
また、config.propertiesファイルにproxyを設定しても、この設定はDataLoaderの設定であり、SpringFrameworkのXMLスキマー検証では利用できないため、同じくエラーが発生する。
以下のようにDataLoader実行時Proxyを設定することで回避できる。
util.bat
:runDataLoader
CALL :checkJavaVersion
java -Dhttp.proxyHost=<PROXY HOST> -Dhttp.proxyPort=<PROXY PORT> -cp "%~dp0..\*" com.salesforce.dataloader.process.DataLoaderRunner %*
EXIT /b %ERRORLEVEL%