Odata Dynamics CRM WEB API-从实体引用中选择字段

Odata Dynamics CRM WEB API-从实体引用中选择字段,odata,dynamics-crm,dynamics-crm-webapi,Odata,Dynamics Crm,Dynamics Crm Webapi,我正试图通过使用扩展和odata查询从另一个CRM实体中选择一个字段 查询字符串:studios$?Select=studioid、studioname、titleid和$Expand= 标题id是自定义实体中名为标题的字段。如何编写EXPLAND子句来展开title并选择titleid 感谢您的帮助 试试这个: studios?$select=studioid,studioname,titleid&$expand=titleid($select=titleid,name) 此外,建议

我正试图通过使用扩展和odata查询从另一个CRM实体中选择一个字段

查询字符串:
studios$?Select=studioid、studioname、titleid和$Expand=

标题id是自定义实体中名为标题的字段。如何编写EXPLAND子句来展开title并选择titleid

感谢您的帮助

试试这个:

studios?$select=studioid,studioname,titleid&$expand=titleid($select=titleid,name)
此外,建议使用它来编写和测试CRM web api查询


注意:检查您的实体和字段名称,它们应该看起来像new_studio&new_studioid

首先您可以参考这篇文章详细解释$expand功能,但是为了简单起见,后面是与目标实体的关系名称,然后是要在括号中选择的字段

例如,
$expand={relation\u name}($select=filed1,field2)

可能是这样的
$expand=new\u new\u entity1\u new\u entity2($select=new\u name,createdon)

注意:您从expand relation中获得的值实际上是指向实际数据的导航URL,因此您不希望从new entity2中检索[new\u name,createdon],您将获得的是指向OData这些值的URL,为此,您可以在下面的帮助功能1中为您执行此操作

您还可以使用这是一个了不起的解决方案,当您在crm上安装时,您将在解决方案视图中找到它的按钮。该解决方案是一种工具,可以帮助您使用漂亮的GUI设计OData查询,这样您就不需要编写和优化OData查询,而OData查询更快、更简单

帮助功能1

`

`

但是,如果您希望通过一次调用获取所有数据,并且可能希望扩展到多个实体,我建议您使用Fetch XML简单地设计所需的提取,使用高级查找工具提取fetchXML,然后将其传递给帮助函数2,该函数应返回完整数据,但请注意,此方法中的最大提取长度是限制为2048个字符[GET请求的最大长度]

帮助功能2
`

函数ExecuteFetchXMLQuery(数据集,fetchQuery){
var encodedFetchXML=encodeURIComponent(fetchQuery);
var结果;
var req=新的XMLHttpRequest();
请求打开(“GET”,Xrm.Page.context.getClientUrl()+”/api/data/v8.0/“+dataSet+”?fetchXml=“+encodedFetchXML,false);
请求setRequestHeader(“OData MaxVersion”,“4.0”);
请求setRequestHeader(“OData版本”、“4.0”);
请求setRequestHeader(“接受”、“应用程序/json”);
setRequestHeader(“首选”、“odata.include annotations=\”odata.Community.Display.V1.FormattedValue\”);
req.onreadystatechange=函数(){
if(this.readyState==4){
req.onreadystatechange=null;

if(this.status==200 | | |)(this.status>=200&&this.status感谢大家的知识和建议。我尝试了工作室?$select=studioid,studioname,titleid&$expand=titleid($select=titleid,name),仍然获得400分。CRM Rest Builder-这是一个需要安装的解决方案吗?我如何运行此解决方案?如果这是一个新手问题,很抱歉。谢谢!!@RaviShastri这是一个可以在CRM中导入的托管解决方案。请检查您的实体和字段名称,它们应该看起来像new_studio&new_studioid@RaviShastri如果需要,请投票/接受答案他们帮助了你。
function OdataExpand(expandUrl) {
    var result = null;
    var req = new XMLHttpRequest();
    req.open("GET", expandUrl, false);
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
    req.onreadystatechange = function () {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 200) {
                var results = JSON.parse(this.response);
                result = results;
            } else {
                console.log("OdataExpand Error : ");
                console.log(this);
            }
        }
    };
    req.send();
    return result;
}
function ExecuteFetchXMLQuery(dataSet, fetchQuery) {
    var encodedFetchXML = encodeURIComponent(fetchQuery);
    var result;
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/" + dataSet + "?fetchXml=" + encodedFetchXML, false);
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
    req.onreadystatechange = function () {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 200 || (this.status >= 200 && this.status <= 206)) {
                console.log("Success Executing Fetch");
                var results = JSON.parse(this.response);
                result = results;
            }
            else {
                console.log("Error Executing Fetch");
                console.log(this);
                console.log(this.statusText);
            }
        }
    };
    req.send();
    return result;}