奇怪的错误TypeError:无法读取属性' setValue' onSuccessMapUnitFields中的null值

时间:2018-05-24 23:05:28

标签: javascript error-handling dynamics-crm

此代码运行正常,直到我决定再添加4行代码,因此我删除了它们。但是我得到了这个错误,有趣的是我在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"); } } 函数上添加了我的行。我需要帮助。

{{1}}

1 个答案:

答案 0 :(得分:0)

debugger;功能& {}中添加Unit_OnChange成功回调函数onSuccessMapUnitFields,然后在调试时,您可以确定priceperunitbaseamountir_publishedrate中的3个字段中的哪一个正在抛出此错误。

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

故障安全方法:

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