当尝试使用Dynamics CRM
从FetchXML
检索实体时,似乎缺少其中一个属性。
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
<entity name="sb_eventbooking">
<attribute name="sb_name" />
<attribute name="sb_bookeridname" /> < problem here
<attribute name="createdon" />
<atrribute ........
FetchXML
文件中有18个属性,但是在运行应用程序时只有17个可用:
缺少sb_bookeridname
。如果我进入FetchXML文件并输入一个我不知道的属性,则会收到错误消息:
'sb_eventbooking' entity doesn't contain attribute with Name = 'fakeattribute'.
因此,应用程序在那里接受 属性,称为“ sb_bookeridname”,但我无法从中获取值。我知道带有null
值的列可能存在问题,但其他属性似乎没有此问题。我对所有属性都使用了此检查,并为所有其他属性获取值:
if (entity.Attributes.Contains("sb_bookeridname") && entity.GetAttributeValue<String>("sb_bookeridname") != null)
{
booking.bookeridname = entity.GetAttributeValue<String>("sb_bookeridname");
}
编辑1:
答案 0 :(得分:1)
我相信您有一个架构名称为 sb_bookerid 的查找字段。创建查找字段时,CRM会在表中自动创建一列以存储与查找相对应的文本值。因此,当我们创建查找字段 sb_bookerid 时,CRM将自动在 sb_eventbooking 实体中创建名称为 sb_bookeridname 的列。
这是您执行FetchXML查询时不会收到错误的原因,因为存在具有名称的列,但CRM限制了其显示其值。因此,如果要检索 sb_bookerid 字段中的值,请使用以下代码-
if(entity.Contains("sb_bookerid"))
{
bookeridname=((EntityReference)entity.Attributes["sb_bookerid"]).Name
}
希望有帮助。
答案 1 :(得分:0)
这是更干净的方法:
bookeridname = entity.GetAttributeValue<EntityReference>("sb_bookerid")?.Name;