这是 Dynamics CRM 2011 Rollup 11 On-Premises with SQL 2008 R2
有以下我们正在尝试调试的场景:
在 Synchronous PostCreate 插件中,我们将用户添加到拥有特定记录并通过安全角色对该记录具有读取权限的团队中。这应该意味着当创建过程完成时,添加到团队的用户可以访问记录。当这样的用户打开记录时,他们会收到 SecurityException ReadAccess 错误。记录确实显示在网格中,如果他们没有记录的读取权限,则不应发生这种情况。
作为进一步的测试,我们从控制台应用程序为用户和记录执行 SDK 调用 RetrievePrincipalAccessRequest,并查看用户没有读取权限。
我们可以在 UI 中查看团队成员列表,并且用户是团队的成员。如果我们等待足够长的时间(并创建另一条记录,问题最终会自行解决 - 几分钟后。)
我们可以将用户添加到团队中,使用我们在插件中执行的相同代码(但在控制台应用程序中运行),并且用户具有读取权限,并且可以在调用完成后立即访问记录。
很明显,我们的插件中发生了一些导致问题的事情,但我们无法弄清楚是什么原因或原因 - 因为 Create 调用完成时没有错误,我们可以看到 UI 中列出的用户。我们没有做任何时髦的事情——即直接 SQL、外部服务等。
我们调用标准的 CRM 2011 SDK 消息,它会在不引发错误的情况下完成。我们可以验证用户是否已添加到用户界面中。用户有权读取实体,但他们没有。
任何想法/想法?我们一直在疯狂追踪,但还没有找到确凿的证据!
更新
如果您暂停我们的插件代码,我们可以减少发生率。此错误仅在插件期间完成添加时发生,而不是在插件外部完成时发生。我开始怀疑是否有一个 SQL 过程/语句(当用户被添加到团队时会触发三个存储过程)由于某种原因而被缩短或无法完成,因为添加是未在插件代码中完成时成功。