function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
kstukudakstukuda 

Apexデータローダで参照関係項目を含むオブジェクトをInsertする方法

Apexデータローダで参照関係項目を含むオブジェクトをInsert、Upsertする際、

その参照関係の項目にはSalesforceIDを予め設定しないといけません。

 

 

しかしながら、ユーザがcsvファイルを作成する場合、

SalesforceIDというのは意識せず作成されます。

 

 

このような場合、参照関係項目に値を

設定するなにか良い方法はありませんでしょうか? 

nabemarunabemaru

私もDataLoder利用時に同じ内容で困ることが多々有ります。

 

そんなときは、SalesForce画面の

設定⇒管理者設定⇒データの管理⇒カスタムオブジェクトのインポート 

を利用して取り込んでいます。

 

たしかこの機能を使えば、外部IDに設定した項目で参照関係も作ってくれたと思います。

 

 

但し、DataLoderには、上記の挙動を行う機能は無いみたいです:smileysad:

 

とあるオブジェクトにテキスト項目を作って、その項目を外部IDとして設定した場合、

データローダーでその該当オブジェクトに対するレコードをUPSERTする場合に、

SalesForce IDではなく、設定した外部IDのテキスト項目でマッチングをかけて

INSERTもしくはUPDATEしてくれます。

 

しかしながら、とあるオブジェクトの参照項目に対して、

参照先のオブジェクトの外部IDをもってINSERT、UPDATE、UPSERTすることは

今のところできないみたいです。

(WebSearviceAPIを参照しても、やっぱりそのようなメソッドが無いです。)

 

なので、ユーザが記載した参照項目の値をSalesForceIDに読み替えるための

手作業が発生してしまうと思います。

 

DataLoderでやるとしたら、

①参照先のオブジェクトの外部IDとSalesForceIDをレポートか、DataLoderのEXPORTで出力する。

②IMPORTするCSVの参照項目を先のEXPORT内容のSalesForceIDに変換する。

(EXCELとかACCESSを使うのが手っ取り早いですかね) 

③ 変換したCSVをDataloderでINSERTもしくはUPDATEする。

という手順が必要と思います。 

 

 

また、これは質問内容からそれてしまう気がしますが、

別の対応方法を一応記載しておきたいと思います。

 

 ScriptingToolKitを利用して、以下の取込バッチを作成する。

 

①参照先のオブジェクトのレコード全件をSOQLで出力し、

 ハッシュマップ(外部IDを渡せば、SalesForceIDを返す)を作成する。

②取りこみたいCSVの参照項目を上記のハッシュマップでSalesForceID に変換する。

③変換後のCSVをINSERTもしくはUPDATEする 

 

けどこれって、DataLoderみたいに汎用的じゃないですし、

なによりデータを一回取り込むためだけに苦労して作るには、

かけた苦労に対する対価が低すぎる・・・という問題が有りますが・・・