Dynamics crm “无法获取”;名称“;链接实体的查找字段(Web API+;FetchXml)

Dynamics crm “无法获取”;名称“;链接实体的查找字段(Web API+;FetchXml),dynamics-crm,dynamics-crm-online,dynamics-crm-2016,fetchxml,dynamics-crm-webapi,Dynamics Crm,Dynamics Crm Online,Dynamics Crm 2016,Fetchxml,Dynamics Crm Webapi,我有一些通过Dynamics CRM Web API执行的fetchXml。fetchXml查询的构造如下: <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> <entity name="new_someEntityA"> <attribute name="new_lookupForSomeEntityA" /> <l

我有一些通过Dynamics CRM Web API执行的fetchXml。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的限制还是我做错了什么?如果您有任何帮助,我们将不胜感激。

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

var-oDataUrl='https://[your_org].crm4.dynamics.com/api/data/v8.2/';
var encodedFetchXml=encodeURI(`
`);
$.ajax({
键入:“获取”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
url:“${oDataUrl}联系人?fetchXml=${encodedFetchXml}”,
beforeSend:函数(XMLHttpRequest){
setRequestHeader(“接受”、“应用程序/json”);
setRequestHeader(“首选”、“odata.include annotations=odata.Community.Display.V1.FormattedValue”);
}
}).然后(功能(响应){
//响应对象中包含的格式化值
// incidentOrigin@OData.Community.Display.V1.FormattedValue:“WhatsApp”
console.dir(应答);
}); 
这是返回的数据:
{
“@odata.context”:“https://[your_org].crm4.dynamics.com/api/data/v8.2/$metadata#contacts(contactid)”,
“价值”:[{
“@odata.etag”:“W/\“873006\”,
“联系人ID”:“ecfd1feb-d826-468a-bfe3-6ebd781c39f4”,
“联系人姓名”:“Ada Lovelace”,
"incidentOrigin@OData.Community.Display.V1.FormattedValue“:“WhatsApp”,
“意外事故来源”:269420000
}]
}

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

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


省略链接实体属性别名
如果省略链接实体属性的别名,将返回一个可怕的名称:


返回的对象有如下字段:
事件_caseorigincode@OData.Community.Display.V1.FormattedValue:“WhatsApp”


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

是否尝试将name属性添加到
节点?是的,我尝试过。在SQL中,该属性是“new_lookupForSomeEntityBName”,如果我添加该属性,就会得到一个表示该属性不存在的返回。如果我使用“name”(小写)执行此操作,则查询返回,但仍然只有一个GUID,没有查找名称。您需要在entity new_someEntityB上指定name属性的名称。您可以在实体的主选项卡上的CRM解决方案中查找它。在SQL中,
new\u lookupForSomeEntityBName
是一个过滤视图的列,它映射到实际表的主字段名。我将其更改为:
当我这样做时,我得到与返回值相同的id,只是:
new\u someEntityB\u x002e\u new\u lookupForSomeEntityBid:[GUID]
不要使用
名称属性
属性,而只使用
"Prefer": "odata.include-annotations=OData.Community.Display.V1.FormattedValue"