如何在插件中获取模拟用户ID?

Dar*_*ryl 6 asp.net plugins dynamics-crm c#-4.0 dynamics-crm-2011

在插件上下文中,有两个用户ID,

  1. InitiatingUserId 它返回实际触发插件的用户的id.
  2. UserId它返回插件实际运行的用户的用户ID.(这是注册插件时指定的用户,或者调用用户,如果它已注册为主叫用户运行)

但我对第三个用户ID感兴趣,该用户ID是执行调用的OrganizationServiceProxy的模拟用户ID.

假设我有一个运行CRM系统管理员帐户的ASP.Net网站,以及对CRM进行的任何调用,使用模拟,查找当前登录到站点的人员的CRM用户ID.

这适用于选择和更新,用户只能看到\更新他们有权使用的权限.但是......如果我创建一个在特定实体更新时触发的插件,如何从插件中查找Asp网站上模拟用户的用户ID?

Got*_*bbs 3

据我对情况的了解,您可以检索模拟用户的用户 ID,但不能检索经过身份验证的用户。下面列出了一些场景,有望澄清行为(在 UR11 和 UR12 中测试):

  1. 以用户 A身份向 CRM 进行身份验证,冒充用户B。插件未注册为模拟任何特定用户(即ImpersonatingUserId插件步骤设置为null(在插件注册工具中,“在用户上下文中运行”将设置为“调用用户”))。示例将以用户 AOrganizationServiceProxy身份进行身份验证,其中是用户B。 proxyService.CallerId
    • PluginContext.UserId=用户B
    • PluginContext.InitiatingUserId=用户B
    • createdonbehalfby(或modifiedonbehalfby) =用户 A
  2. 以用户 A身份向 CRM 进行身份验证,冒充用户B。插件已注册以模拟用户 C。(即插件步骤的 ImpersonatingUserId 设置为用户 C(在插件注册工具中,“在用户上下文中运行”将设置为用户 C))。示例是经过OrganizationServiceProxy身份验证的用户 A,其中proxyService.CallerId用户 B
    • PluginContext.UserId=用户C
    • PluginContext.InitiatingUserId=用户B
    • createdonbehalfby(或modifiedonbehalfby) =用户 A

场景 #1 让我有点困惑,因为我隐约记得工作方式不同。这必定意味着当CallerId设置该属性时,模拟发生在与场景 #2 不同的位置。然而,您可以看到,在场景#2 中,我们似乎达到了您的预期结果。

我用来产生这个结果的步骤是:

  1. 创建控制台应用程序并引用Microsoft.Xrm.SdkMicrosoft.Crm.Sdk.Proxy. 实例化一个新OrganizationServiceProxy对象,其中经过身份验证的用户是User A。将 设为代表User BCallerId的 Guid 。
  2. 创建一个超级简单的插件,一旦有机会就会抛出异常,如下所示:

    throw new Exception(string.Format("Initiating Id: {0}, User Id: {1}", 
        context.InitiatingUserId, 
        context.UserId));
    
    Run Code Online (Sandbox Code Playgroud)