这是一个有趣的问题。我想知道任何设置都可以使这种效果有所不同,也可以通过任何变通方法来解决。
我们有不同的Dynamics 365 CRM联机实例,但是所有实例都与从Prod刷新的实例相同。最近开发的插件代码在整个环境中的行为有所不同。
var organizers = (EntityCollection)appointment["organizer"];
Entity record = organizers.Entities[0];
EntityReference organizer = (EntityReference)record["partyid"];
在创建约会时,创建后的异步插件代码读取了organizer
-活动方字段之一,但结果却大不相同。尽管systemuserid
是相同的,但名称是正确地来自Dev中的该实体引用,但在其他环境中为null
。
答案 0 :(得分:1)
那确实是一个奇怪的问题。如果您没有从PROD更新其他组织,我想说的是插件注册中可能注册了其他图像。
由于代码,环境,插件注册,甚至记录ID相同,因此可能值得购买Microsoft支持票证。
同时,一种解决方法是检查Name是否为null,如果是,则检索Name。这是对该系统的另一个调用,但是当您查看Microsoft是否可以提供任何见解时,它将允许您继续进行操作。
答案 1 :(得分:0)
MS认为这是一个错误,但实际上,这种上下文差异是在传统的Web UI和UCI之间发现的。仅适用于约会实体,因为存在一些oData响应已知问题-UCI目标实体缺少格式化值。
我从QA团队那里获得了插件探查器日志,因此我没有意识到他们正在UCI中进行测试,但我在Web中进行了测试,因此快速观察显示了重放/调试时的区别。
无论如何,直到MS设置优先级并修复此错误之前,我都可以通过以下变通办法来解决此问题。
#region Workaround for fixing UCI app EntityReference coming as empty string
if (string.IsNullOrEmpty(organizer.Name))
{
ctLog.Log("organizer.Name is empty");
fetch = string.Format(@"<fetch>
<entity name='systemuser' >
<attribute name='fullname' />
<filter type='and' >
<condition attribute='systemuserid' operator='eq' value='{0}' />
</filter>
</entity>
</fetch>", organizer.Id);
ctLog.Log("fetch built");
results = userOrgService.RetrieveMultiple(new FetchExpression(fetch));
ctLog.Log("results count: " + results.Entities.Count);
if (results.Entities.Count > 0)
{
organizer.Name = results.Entities[0].GetAttributeValue<string>("fullname");
}
}
#endregion