You need to sign in to do that
Don't have an account?
おに
Upsertと外部IDについて
いつもお世話になっております。
現在、外部ツールを使用し、数百レコードをUpsertしています。
その際、外部ID項目を元に、Insert/Updateの判別を行っているのですが、
同じ外部IDが同一アップロードファイルに存在すると、重複エラーレコードと
なり、該当外部IDのレコード処理はロールバックされてしまいます。
Database.comのリファレンスを見る限りでも、1回のバッチ処理で、同一
外部IDが複数含まれている場合、エラーとなる旨記載されておりますが、
本件、回避する方法を何かご存じないでしょうか?
個別に同一外部IDのレコードを除外し、処理を行うと言ったことは、
件数からもあまり現実的ではありません。
また、レコード外部システムからの連携ということで、UpdateとInsertを
それぞれ実行するといったことも、判断が難しい状況です。
お手数ですが、ご教示の程、よろしくお願いいたします。
外部システムからの連携とあるので、データ連携ツール等を使用しているのでしょうか?
連携ツールであれば、SFDCから既存レコードを取得して登録済みか否かを判断させることは難しくないと思います。
判断させて、UpsertではなくInsert、Updateをそれぞれ処理させては如何でしょうか?
すみません、望ましい方法ではないかもしれまんが。
All Answers
外部システムからの連携とあるので、データ連携ツール等を使用しているのでしょうか?
連携ツールであれば、SFDCから既存レコードを取得して登録済みか否かを判断させることは難しくないと思います。
判断させて、UpsertではなくInsert、Updateをそれぞれ処理させては如何でしょうか?
すみません、望ましい方法ではないかもしれまんが。
ご回答ありがとうございます。
やはりInsert/Updateを判断するのが、最も手っ取り早い
方法ですよね・・・。
今回の状況の課題としては、1バッチ処理(例えばバッチサイズ20であれば20レコード処理内)に、
同一外部IDキーが含まれた場合、1件目はInsert、2件目はUpdateでの処理となるのですが、
2件目が必ずエラーとなる(実際はコミットされていないため、UpdateではなくInsertとなり
キー重複エラーが出る)といった問題でございます。
ご回答の内容からも、Updsert対象のデータ(外部システムデータ)を、データ連携ツール内で
一旦編集を行い、マージした後にInsert/Updateを行う、といった流れとするのが、最善作かなと
感じたところでございます。
Upsertのもっと便利な使いかたがあれば・・・と思ってしまいます。
(元々、便利なコマンドではありますが)
ありがとうございました。
データ連携ツールによっては、
”1バッチ処理内でエラーデータのみRollback、正常データはCommitし、エラーデータのIDリストを返却する”
機能が備わっているものがあります。
(自分の回答とずれてしまいますが・・)
連携ツールのUpsert機能を利用すれば要望は叶えれらそうな気がします。
宣伝するつもりはないのですが、DataSpider(or DCSpider)では対応できるのを確認しています。
恐らく、他社製品でもそのような機能が備わっていると思います。
ご回答ありがとうございます。
ご記載のリトライ処理を組み込めば、自動化できそうな気が
しました。
ただ、データ連携ツールとしては、Informaticaを利用しており、具体的に
そこまでの調査ができていない実態はございますので、実現性は
今後の調査次第、といったところです。
#SFDC連携においては、チェックボックス項目を必須項目
#(true/falseのいずれかを必ず設定)として扱ってしまう等の
#別の問題も発生しており、本ツールでは根本的な解決は
#難しいかもなぁと感じるところはありますが。
ツール調査も含め、方式を検討させていただきます。