Dynamics CRM 2016 - 检索lookupfield值

时间:2016-09-06 13:27:14

标签: javascript dynamics-crm-2016

我使用脚本使用来自其他实体的信息填充一个实体。它工作得很好,我可以为所有静态字段做到这一点没问题。

但是,当其中一个字段是查找字段时,它不起作用。

有人可以指出我正确的方向让以下工作吗?

在下面的示例中,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);
    }
}
}

1 个答案:

答案 0 :(得分:1)

你试图在这里将三角形放在三角形里面,这是oData(实体引用)和Form(Lookup)之间数据模型不同的问题。

你应该这样做(为了便于阅读,稍作重写):

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

请注意,这不是要复制粘贴,而是作为关于OP中错误的PoC。