无法获取"姓名" Link-Entity的查找字段(Web API + FetchXml)

时间:2016-12-07 22:22:18

标签: dynamics-crm dynamics-crm-online dynamics-crm-2016 fetchxml dynamics-crm-webapi

我有一些fetchXml,我正在通过Dynamics CRM Web API执行。 fetchXml查询的构造如下:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="new_someEntityA">
    <attribute name="new_lookupForSomeEntityA" />
  <link-entity alias="new_someEntityB" name="new_someEntityB" from="entityBId" to="entityAId" visible="false" link-type="outer">
    <attribute name="new_lookupForSomeEntityB" />
  </link-entity>
  </entity>
</fetch>

当我通过Web API发送此查询时,我得到了响应以及&#34; new_lookupForSomeEntityA&#34;的值。包括值(GUID)和格式化值(它的名称)。但是&#34; new_lookupForSomeEntityB&#34;的响应仅包含GUID,我无法找到获得它的GUID和价值的方法。我添加了一个标题记录:

"Prefer": "odata.include-annotations=OData.Community.Display.V1.FormattedValue"

但似乎只是为我提供了主要实体的格式化值,而不是链接实体。这是Web API的限制还是我做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

以下是一些使用Web API + FetchXml返回链接实体选项集的格式化值的代码。
针对API的8.2版进行了测试:

var oDataUrl = 'https://[your_org].crm4.dynamics.com/api/data/v8.2/';
var encodedFetchXml = encodeURI(`
<fetch top="10" no-lock="true" >
  <entity name="contact" >
    <attribute name="fullname" alias="contactName" />
    <link-entity name="incident" from="customerid" to="contactid" link-type="inner" alias="incident" >
      <attribute name="caseorigincode" alias="incidentOrigin" />
    </link-entity>
  </entity>
</fetch>
`);
$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    datatype: "json",
    url: `${oDataUrl}contacts?fetchXml=${encodedFetchXml}`,
    beforeSend: function (XMLHttpRequest) {
        XMLHttpRequest.setRequestHeader("Accept", "application/json");
        XMLHttpRequest.setRequestHeader("Prefer", "odata.include-annotations=OData.Community.Display.V1.FormattedValue");
    }
}).then(function (response) {
    // formatted value included in the response objects
    // incidentOrigin@OData.Community.Display.V1.FormattedValue:"WhatsApp"
    console.dir(response); 
}); 

这是返回的数据:
{ "@odata.context":"https://[your_org].crm4.dynamics.com/api/data/v8.2/$metadata#contacts(contactid)", "value":[{ "@odata.etag": "W/\"873006\"", "contactid": "ecfd1feb-d826-468a-bfe3-6ebd781c39f4", "contactName": "Ada Lovelace", "incidentOrigin@OData.Community.Display.V1.FormattedValue": "WhatsApp", "incidentOrigin": 269420000 }] }

它适用于内部和外部链接类型。

Link-Entity属性别名与属性的名称相同 如果使链接实体属性的别名与属性名称相同,则根本不返回该属性。此问题似乎适用于所有链接实体属性。

<fetch top="500" no-lock="true" >
<entity name="contact" >
    <attribute name="fullname" alias="contactName" />
    <link-entity name="incident" from="customerid" to="contactid" link-type="inner" alias="incident" >
    <attribute name="caseorigincode" alias="caseorigincode" />
    </link-entity>
</entity>
</fetch>

省略link-entity属性别名
如果省略了链接实体属性的别名,则会返回一个可怕的名称:

<fetch top="500" no-lock="true" >
<entity name="contact" >
    <attribute name="fullname" alias="contactName" />
    <link-entity name="incident" from="customerid" to="contactid" link-type="inner" alias="incident" >
    <attribute name="caseorigincode" />
    </link-entity>
</entity>
</fetch>

返回的对象有一个这样的字段:
incident_x002e_caseorigincode@OData.Community.Display.V1.FormattedValue:"WhatsApp"

您可能遇到的问题已在8.2版中得到解决。