[英]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.