1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

SalesForceのDataLoaderの高度に自動化する。

Last updated at Posted at 2024-01-21

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%
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?