Dynamics CRM 2016 - 检索查找字段值
Dynamics CRM 2016 - Retrieve lookupfield value
我正在使用脚本将来自另一个实体的信息填充到一个实体中。它工作得很好,我可以为所有静态字段做到这一点,没问题。
但是,当其中一个字段是查找字段时,它不起作用。
有人可以为我指明正确的方向以使下面的工作正常进行吗?
在下面的示例中,new_rehabconsultant 字段是联系表上的查找字段。 new_UnitNumber 是一个静态的单行文本字段。 new_UnitNumber 填充正常,new_rehabconsultant 查找字段不是
function Contact_OnChange() {
var contact = Xrm.Page.getAttribute("regardingobjectid").getValue();
if (contact == null) {
return;
}
var serverUrl = Xrm.Page.context.getClientUrl();
var oDataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc/ContactSet?$select=new_UnitNumber,new_rehabconsultant&$filter=ContactId eq guid'" + contact[0].id + "'";
var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", oDataSelect, false);
retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json;charset=utf-8");
retrieveReq.onreadystatechange = function () {
GetContactData(this);
};
retrieveReq.send();
}
function GetContactData(retrieveReq) {
if (retrieveReq.readyState == 4) {
if (retrieveReq.status == 200) {
var retrieved = JSON.parse(retrieveReq.responseText).d;
Xrm.Page.getAttribute("new_unitnumber").setValue(retrieved.results[0].new_UnitNumber);
Xrm.Page.getAttribute("new_rehabconsultant").setValue(retrieved.results[0].new_rehabconsultant);
}
}
}
您试图在此处将立方体放入三角形内,这是 oData(实体引用)和 Form(查找)之间数据模型不同的问题。
你应该这样做(为了便于阅读而稍微重写):
function GetContactData(retrieveReq) {
if (retrieveReq.readyState == 4) {
if (retrieveReq.status == 200) {
var retrieved = JSON.parse(retrieveReq.responseText).d;
Xrm.Page.getAttribute("new_unitnumber").setValue(retrieved.results[0].new_UnitNumber);
var record = retrieved.results[0].new_rehabconsultant;
// mind the square brackets, lookup values are *arrays*
var value = [{ id: record.Id, name: record.Name, entityType: record.LogicalName }];
Xrm.Page.getAttribute("new_rehabconsultant").setValue(value);
}
}
}
请注意,这并不是要复制粘贴,而是作为一个 PoC,说明 OP 中的错误。
我正在使用脚本将来自另一个实体的信息填充到一个实体中。它工作得很好,我可以为所有静态字段做到这一点,没问题。
但是,当其中一个字段是查找字段时,它不起作用。
有人可以为我指明正确的方向以使下面的工作正常进行吗?
在下面的示例中,new_rehabconsultant 字段是联系表上的查找字段。 new_UnitNumber 是一个静态的单行文本字段。 new_UnitNumber 填充正常,new_rehabconsultant 查找字段不是
function Contact_OnChange() {
var contact = Xrm.Page.getAttribute("regardingobjectid").getValue();
if (contact == null) {
return;
}
var serverUrl = Xrm.Page.context.getClientUrl();
var oDataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc/ContactSet?$select=new_UnitNumber,new_rehabconsultant&$filter=ContactId eq guid'" + contact[0].id + "'";
var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", oDataSelect, false);
retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json;charset=utf-8");
retrieveReq.onreadystatechange = function () {
GetContactData(this);
};
retrieveReq.send();
}
function GetContactData(retrieveReq) {
if (retrieveReq.readyState == 4) {
if (retrieveReq.status == 200) {
var retrieved = JSON.parse(retrieveReq.responseText).d;
Xrm.Page.getAttribute("new_unitnumber").setValue(retrieved.results[0].new_UnitNumber);
Xrm.Page.getAttribute("new_rehabconsultant").setValue(retrieved.results[0].new_rehabconsultant);
}
}
}
您试图在此处将立方体放入三角形内,这是 oData(实体引用)和 Form(查找)之间数据模型不同的问题。
你应该这样做(为了便于阅读而稍微重写):
function GetContactData(retrieveReq) {
if (retrieveReq.readyState == 4) {
if (retrieveReq.status == 200) {
var retrieved = JSON.parse(retrieveReq.responseText).d;
Xrm.Page.getAttribute("new_unitnumber").setValue(retrieved.results[0].new_UnitNumber);
var record = retrieved.results[0].new_rehabconsultant;
// mind the square brackets, lookup values are *arrays*
var value = [{ id: record.Id, name: record.Name, entityType: record.LogicalName }];
Xrm.Page.getAttribute("new_rehabconsultant").setValue(value);
}
}
}
请注意,这并不是要复制粘贴,而是作为一个 PoC,说明 OP 中的错误。