【问题标题】:Dynamics CRM 2016 - Retrieve lookupfield valueDynamics CRM 2016 - 检索查找字段值
【发布时间】:2016-09-06 13:27:13
【问题描述】:

我正在使用脚本来使用来自另一个实体的信息填充一个实体。它很好用,我可以对所有静态字段都做到这一点,完全没有问题。

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

有人可以指点我正确的方向以使以下工作正常吗?

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

【问题讨论】:

    标签: javascript dynamics-crm-2016


    【解决方案1】:

    您正在尝试将立方体放入此处的三角形内,这是 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);
            }
        }
    }
    

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

    【讨论】:

    • 亚历克斯,感谢您的回复。我尝试将其合并到上面的代码中,但没有成功。你能告诉我它应该是什么样子吗?
    猜你喜欢
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多