Вот код, который возвращает форматированные значения для наборов параметров объекта ссылки с помощью 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
// [email protected]:"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",
"[email protected]": "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>
Отсутствие псевдонима атрибута связанного объекта
Если вы не укажете псевдоним для атрибута связанного объекта, он будет возвращен с ужасным именем:
<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.
person
Bvrce
schedule
24.01.2017
<link-entity>
? - person Henk van Boeijen   schedule 08.12.2016new_lookupForSomeEntityBName
- это столбец отфильтрованного представления, который сопоставляется с именем основного поля фактической таблицы. - person Henk van Boeijen   schedule 08.12.2016<link-entity alias="new_someEntityB" name="new_someEntityB" name-attribute="new_name" from="entityBId" to="entityAId" visible="false" link-type="outer"> <attribute name-attribute="new_name" name="new_lookupForSomeEntityB" /> </link-entity>
Когда я это сделаю, я получаю тот же идентификатор, что и возвращаемое значение, просто:new_someEntityB_x002e_new_lookupForSomeEntityBid: [GUID]
- person jmsims2   schedule 08.12.2016name-attribute
атрибуты, а только<attribute name="new_name"/>
. - person Henk van Boeijen   schedule 09.12.2016new_someEntityB
, это поиск некоторого другого объекта, который хранится вnew_someEntityB
. Опять же, извините за путаницу. - person jmsims2   schedule 09.12.2016