You need to sign in to do that
Don't have an account?
kstukuda
Apexデータローダで参照関係項目を含むオブジェクトをInsertする方法
Apexデータローダで参照関係項目を含むオブジェクトをInsert、Upsertする際、
その参照関係の項目にはSalesforceIDを予め設定しないといけません。
しかしながら、ユーザがcsvファイルを作成する場合、
SalesforceIDというのは意識せず作成されます。
このような場合、参照関係項目に値を
設定するなにか良い方法はありませんでしょうか?
私もDataLoder利用時に同じ内容で困ることが多々有ります。
そんなときは、SalesForce画面の
設定⇒管理者設定⇒データの管理⇒カスタムオブジェクトのインポート
を利用して取り込んでいます。
たしかこの機能を使えば、外部IDに設定した項目で参照関係も作ってくれたと思います。
但し、DataLoderには、上記の挙動を行う機能は無いみたいです
とあるオブジェクトにテキスト項目を作って、その項目を外部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みたいに汎用的じゃないですし、
なによりデータを一回取り込むためだけに苦労して作るには、
かけた苦労に対する対価が低すぎる・・・という問題が有りますが・・・