这是一个有趣的问题。我想知道任何设置会产生这种差异或任何解决方法以使其正确。
我们有不同的Dynamics 365 CRM在线实例,但它们都是相同的,因为它们是从Prod刷新的。最近开发的插件代码在整个环境中表现不同。
var organizers = (EntityCollection)appointment["organizer"];
Entity record = organizers.Entities[0];
EntityReference organizer = (EntityReference)record["partyid"];
在约会创建时,后创建异步插件代码读取organizer
- 活动方字段之一,但结果非常不同。虽然systemuserid
是相同的,但名称来自Dev中的实体引用,但在其他环境中作为null
。
这确实是一个奇怪的问题。如果您没有刷新PROD中的其他组织,我会说可能在插件注册中注册了不同的图像。
由于代码,环境,插件注册甚至记录ID都相同,因此这个可能值得Microsoft支持票证。
与此同时,解决方法是检查Name是否为null,如果是,则检索Name。这是对系统的另一个调用,但是当您看到Microsoft是否可以提供任何洞察时,将允许您继续。
MS认为这是一个错误,但实际上这个上下文差异是在经典的Web UI和UCI之间确定的。仅适用于约会实体,因为某些oData响应已知问题--UCI目标实体缺少格式化值。
我从我的QA团队获得了插件分析器日志,所以我没有意识到他们在UCI中进行了测试,但我在网上进行了测试,因此快速监视显示了重放/调试时的差异。
无论如何,直到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