【问题标题】:weird Error TypeError: Cannot read property 'setValue' of null at onSuccessMapUnitFields [closed]奇怪的错误类型错误:无法在 onSuccessMapUnitFields 读取属性“setValue”的 null [关闭]
【发布时间】:2018-05-24 23:05:27
【问题描述】:

这段代码运行良好,直到我决定再添加 4 行代码,所以我删除了它们。但是我得到了这个错误,有趣的是我在Form_onload 函数上添加了我的行。我需要这方面的帮助。

function Form_OnLoad() {
    debugger;
        if (Xrm.Page.ui.getFormType() == 1) {
            Xrm.Page.getAttribute("quantity").setValue(1);
            Xrm.Page.getAttribute("quantity").setSubmitMode("always");
            Xrm.Page.getAttribute("isproductoverridden").setValue(true);

  Xrm.Page.getAttribute("isproductoverridden").setSubmitMode("always");
        }
        else {
            ActOnFields("disable", "ir_unit");
            ActOnFields("show", "salesorderid");
        }
    }

    function Unit_OnChange() {
        var Unit = Xrm.Page.getAttribute("ir_unit").getValue();
        if (Unit != null && Unit.length > 0) {
            var lookupid = Unit[0].id;
            var oDataSetName = "ir_unitSet";
            var columns = "ir_AmountRate,ir_Expenses,ir_PublishedRate";
            var filter = "ir_unitId eq (guid'" + lookupid + "')";
            retrieveMultiple(oDataSetName, columns, filter, "", onSuccessMapUnitFields);
            Xrm.Page.getAttribute("productdescription").setValue(Unit[0].name);
            Xrm.Page.getAttribute("productdescription").setSubmitMode("always");
        }
        else {
            Xrm.Page.getAttribute("priceperunit").setValue(null);
            Xrm.Page.getAttribute("priceperunit").setSubmitMode("always");
            Xrm.Page.getAttribute("baseamount").setValue(null);
            Xrm.Page.getAttribute("baseamount").setSubmitMode("always");
        }
    }
    function onSuccessMapUnitFields(data, textStatus, XmlHttpRequest) {
        if (data && data.length > 0) {
            var price = 0;
            //if (data[0].ir_AmountRate != null && data[0].ir_AmountRate.Value != null) {
            //price += parseFloat(eval(data[0].ir_AmountRate.Value));
            //}
            if (data[0].ir_PublishedRate != null) {
                price += parseFloat(eval(data[0].ir_PublishedRate));
            }
            if (data[0].ir_Expenses != null && data[0].ir_Expenses.Value != null) {
                price += parseFloat(eval(data[0].ir_Expenses.Value));
            }
            Xrm.Page.getAttribute("priceperunit").setValue(price);
            Xrm.Page.getAttribute("priceperunit").setSubmitMode("always");
            Xrm.Page.getAttribute("baseamount").setValue(price);
            Xrm.Page.getAttribute("baseamount").setSubmitMode("always");
            Xrm.Page.getAttribute("ir_publishedrate").setValue(price);
            Xrm.Page.getAttribute("ir_publishedrate").setSubmitMode("always");
        }
    }

【问题讨论】:

    标签: javascript error-handling dynamics-crm


    【解决方案1】:

    在Unit_OnChange函数和成功回调函数onSuccessMapUnitFields中添加debugger;,然后在调试时可以找出priceperunit、baseamount、ir_publishedrate中的3个字段中的哪一个在抛出这个错误。

    在调用 setValue(price) 之前,还要验证您是否正在调用 ActOnFields 方法以在其他任何地方隐藏这 3 个字段。因为如果控件/属性在表单中不可见 - Xrm.Page.getAttribute 返回 null,那么当您尝试 setValue 时它会失败并出现此错误。

    故障安全方法:

    if(Xrm.Page.getAttribute("baseamount") != null){
           Xrm.Page.getAttribute("baseamount").setValue(price);
           Xrm.Page.getAttribute("baseamount").setSubmitMode("always");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 2017-12-15
      相关资源
      最近更新 更多