こんにちは、管理人の@Salesforce.Zです。
データのインポートとエクスポートは、データローダで手動操作だけではない、コマンドラインを使って実行することもできます。コマンドを使用して、データのインポートとエクスポートを自動化できます。
今回、データのインポートとエクスポートを自動的に行うため、
Dataloaderをどう使うかを共有します。
目次
インポート:Dataloderを自動的に動かすための設定
データローダコマンドライン機能を使ってデータをインポートする方法 次の手順に従います。
・ステップ 1: 暗号化鍵を作成する
・ステップ 2: ログインユーザ名の暗号化パスワードを作成する
・ステップ 3: 項目の対応付けファイルを作成する
・ステップ 4: インポート設定を含む process-conf.xml ファイルを作成する
・ステップ 5: プロセスを実行してデータをインポートする
暗号化鍵を作成する
データローダのバージョンによって、やり方は少し異なるので、分けて記載します。
Windowsのコマンドプロンプトから暗号化キーを生成 (データローダ バージョン 42以前の場合)
データローダを保存するディレクトリへ移動します。 例:[cd C:\Program Files (x86)\salesforce.com\Data Loader\bin]
任意の文字列で暗号化キーを生成する ※コマンド中の
は任意の文字列に置き換えます 例:[encrypt.bat -g ] 出力された次のコンソールの *************** の部分をテキストファイルにコピーし、"key.txt" として保存します ※このキーは次のステップでパスワードを暗号化する際に使用します。
例:[security.EncryptionUtil main (EncryptionUtil.java:304) - ***************]
Windowsのコマンドプロンプトから暗号化キーを生成 (データローダ バージョン 43の場合)
- データローダのインストールディレクトリへ移動します。
例:[cd C:\Program Files (x86)\salesforce.com\Data Loader\bin]
- 暗号化キーファイルを生成します。コマンド中の
は任意のディレクトリ、およびファイル名(拡張子は.keyとします)に置き換えます。 の指定がない場合、 "C:\Users\<Windowsユーザ名>.dataloader\dataLoader.key" として暗号化キーファイルが生成されます。
例:[encrypt.bat -k
しかし、僕は「-k」オプションで動作しませんでした。
「-e」オプションで動作しました。
任意の場所にテキストファイルを用意し、生成した鍵を中にコピーし保存する
この例の場合の鍵:赤枠内の内容
僕の場合はDataloaderのbinの下にkey.txtファイルを用意し中に生成した鍵を保存しました。
この鍵ファイルのフルパスを下記のファイル(config.properties)のprocess.encryptionKeyFileの値として書きます。
※このファイルは暗号化と復号化で使用するため、慎重に保存してください。
さらにDataloaderファイルに「sample」フォルダがインストール時にあるフォルダである、もしなければ、
Dataloaderフォルダの直下にbinフォルダと同じ階層に「conf」フォルダを用意し、中にconfig.propertiesファイルを作成し、内容を下記のようにすればいい
<config.propertiesの設定例>
# Data LodaerLoader Config # https://help.salesforce.com/apex/HTViewHelpDoc?id=loader_params.htm # 接続先情報 sfdc.endpoint=https://login.salesforce.com sfdc.username=hogehoge@test sfdc.password=暗号化パスワード//encrypt.bat -e sf_login_password "your key file path"のコマンドで生成した暗号化パスワード process.encryptionKeyFile=C:\Users\<Windowsユーザ名>\.dataloader\dataLoader.key"/> //(データローダ バージョン 43 の場合)、encrypt.bat -e keytextってコマンドで生成した鍵を保存したファイルのパス # データアクセス設定 dataAccess.type=databaseRead dataAccess.readUTF8=false dataAccess.writeUTF8=false dataAccess.readBatchSize=2000 dataAccess.writeBatchSize=2000 # ログ出力設定 process.enableExtractStatusOutput=false process.enableLastRunOutput=false process.lastRunOutputDirectory= process.statusOutputDirectory= process.outputSuccess= process.outputError= sfdc.debugMessages=false # プロキシ設定 sfdc.proxyHost= sfdc.proxyNtlmDomain= sfdc.proxyPassword= sfdc.proxyPort= sfdc.proxyUsername= # その他の設定 sfdc.enableRetries=true sfdc.extractionRequestSize=2000 sfdc.insertNulls=false sfdc.loadBatchSize=1000 sfdc.maxRetries=3 sfdc.minRetrySleepSecs=2 sfdc.noCompression=false sfdc.timeoutSecs=600 sfdc.timezone=GMT+09:00 sfdc.useBulkApi=true
※config.propertiesの「process.encryptionKeyFile」の値に上記の鍵をセットする
ログインユーザ名の暗号化パスワードを作成する
ここの設定もconfig.propertiesファイルに使います。
中には「sfdc.password=*暗号化パスワード」の部分があり、この部分を準備します。
このステップでは、前のステップで生成した鍵ファイルを使って、暗号化されたパスワードを作成します。
僕の場合、前のステップで生成した鍵ファイルをDataloaderのbinのフォルダの直下に保存しているので、コマンドで下記を入力します。
encrypt.bat -e sfdc_login_password "C:\Program Files (x86)\salesforce.com\Data Loader\conf\key.txt"
暗号化したパスワードをconfig.propertiesファイルのsfdc.password=暗号化パスワード部分の暗号化パスワードに置換します。
項目の対応付けファイルを作成する
このステップでは、.sdl ファイル拡張子を使用して対応付けファイルを作成します。対応付けファイルの各ラインで、データの供給元と保存先のペアを作成します。
※この記事では、取引先を例に操作します。
テキストファイルに次をコピーし、accountInsertMap.sdl という名前で保存します。
これはデータの挿入であるため、
等号符の左:データソース
等号符の右:保存先項目
下記は取引先名、従業員数、業種って3項目を使って取引先を登録するマッピングファイルです。
#Mapping values #Fri Api 26 16:19:33 GMT 2019 Name=Name NumberOfEmployees=NumberOfEmployees Industry=Industry
インポート設定を含む process-conf.xml ファイルを作成する
process-conf.xml ファイルには、データローダがデータを処理するために必要な情報が含まれています。
process-conf.xml ファイルの各
このステップでは、Salesforce に取引先を挿入するためのファイルを編集します。
1.\samples\conf ディレクトリから process-conf.xml ファイルをコピーします。
元のファイルには更新/挿入やエクスポートなどの他の種類のデータローダが含まれているため、必ずそのファイルをコピーしてください。
2.テキストエディタでファイルを開き、次の 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" singleton="false"> <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\accountInsertSoapTrace.log"/> <entry key="sfdc.endpoint" value="https://servername.salesforce.com"/> <entry key="sfdc.username" value="admin@Org.org"/> <!--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="e8a68b73992a7a54"/> <entry key="process.encryptionKeyFile" value="c:\Users\{user}\.dataloader\dataLoader.key"/> <entry key="sfdc.timeoutSecs" value="600"/> <entry key="sfdc.loadBatchSize" value="200"/> <entry key="sfdc.entity" value="Account"/> <entry key="process.operation" value="insert"/> <entry key="process.mappingFile" value="C:\DLTest\Command Line\Config\accountInsertMap.sdl"/> <entry key="dataAccess.name" value="C:\DLTest\In\insertAccounts.csv"/> <entry key="process.outputSuccess" value="c:\DLTest\Log\accountInsert_success.csv"/> <entry key="process.outputError" value="c:\DLTest\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>
3.process-conf.xml ファイル内の次のパラメータを編集します。プロセス設定パラメータについての詳細は、「データローダプロセスの設定パラメータ」を参照してください。
設定プロパティ名 | 設定説明 |
---|---|
sfdc.endpoint | 組織の Salesforce インスタンスの URL (https://yourInstance.salesforce.com/ など) を入力します。 |
sfdc.username | データローダがログインに使用するユーザ名を入力します。 |
sfdc.password | ステップ 2 で作成した、暗号化パスワードの値を入力します。 |
process.mappingFile | 対応付けファイルのパスとファイル名を入力します。 |
dataAccess.Name | インポートする取引先を含むデータファイルのパスとファイル名します。 |
sfdc.debugMessages | 現在、トラブルシューティングの目的で、true に設定されています。インポートの実行を開始した後は、false に設定します。 |
sfdc.debugMessagesFile | コマンドラインのログファイルのパスとファイル名を入力します。 |
process.outputSuccess | 成功ログファイルのパスとファイル名を入力します。 |
process.outputError | エラーログファイルのパスとファイル名を入力します。 |
dataAccess.Nameに僕は下記のcsvファイルのパスを設定しております。日本語の場合、UTF-8で保存しないと文字化けになる可能性が高い
Name,Industry,NumberOfEmployees Dickenson plc,Consulting,120 GenePoint,Biotechnology,265 Express Logistics and Transport,Transportation,12300 Grand Hotels & Resorts Ltd,Hospitality,5600
プロセスを実行してデータをインポートする
[process.bat "<file path to process-conf.xml>" <process name>] //実行例 process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\conf" accountInsert
※鍵の生成、パスワードの暗号化の部分にミスないように、「config.properties」ファイルと「Process-conf.xml」に設定することが大事
自分があったエラー: パスワードエラー、エンドポイントの設定ミスでサーバにアクセスエラー、文字化けなどがあります
「config.Config decryptProperty (Config.java:704) - Error loading parameter: sfdc.password of type: java.lang.String」とか
「mapping.LoadMapper mapData (LoadMapper.java:80) - Mapping for field ?Name will be ignored since destination column is empty」とか
「visitor.BulkLoadVisitor addHeader (BulkLoadVisitor.java:242)」とか
【どうしもて文字化けの出力結果がある場合】
同じエディターでファイルを作成し直したら。。。僕がこれで解決した。
最後に
パスは日本語を使用しないほうがいいです。 文字化けなどによって、batファイルに指定したパスは通らなくて、実行できない可能性がある
config.properties ファイルを実行する権限が必要
config.properties ファイルにあるprocess.encryptionKeyFileのvalue設定はC:\Users\username\Documents\key.txtのように記述する
「\」が二つです。
参考サイト
※CSVデータファイルの用意は UTF-8である必要がある、UTF-8のBOMはダメ
なぜなら、実行時にマッピングができない可能性が高い
?NameとNameマッピングできないとか
後日に抽出と更新を公開します。