首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟在Microsoft Dynamics CRM中不起作用-系统用户总是被使用。

模拟在Microsoft Dynamics CRM中不起作用-系统用户总是被使用。
EN

Stack Overflow用户
提问于 2019-02-12 13:59:43
回答 1查看 778关注 0票数 1

我正在研究Microsoft 2016 /Dynamics365组织服务中的模拟,我发现代码总是代表系统用户(系统)执行。

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

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

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

我不仅试图显示异常,而且还试图创建记录--它们也是代表系统用户( system )创建的。

代码语言:javascript
复制
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;
    }
}

我得到了这个结果:

代码语言:javascript
复制
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

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

以前(在CRM4.0-2013年)它起了作用,但现在它不起作用了。我尝试了两种不同的系统(不同的版本)-结果是一样的。

为什么?

EN

回答 1

Stack Overflow用户

发布于 2019-02-14 22:26:34

您的示例代表多个标识执行WhoAmI请求,但是WhoAmI总是返回经过身份验证的用户的systemuserid,并且由于系统帐户正在执行插件,因此它的ID将始终被返回。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54651748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档