tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:自動採番項目とUPSERTの注意点

Salesforceの自動採番項目はUPSERT処理の対象として選択できないみたいです。データローダ向けの話ですが、ヘルプページが用意されていました。Apexからでも同じ理由でエラーになるんだと思います。

f:id:tyoshikawa1106:20160715220540p:plain

データローダで外部 ID として自動採番が利用できません


実際に試してみました。まずは普通にテキスト型のNameだった場合です。
f:id:tyoshikawa1106:20160715220904p:plain


テストデータを1件用意して確認します。
f:id:tyoshikawa1106:20160715220949p:plain


検証コードはざっくりですがこんな感じ。
f:id:tyoshikawa1106:20160715221205p:plain


無事に更新されました。Upsert処理時にNameをキーに更新できることも確認できたと思います。
f:id:tyoshikawa1106:20160715221326p:plain



それではNameが自動採番型だった場合です。
f:id:tyoshikawa1106:20160715221452p:plain


Upsert処理は同じように実行します。
f:id:tyoshikawa1106:20160715221539p:plain


実行するとエラーになりました。
f:id:tyoshikawa1106:20160715221606p:plain

System.DmlException: Upsert failed. First exception on row 0 with id a0Gi000000R4Y36EAF; first error: MISSING_ARGUMENT, Name not specified: []


値が見つかりません。という感じのエラーだと思います。自動採番項目の値はUpsert時には認識されないのかもしれません。


この問題の解決方法についてですが、こちらのページで1つ紹介されていました。テキスト型項目を用意してワークフロールールなどで自動採番の値をセットする。・・数式のときでも利用する方法です。たぶん他に方法は無いんじゃないかなと思います。


意外と自動採番項目をUPSERTの対象にする機会ってなかったので、こういうルールがあることに気づきませんでした。オブジェクト構成を考える時には意識しておくと良さそうです。