我的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中创建 usersettings 实体并为其提供适当的属性。
答案 0 :(得分:1)
很高兴您按照我的建议在StackOverflow上提问。
无论如何,您应该指出,您在GitHub的FakeXrmEasy存储库上问了同样的问题,并且answer随处提供了解决方案。
长话短说,UnitTest的问题在于您缺少fakedContext.CallerId = systemUser.ToEntityReference();
,这是必需的,因为您在查询中使用了ConditionOperator.EqualUserId
。
最好的问候,贝蒂姆·贝雅。
答案 1 :(得分: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();