こんにちは、管理人の@Salesforce.Zです。
データローダ項目の対応付けの定義は公式サイトでも記載しており、
みんなできるかと思っております。
そして、バッチを設定、Dataloaderを動かし、「Insert」オペレーションを別の記事に記載したので、ご参考にどうぞう
中にはシンプルなマッピングファイルを書いてあります。
しかし、「Upsert」のオペレーションを試すには、外部キーの設定はどうしたらいいか、わからないよね?
★ バッチでDataloaderを動かしUpsertオペレーションのマッピングファイル設定
目次
Upsertオペレーション
サンプル構成ファイル
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="ContactUpsert" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false"> <description>AccountUpsert job gets the account record from the CSV file and inserts it into Salesforce.</description> <property name="name" value="ContactUpsert"/> <property name="configOverrideMap"> <map> <entry key="sfdc.useBulkApi" value="true"/> <entry key="sfdc.debugMessages" value="true"/> <entry key="sfdc.endpoint" value="https://your_instans_name.salesforce.com"/><!-- csxx or APx--> <entry key="sfdc.username" value="your_user_name@example.com"/> <entry key="sfdc.password" value="your_secret_key_encrypt_with_your_pass_word"/> <entry key="process.encryptionKeyFile" value="F:\key.txt"/><!-- your secret key file path --> <entry key="sfdc.timeoutSecs" value="600"/> <entry key="sfdc.loadBatchSize" value="200"/> <entry key="sfdc.entity" value="Contact"/><!-- you want to upsert object API name --> <entry key="process.operation" value="upsert"/><!-- Upsert operation set --> <entry key="sfdc.externalIdField" value="ConNo__c"/><!-- set Contact or other object Foreign Key Field API Name --> <entry key="process.mappingFile" value="F:\contact_mappingfile_sample.sdl"/><!-- set you set mapping file path --> <entry key="dataAccess.name" value="F:\contact_data_.tsv"/><!-- you prepared tsv file for csv file path --> <entry key="process.outputSuccess" value="F:\logs\Contact_success.csv"/><!-- set you want to save success csv file out put path in your PC--> <entry key="process.outputError" value="F:\Contact_error.csv"/><!-- set you want to save error csv file out put path in your PC--> <entry key="dataAccess.type" value="csvRead"/> <entry key="process.initialLastRunDate" value="2005-12-01T00:00:00.000-0800"/> </map> </property> </bean> <bean id="accountExtract" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false"> <description>csvAccountExtract job gets account info from salesforce and saves info a CSV file."</description> <property name="name" value="accountExtract"/> <property name="configOverrideMap"> <map> <entry key="sfdc.entity" value="Account"/> <entry key="sfdc.extractionRequestSize" value="500"/> <entry key="sfdc.extractionSOQL" value="Select Id, Name FROM Account Where RecordType.DeveloperName = 'Kokyaku'/> <entry key="process.operation" value="extract"/> <entry key="dataAccess.type" value="csvWrite"/> <entry key="dataAccess.name" value="F:\Account_output_file.csv"/><!-- set you save extract account csv file out put path in your PC--> </map> </property> </bean> <bean id="accountUpdate" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false"> <description>Update Account job gets account info from salesforce and saves info a CSV file."</description> <property name="name" value="accountUpdate"/> <property name="configOverrideMap"> <map> <entry key="sfdc.entity" value="Account"/> <entry key="process.operation" value="update"/> <entry key="process.mappingFile" value="F:\sdl\accountUpdateMap.sdl"/><!-- set your PC path :mapping sdl file--> <entry key="dataAccess.writeUTF8" value="true"/> <entry key="process.outputError" value="F:\log\Account_yyyymmdd_err.csv"/><!--set yourself path in your PC--> <entry key="process.outputSuccess" value="F:\logs\Account_yyyymmdd.csv"/><!--set yourself path in your PC--> <entry key="dataAccess.type" value="csvRead"/> <entry key="dataAccess.name" value="F:\Account_Data_file.csv"/><!--set yourself path in your PC--> </map> </property> </bean> </beans>
サンプルマッピングファイル
#Account object:Foreign key Field is ForeignKey__c(Unique) #This mappingfile is upsert contact data mapping #Contact object:Foreign Key Field is ConNo__c(Unique & custom field),It will set at XML file with PARAMETER "sfdc.externalIdField" #This file hava to UTF-8, Not UTF-8(BOM) or else, if so before "ForeignKey__c" May be exist ¥ then can not mapping and occur error #【=】left is file header #【=】right is salesforce contact field API ForeignKey__c=Account:ForeignKey__c ConNo__c=ConNo__c
サンプルバッチファイル
REM /D is move current directry between different drive opition REM excute windows batch file have to move salesforce dataloader bin directry cd /D "C:\Program Files (x86)\salesforce.com\Data Loader\bin" current directry have to exixt process.bat file, default is dataloader bin folder REM repalece "F:\process-conf.xml" to your PC process-conf.xml path, repalce "AccountUpsert" to you want to operation name in process-con.xml file call process.bat "F:\process-conf.xml" AccountUpsert
外部キー設定
process-conf.xmlファイルにある sfdc.externalIdFieldの部分が取引先責任者レコードの外部キーを設定する場所である
contact_mappingfile_sample.sdlファイルにある
ForeignKey__c=Account:ForeignKey__c
の部分が取引先責任者の参照項目:取引先(Account)への外部キーをマッピングする設定です。
カスタムオブジェクトの場合下記になります。
ForeignKey__c=CustomObject__r:ForeignKey__c
クエリはドット表記でアクセスするが、マッピングファイルでは、:表記になります。
クエリ例
標準オブジェクトクエリ例
Select Id, Name, Account.Name From Contact
カスタムオブジェクトクエリ例
Select Id, Name, ParentCustomObject__r.Name From CustomObject__c
バッチファイルの拡張
upsertすると、成功csvログや失敗csvログの名前はprocess-conf.xmlファイルでは、固定にしているが
名前を変えることもできる、antを使用しない前提では、rename file nameでやるしかないかと思います。
REM /D is move current directry between different drive opition REM excute windows batch file have to move salesforce dataloader bin directry cd /D "C:\Program Files (x86)\salesforce.com\Data Loader\bin" current directry have to exixt process.bat file, default is dataloader bin folder REM repalece "F:\process-conf.xml" to your PC process-conf.xml path, repalce "AccountUpsert" to you want to operation name in process-con.xml file call process.bat "F:\process-conf.xml" ContactUpsert
上記のようにContactUpsertプロセスを実行後に指定したパス通りにログを吐き出すはずです。
改善版バッチファイル
REM /D is move current directry between different drive opition REM excute windows batch file have to move salesforce dataloader bin directry cd /D "C:\Program Files (x86)\salesforce.com\Data Loader\bin" current directry have to exixt process.bat file, default is dataloader bin folder REM repalece "F:\process-conf.xml" to your PC process-conf.xml path, repalce "AccountUpsert" to you want to operation name in process-con.xml file call process.bat "F:\process-conf.xml" ContactUpsert rem 日付 set d=%date% rem 時間 set t=%time: =0% rem 日付時間:文字列 set timeyyyymmddhhmmss=^"%d:~-10,4%%d:~-5,2%%d:~-2,2%%t:~0,2%^%t:~3,2%^%t:~6,2%^" cd /D F:\logs REM ファイル名を別名にする ren Contact_success.csv Contact_%timeyyyymmddhhmmss%_success.csv ren Contact_error.csv Contact_%timeyyyymmddhhmmss%_err.csv
リファレンス
Dataloader自動設定例 Dataloader自動化 insert
Excel csvファイルの日付項目
データローダで、csvファイルを用いて、データを登録する場合、日付項目はややこしくて、
yyyy-mm-ddT00:00:00.000Zの形でデータを用意しないと登録できないため、
下記のExcel数式は参考になるかもしれない
A1に日付データが入っている場合、
=text(A1,"yyyy")&"-"&text(A1,"mm")&"-"&text(A1,"dd")&"T00:00:00.000Z"