javascript - 奇怪的错误类型错误:无法在 onSuccessMapUnitFields 读取属性“setValue”的 null
问题描述
这段代码运行良好,直到我决定再添加 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");
}
}
解决方案
添加debugger;
内部Unit_OnChange
函数和成功回调函数onSuccessMapUnitFields
,然后在调试时您可以找出 , 中的 3 个字段中的哪一个priceperunit
抛出baseamount
此ir_publishedrate
错误。
在调用 this 之前,还要验证您是否正在调用ActOnFields
方法以在其他任何地方隐藏这 3 个字段setValue(price)
。因为如果控件/属性在表单中不可见 -Xrm.Page.getAttribute
返回null,那么当您尝试setValue
它时会失败并出现此错误。
故障保护方法:
if(Xrm.Page.getAttribute("baseamount") != null){
Xrm.Page.getAttribute("baseamount").setValue(price);
Xrm.Page.getAttribute("baseamount").setSubmitMode("always");
}
推荐阅读
- excel - 将 Useform 中 TextBox 中的值添加到预定义表
- android - 颤振未在完全重启时应用更改
- node.js - Electron Windows Store events.js 抛出未处理的“错误”事件
- jquery - 勾选输入单选属性
- ios - 在 React-native 模块中找不到带有 URLForResource 的 .caf 文件
- javascript - 如何等待对象在异步JS中构造
- sql - 带有条件的数据透视表
- xamarin - 我的多个用户报告了崩溃,但只有少数用户在 appcenter 中得到报告。知道为什么吗?
- laravel - laravel 中没有显示任何错误
- wpf - 在同一代码块中第二次调用 Property 时,WPF PropertyChange 不会更新