模拟在Microsoft Dynamics CRM中不起作用-始终使用SYSTEM用户

时间:2019-02-12 13:59:43

标签: plugins dynamics-crm impersonation dynamics-crm-2016 dynamics-365

我正在调查Microsoft Dynamics CRM 2016 / Dynamics 365组织服务中的模拟,发现该代码始终代表系统用户(SYSTEM)执行。

我创建了一个插件,该插件应代表不同的用户执行请求:

  • 系统用户(SYSTEM)
  • 默认用户
  • 在插件注册工具中指定的用户
  • 用户发起请求

但是代码总是代表系统用户(SYSTEM)执行。

我不仅尝试显示异常,还尝试创建记录-它们也代表系统用户(SYSTEM)创建。

public class GetUsers : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

        var result = "";

        var service1 = factory.CreateOrganizationService(null);
        result += $"null = {GetUserInfo(service1)}";

        var service2 = factory.CreateOrganizationService(Guid.Empty);
        result += $"Guid.Empty ({Guid.Empty}) = {GetUserInfo(service2)}";

        var service3 = factory.CreateOrganizationService(context.UserId);
        result += $"UserId ({context.UserId}) = {GetUserInfo(service3)}";

        var service4 = factory.CreateOrganizationService(context.InitiatingUserId);
        result += $"InitiatingUserId ({context.InitiatingUserId}) = {GetUserInfo(service4)}";

        throw new InvalidPluginExecutionException(result);
    }

    private static string GetUserInfo(IOrganizationService service)
    {
        var request = new WhoAmIRequest();
        var response = (WhoAmIResponse)service.Execute(request);
        var userId = response.UserId;
        var user = service.Retrieve("systemuser", userId, new ColumnSet("fullname"));
        var data = $"{userId} | {user.GetAttributeValue<string>("fullname")}{Environment.NewLine}";
        return data;
    }
}

我得到这个结果:

null = 34248a5f-bf3e-4f3c-95c2-882424d25d37 | SYSTEM
Guid.Empty (00000000-0000-0000-0000-000000000000) = 34248a5f-bf3e-4f3c-95c2-882424d25d37 | SYSTEM
UserId (0a889533-cf85-e811-a21b-d47c6ef71c14) = 34248a5f-bf3e-4f3c-95c2-882424d25d37 | SYSTEM
InitiatingUserId (c69c88fb-4e41-e811-a214-83daa2756e35) = 34248a5f-bf3e-4f3c-95c2-882424d25d37 | SYSTEM

所有请求均代表系统用户执行,尽管它们必须代表不同的用户。

以前(在CRM 4.0-2013中)它可以工作,但现在不起作用。我在两个不同的系统(不同的版本)上进行了尝试-结果是相同的。

为什么?

1 个答案:

答案 0 :(得分:0)

您的示例代表多个身份执行WhoAmI请求,但是WhoAmI始终返回经过身份验证的用户的systemuserid,并且由于插件是由SYSTEM帐户执行的,因此其ID将始终返回。

执行例如实体帐户上的Create请求,并检查属性CreatedByCreatedOnBehalfOwnerId