INSUFFICIENT_ACCESS_ON_ CROSS_REFERENCE_ENTITY APEX / SALESFORCE
注:この問題の一般的な原因は、以下のシナリオです。
それがあなたに当てはまらない場合は、読んでください。
*「レコードX」を「ユーザーY」と共有しようとしていて、「ユーザーY」がすでに「レコードX」にアクセスできる場合、このエラーが発生します。
これが何を意味するのかを理解して以前に対処しましたが、今回はこのエラーメッセージが1週間頭を悩ませました。
最後に、私はそれを整理しました、そしてこの投稿が誰かが同様に理解して解決するのを助けることを願っています。
このエラーはいつ発生しますか?
このエラーは通常、DML操作が実行されたときに発生します。
つまり、挿入または更新が実行されるたびに。
APEXクラスまたはTRIGGERを保存すると、このエラーは実行時に発生するため、このエラーは表示されません。
このエラーはどういう意味ですか?
このエラーは、実行することが想定されていない操作を実行しようとしていること、
または実行しようとしている操作が、定義された共有とセキュリティの設定に従って許可されていないことを意味します。
このエラーメッセージは、場合によっては、操作を実行するためのアクセス権がないことを常に意味するわけではありません。
したがって、管理者であっても、このメッセージが表示される場合があります。
考えられる原因:
いくつかのシナリオを取り上げて分析しましょう。
シナリオ1:
新しいレコード(アカウント/連絡先/ ...)の作成と所有者の設定。レコードの更新にも適用されます。
したがって、コードでいくつかのレコードを作成します。デフォルトでは、レコードの作成者は所有者です。
これを変更し、新しく作成されたレコードのOwnerId列を変更します。
「ユーザーX」をオーナーにします。コードを実行すると、以下のエラーが発生します。
System.DmlException:挿入に失敗しました。行2の最初の例外。最初のエラー:INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY、相互参照IDに対するアクセス権が不十分:[]
確認すること:
*実行中のユーザー(この場合はあなた)が操作対象のオブジェクトにアクセスできることを確認してください。オブジェクトに対するCREATE特権を持っていることを確認してください。これはオプションですが、ここから始めるのが常に良いでしょう。
*所有者、つまりユーザーXがオブジェクトに対するCREATE権限を持っていることを確認してください。彼のプロファイルに特定のオブジェクトに対するCREATE権限があることを確認してください。彼はそれを持っていないかもしれません、彼に許可を与えてください、そして問題は解決されます。
シナリオ2:
商談の作成または更新(例としては、任意のオブジェクト)。商談の関連アカウントを設定します。
たとえば、5つの商談を作成し、所有者を「ユーザーX」に設定したとします。アカウントを「アカウントX」に設定します。コードがこれらの5つの機会を挿入しようとすると、失敗し、同じエラーメッセージが表示されます。
System.DmlException:挿入に失敗しました。行2の最初の例外。最初のエラー:INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY、相互参照IDに対するアクセス権が不十分:[]
理由:
これは、「ユーザーX」が「アカウントX」にアクセスできないためです。 「アカウントX」の機会を作成しようとすると、彼はコードにアクセスできません。 「アカウントX」の「ユーザーX」へのアクセスを手動またはコードで許可してから、挿入を実行します。
シナリオ3:
共有オブジェクト。
これは少し複雑です。少なくとも私にとっては。
すべてのオブジェクトが独自の共有オブジェクトを持っていることに気づくかもしれません。
したがって、AccountにはAccountShareがあり、Customobj__cにはCustomobj__Shareがあります。
このオブジェクトのレコードを挿入または更新すると、同じエラーメッセージが表示される場合があります。
これが発生する理由はいくつかあります。
1.「レコードX」を「ユーザーY」と共有しようとしていて、
自分自身が「レコードx」にアクセスできない場合、このエラーが発生します。
2.「レコードX」を「ユーザーY」と共有しようとしていて、
「ユーザーY」がオブジェクトへのアクセス権を持っていない場合
(プロファイルレベルの権限、読み取り、編集、削除の作成)、このエラーが発生します。
3.「レコードX」を「ユーザーY」と共有しようとしていて、
「ユーザーY」がすでに「レコードX」にアクセスできる場合、このエラーが発生します。
参照:http://www.forcetree.com/2011/12/insufficientaccessoncrossreferenceentit.html
thanks very much.