Netsuite 创建销售订单时超出了RangeError最大调用堆栈大小
我们正在开发一个客户端脚本,它将自动更新速率或单价(*这是一个自定义列),但它会抛出一个错误,我认为这是因为如果我们更改速率,它将自动更新单价,在单价更新后,它也将更新速率,依此类推,直到达到最大调用堆栈,我们正在寻找任何不发生这种情况的解决办法,请参阅下面我的代码。谢谢Netsuite 创建销售订单时超出了RangeError最大调用堆栈大小,netsuite,Netsuite,我们正在开发一个客户端脚本,它将自动更新速率或单价(*这是一个自定义列),但它会抛出一个错误,我认为这是因为如果我们更改速率,它将自动更新单价,在单价更新后,它也将更新速率,依此类推,直到达到最大调用堆栈,我们正在寻找任何不发生这种情况的解决办法,请参阅下面我的代码。谢谢 function fieldChanged(type, name, linenum) { var context = nlapiGetContext(); var user = context.getUser(
function fieldChanged(type, name, linenum)
{
var context = nlapiGetContext();
var user = context.getUser();
var execution = context.getExecutionContext();
try {
switch (name) {
case "custcol_cqwst_po_uprice":
if (execution == "userinterface") {
var qty = nlapiGetCurrentLineItemValue('item', 'quantity');
var taxCode = nlapiGetCurrentLineItemValue('item', 'taxcode');
if (!isNullOrEmpty(taxCode) && !isNullOrEmpty(qty)) {
var taxRate = nlapiGetCurrentLineItemValue('item', 'taxrate1');
var unitprice = nlapiGetCurrentLineItemValue('item', 'custcol_cqwst_po_uprice');
var vatRate = 1 + ((taxRate.replace('%', '')) / 100);
var unitRate = unitprice / vatRate;
nlapiSetCurrentLineItemValue('item', 'rate', unitRate);
}
}
break;
//case "taxcode":
//break;
case "rate":
if (execution == "userinterface") {
var qty = nlapiGetCurrentLineItemValue('item', 'quantity');
var taxCode = nlapiGetCurrentLineItemValue('item', 'taxcode');
if (!isNullOrEmpty(taxCode) && !isNullOrEmpty(qty)) {
var taxRate = nlapiGetCurrentLineItemValue('item', 'taxrate1');
var rate = nlapiGetCurrentLineItemValue('item', 'rate');
var vatRate = 1 + ((taxRate.replace('%', '')) / 100);
var unitPrice = rate * vatRate;
nlapiSetCurrentLineItemValue('item', 'custcol_cqwst_po_uprice', unitPrice);
nlapiLogExecution('debug', "Rate Value", "Rate: " + rate + " Vat Rate: " + vatRate + " Unit Price: " + unitPrice + " Execution: " + execution);
}
}
break;
}
}
catch (ex) {
alert("A scripting problem occurred during the onFieldChange event please inform an administrator quoting the following error: " + ((ex instanceof nlobjError) ? ex.getCode() + '\n' + ex.getDetails() : ex.toString()));
}
}
nlapiSetCurrentLineItemValues()
有第四个参数,名为firefieldchanged
,可以将其设置为false以准确防止此问题
使用火灾现场更改参数
创建脚本时,可以监视字段中的
更改,然后写回更改的字段,存在
创建无限循环的过程如下所示:
firefield已更改客户端脚本中的
参数
firefieldchanged
参数可用于所有写入函数。
如果设置为true,则该参数会触发任何字段更改事件
像平常一样。这是默认设置。如果设置为false,则字段已更改
事件不会被触发