繁体   English   中英

Dynamics CRM WEB API-从实体参考中选择字段

[英]Dynamics CRM WEB API- Select field from entity reference

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

查询字符串: studios$?Select=studioid,studioname,titleid&$Expand=

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

任何帮助表示赞赏!

首先,你可以参考docs.microsoft的这篇文章,详细解释$ expand特性,但为了简单起见,后面跟着目标实体的关系名称,然后是你想在括号中选择的字段

对于前 $expand={relation_name}($select=filed1,field2)

这可能是这样的
$expand=new_new_entity1_new_entity2($select=new_name,createdon)

注意:从扩展关系中获得的值实际上是实际数据的导航URL,因此您不希望检索来自new_entity2的[new_name,createdon],您将得到的将是OData这些值的URL和你可以在下面帮助功能1为你做这件事

您还可以使用XRM Rest Builder ,这是一个非常棒的解决方案,当您在crm上安装时,您会在解决方案视图中找到它的按钮。 该解决方案是一个工具,可以帮助您使用漂亮的GUI设计OData查询,这样您就不需要编写和优化OData查询,这样更快更容易。

帮助功能1

`

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;
}

`

但是如果你想通过一次调用获得所有数据并且你想要扩展到多个实体我建议你使用Fetch XML,只需使用高级查找工具设计你需要的提取来提取fetchXML然后将其传递给Helping Function 2应返回完整数据,但要注意此方法中的最大提取长度限制为2,048个字符[GET请求的最大长度]。

帮助功能2
`

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;}

`

尝试这个:

studios?$select=studioid,studioname,titleid&$expand=titleid($select=titleid,name)

此外,建议使用CRM REST Builder来编写和测试CRM web api查询。

阅读更多

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM