本篇介绍两个关于1:N关系中通过主实体取关联子实体的api,这两个api会常常被用到并且比原来的odata方式更加方便。之前假设我们要取主实体下全部的关联实体的记录都是通过Retrieve Multiple的方式。
直接上代码。注意url最后的写法
var req = new XMLHttpRequest()
req.open("get",Xrm.Page.context.getClientUrl() + "/api/data/v8.0/accounts("
+Xrm.Page.data.entity.getId().replace('{', '').replace('}', '')
+")?$expand=contact_customer_accounts" , false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
var data=JSON.parse(this.responseText).value;
}
else {
var data=JSON.parse(this.responseText).error.message;
}
}
};
req.send();
通过以下的截图就能看到,取出了客户以下的联系人记录。默认取出了记录中的全部属性字段,要取特定字段加上select就可以?
$expand=contact_customer_accounts($select=name)
而以下的截图中没加?$expand=contact_customer_accounts则仅仅取了account实体记录而没有contact
也能够通过例如以下代码取到客户下全部的关联联系人,返回的是包括联系人guid的url。
当中核心的url:/accounts("+Xrm.Page.data.entity.getId().replace('{', '').replace('}', '')+")/contact_customer_accounts/$ref,这里主要用到了$ref,另一个$count 能够计算出客户下关联的联系人的总数。
var req = new XMLHttpRequest()
req.open("get",Xrm.Page.context.getClientUrl() + "/api/data/v8.0/accounts("
+Xrm.Page.data.entity.getId().replace('{', '').replace('}', '')
+")/contact_customer_accounts/$ref" , false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
var data=JSON.parse(this.responseText).value;
}
else {
var data=JSON.parse(this.responseText).error.message;
}
}
};
req.send();
上文中重复出现的连接客户和联系人的关系contact_customer_accounts是怎么来的,这可不是客户中的属性字段哦,详细看以下截图,是客户和联系人1:N关系的架构名称。