【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.