【Salesforce】UpsertでDUPLICATE_VALUE, Duplicate external id specified
SalesforceのApexコードで、Upsert時にエラーが発生しました。
こんなエラーメッセージです。
System.DmlException: Upsert failed. First exception on row 0 with id; first error: DUPLICATE_VALUE, Duplicate external id specified:
よくあるエラーですね。
エラーが発生した処理では、こんな感じでUpsertでキーを指定しています。
upsert recordList UniqueField;
そのキーがSalesforceのレコード内に存在するかを調べてみると、見つかりました。
しかし、Upsertでキーを設定しているので今回のエラーは発生しないはずなんですよね。
念のために確認してみると、値が重複しているレコードだけで同じようにUpsertを行うと、既存のレコードが更新されました。
ということは、別に原因があるということになります。
調査を進めていくと、あることが分かりました。
リストでレコードをUpsertする際に、キー項目に似た値を持つレコードが複数存在するということです。
その違いは、キー項目の最後に空白が存在するか、しないかです。
それらのレコードを同時にUpsertすると、やはりエラーが出ました。
しかし、個別に更新すると同じレコードが更新されています。
つまり、キー項目では最後の空白を無視しているということです。
今回はString.trimを使って空白を削除することで解決しました。
空白が文字列の途中に存在する場合はちゃんと動いているようです。
ユニークな文字列の判定には気を付けないといけませんね。
No comments.