Dynamics CRM 2016(内部部署)调用用户上下文

时间:2016-08-26 17:00:20

标签: dynamics-crm

我正在CRM2016内部开发一个自定义插件(非沙盒),以与内部webAPI连接。

当我运行这段代码时,它将返回CRM App Pool用户而不是我的用户名:

(System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity;

预期和正常吗?如果是,您如何模拟主叫用户进行外部呼叫。

感谢。

1 个答案:

答案 0 :(得分:0)

是的,这是正常的,同步插件在Web服务器上运行,因此需要获取IIS App Pool用户。如果插件以异步方式运行,则它会在后端异步服务上运行,因此您可能会获得不同的服务帐户。

您可以检查插件执行上下文(IPluginExecutionContext)以获取InitiatingUserIdUserId,这是插件正在执行的系统用户帐户的CRM GUID,具体取决于如何在插件上执行和注册,这可以为您提供启动插件的用户的CRM身份。

杰夫在其中描述了这一点; How to get current user record in CRM plugin?

  

该信息可在PluginExecutionContext中找到。代码   下面是您的插件必须实现的Execute方法。

public void Execute(IServiceProvider serviceProvider)
{
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    Guid userId = context.InitiatingUserId;
}
     

仅供参考,上下文还有一个" UserId"可能会或可能不会的财产   与InitiatingUserId相同。如果您的插件步骤注册   "在用户的上下文中运行"字段具有值"呼叫用户",然后它们   会是一样的。如果您在"在用户中运行指定了用户   上下文"字段,然后UserId字段将包含的用户ID   您指定的人和InitiatingUserId将是实际的CRM   用户的操作触发了插件。听起来像你在寻找   InitiatingUserId。

或许您可以使用其他指标,例如上次修改某些记录的人。然后,您可以在CRM中查找其详细信息,例如获取他们的域名。

根据您对外部服务进行身份验证的方式,这可能有助于模拟用户。否则,据我所知,没有简单的方法来获取用户安全令牌,例如,CRM并没有真正公开这些信息。