从FetchXML访问第二级链接的实体

时间:2016-08-24 11:40:32

标签: c# dynamics-crm crm fetchxml

这是fetchXML:

<fetch version='1.0' mapping='logical' distinct='true'>
  <entity name='listmember'>
    <link-entity name='contact' from='contactid' to='entityid' alias='c'>
      <attribute name='contactid' />
      <attribute name='telephone1' />

      <link-entity name='phonecall' from='ic_customer' to='contactid' alias='pc' link-type='outer'>
        <attribute name='activityid' />
        <attribute name='ic_end' />
        <filter type='and'>
          <filter type='or'>
            <condition attribute='statuscode' operator='eq' value='1' />
          </filter>
        </filter>
      </link-entity>

      <filter type='and'>
        <condition attribute='statecode' operator='eq' value='0' />
        <condition attribute='telephone1' operator='not-null' />
        <condition attribute='donotphone' operator='eq' value='0' />
      </filter>
    </link-entity>
    <filter type='and'>
      <condition attribute='listid' operator='in'><value>{ed0fa81c-1b65-e611-80ee-5065f38be311}</value></condition>
      <condition entityname='pc' attribute='activityid' operator='null' />
    </filter>
  </entity>
</fetch>

现在,当我通过C#中的RetrieveMultiple方法获取对象时,我想访问ic_end属性。

我试图通过以下方式获取属性:

var endDate = (DateTime)((AliasedValue)contact["c.pc.ic_end"]).Value;

我收到一条错误,指出找不到具有该名称的属性。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这里几件事:

首先,检索链接实体属性的方式不正确,属性以 alias.attributename 的格式返回(在这种情况下为pc.ic_end) )。

同时始终根据您的加入条件检查属性是否存在,并不总是返回该属性。检索属性逻辑应该符合以下几行:

if (contact.Attributes.Contains("pc.ic_end") && 
    contact.Attributes["pc.ic_end"] != null)
{
    var endDate = (DateTime) ((AliasedValue) contact["pc.ic_end"]).Value;
}
  

link-entity name ='phonecall'from ='ic_customer'to ='contactid'   alias ='pc'link-type ='outer'

     

我收到一条错误,指出找不到具有该名称的属性。

只要您将链接类型指定为外部,就会返回所有联系人 带有或不带 电话通话记录。因此,这是一种预期的行为,您需要检查返回的属性列表中是否存在该属性。

如果您希望查询仅返回联系人记录 使用 进行电话呼叫,请使用自然的内部联接

<link-entity name='phonecall' from='ic_customer' to='contactid' alias='pc'>