1

我的 Dynamics 365 插件中有这段代码,

 private int? RetrieveCurrentUsersSettings(IOrganizationService service)
    {
        var currentUserSettings = service.RetrieveMultiple(
            new QueryExpression("usersettings")
            {
                ColumnSet = new ColumnSet("timezonecode"),
                Criteria = new FilterExpression
                {
                    Conditions =
                    {
                        new ConditionExpression("systemuserid", ConditionOperator.EqualUserId)
                    }
                }
            }).Entities[0].ToEntity<Entity>();

        return (int?)currentUserSettings.Attributes["timezonecode"];
    }

我正在用 FakeXrm 为它编写一个 UnitTest,在调试时我在这个查询表达式中遇到了一个错误。

这是我的假 Xrm 代码。

  Entity systemUser = new Entity("systemuser");
        systemUser.Id = Guid.NewGuid();

        Entity userSettings = new Entity("usersettings");
        userSettings.Id = Guid.NewGuid();
        userSettings["timezonecode"] = 71;
        userSettings["systemuserid"] = systemUser.ToEntityReference();

        fakedContext.Initialize(new List<Entity>()
        {
            workOrder, owner, invoiceNote, userSettings
        });

问题是,如何在 FakeXrm 中创建用户设置实体并为其提供适当的属性。

4

2 回答 2

1

我很高兴您按照我的建议在 StackOverflow 上提问。

无论如何,您应该指出您在 GitHub 上的FakeXrmEasy存储库上提出了相同的问题,并且该解决方案已在此答案中提供。

长话短说,你的 UnitTest 的问题是你丢失 fakedContext.CallerId = systemUser.ToEntityReference();了,因为你ConditionOperator.EqualUserId在查询中使用了它。

最好的问候,贝廷·贝贾。

于 2018-11-15T07:15:17.247 回答
0

我找到了解决方案

           Entity systemUser = new Entity("systemuser");
            systemUser.Id = Guid.NewGuid();
            fakedContext.CallerId = systemUser.ToEntityReference();
            IOrganizationService service = fakedContext.GetOrganizationService();
            Entity userSettings = new Entity("usersettings");
            userSettings.Id = Guid.NewGuid();
            userSettings["timezonecode"] = 71;
            userSettings["systemuserid"] = systemUser.ToEntityReference();
于 2018-11-14T17:35:50.360 回答