NetSuite - OnValidateLine 不工作
NetSuite - OnValidateLine not working
我下面的验证行功能似乎只在第二次单击添加时起作用。因此,如果金额为 500,我将折扣设置为 100,则在点击添加按钮时它应该是 400。它不起作用。如果我再次点击该行,折扣似乎应用了两次 - 金额变为 300。我该如何解决这个问题?
function OnValidateLine(type, name) {
var count = nlapiGetLineItemCount('expense')
var total = nlapiGetFieldValue('usertotal')
for (var x = 1; x <= count; x++) {
var amount = nlapiGetCurrentLineItemValue('expense', 'amount');
var discount = nlapiGetCurrentLineItemValue('expense', 'custcolptc_discount');
if (discount) {
nlapiSetCurrentLineItemValue('expense', 'amount', amount - discount)
}
return true;
}
return true;
}
你实际上并没有对你的循环做任何事情。
此外,您处理此问题的方式充满了问题。
您应该在重新计算事件而不是行验证事件中执行此操作。
如果我这样做,我倾向于管理 'synthetic' 费用线,即计算出的折扣总额。如果有人更改费用说明,您当前执行此操作的方式最终会应用两次折扣。如果您使用折扣行,那么您只需合计折扣并添加或更新折扣行。
通常对于客户端脚本,您需要为您正在查看的每一行推进指针。在下面未经测试的示例中,'id field?' 将是备忘录或帐户列(无论如何您都必须设置帐户):
var totalDiscount = 0;
var discountExpenseAt = 0;
for(var i = nlapiGetLineItemCount('expense'); i> 0; i--){
if(nlapiGetLineItemValue('expense', 'id field?', i) == 'discount identifier') {
discountExpenseAt = i;
continue;
}
totalDiscount += parseFloat(nlapiGetLineItemValue('expense', 'custcolptc_discount', i)) ||0;
}
if(totalDiscount) {
if(discountExpenseAt){
nlapiSelectCurrentLineItem('expense', discountExpenseAt);
nlapiSetCurrentLineItemValue('expense', 'amount', totalDiscount.toFixed(2));
nlapiSetCurrentLineItemValue('expense', 'id field?', 'discount identifier');
nlapiCommitCurrentLineItem('expense');
}
我下面的验证行功能似乎只在第二次单击添加时起作用。因此,如果金额为 500,我将折扣设置为 100,则在点击添加按钮时它应该是 400。它不起作用。如果我再次点击该行,折扣似乎应用了两次 - 金额变为 300。我该如何解决这个问题?
function OnValidateLine(type, name) {
var count = nlapiGetLineItemCount('expense')
var total = nlapiGetFieldValue('usertotal')
for (var x = 1; x <= count; x++) {
var amount = nlapiGetCurrentLineItemValue('expense', 'amount');
var discount = nlapiGetCurrentLineItemValue('expense', 'custcolptc_discount');
if (discount) {
nlapiSetCurrentLineItemValue('expense', 'amount', amount - discount)
}
return true;
}
return true;
}
你实际上并没有对你的循环做任何事情。
此外,您处理此问题的方式充满了问题。
您应该在重新计算事件而不是行验证事件中执行此操作。
如果我这样做,我倾向于管理 'synthetic' 费用线,即计算出的折扣总额。如果有人更改费用说明,您当前执行此操作的方式最终会应用两次折扣。如果您使用折扣行,那么您只需合计折扣并添加或更新折扣行。
通常对于客户端脚本,您需要为您正在查看的每一行推进指针。在下面未经测试的示例中,'id field?' 将是备忘录或帐户列(无论如何您都必须设置帐户):
var totalDiscount = 0;
var discountExpenseAt = 0;
for(var i = nlapiGetLineItemCount('expense'); i> 0; i--){
if(nlapiGetLineItemValue('expense', 'id field?', i) == 'discount identifier') {
discountExpenseAt = i;
continue;
}
totalDiscount += parseFloat(nlapiGetLineItemValue('expense', 'custcolptc_discount', i)) ||0;
}
if(totalDiscount) {
if(discountExpenseAt){
nlapiSelectCurrentLineItem('expense', discountExpenseAt);
nlapiSetCurrentLineItemValue('expense', 'amount', totalDiscount.toFixed(2));
nlapiSetCurrentLineItemValue('expense', 'id field?', 'discount identifier');
nlapiCommitCurrentLineItem('expense');
}