【Salesforce】INSUFFICIENT_ACCESS_OR_READONLY, cannot merge with entity that is not accessible

【Salesforce】INSUFFICIENT_ACCESS_OR_READONLY, cannot merge with entity that is not accessible

Salesforceの一部オブジェクトはApex内でマージすることが出来るのはご存知だと思います。

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_database.htm

// 取引先責任者をマージする
ApexのDatabase.merge(masterContact, duplicateContact);

しかし、取引先責任者をマージしようとするとエラーが発生しました。

INSUFFICIENT_ACCESS_OR_READONLY, cannot merge with entity that is not accessible

アクセスできないエンティティがあるのでマージできないとのこと。

Apexだからダメなのかと思い、標準のマージ機能を使ってもエラーが出ました。

取引先責任者をマージできません。

調べてみると、マージが出来るレコードもあるようでした。

その差は「セルフサービスユーザ」に登録されているか否かでした。

取引先責任者をセルフサービスユーザとして登録すると、SelfServiceUserというレコードも同時に作成されます。

そのレコードへはDMLを発行することが出来ないため、アクセスできないというエラーが発生したわけですね。

Apex上から直接DMLを発行することは出来ませんが、SOAP APIやREST APIを使うことで更新が可能なようです。

そのため、マージ処理を行う前にREST API経由でSelfServiceUserを無効にしてマージするという処理になってしまいました。

ちょっと怖い動きではありますね。

 

今回はSelfServiceUserが原因でしたが、それ以外のオブジェクトでもアクセスできないレコードが存在する場合に同じエラーが発生するようです。

アクセス権やDMLの権限等を見直してみるのもいいかもしれません。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です