RangeError创建销售订单时超出了最大调用堆栈大小

时间:2017-05-25 04:19:11

标签: netsuite

我们正在开发一个客户端脚本,它将自动更新费率或单价(*这是一个自定义列),但它会引发错误,我认为这是因为如果我们更改费率,它将自动更新单价和在单价更新后,它也将更新费率,依此类推,直到达到最大调用堆栈,我们正在寻找任何解决方法,为此不会发生,请参阅下面的代码。感谢

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()));
}
}

1 个答案:

答案 0 :(得分:2)

nlapiSetCurrentLineItemValues()有一个名为firefieldchanged的第四个参数,可以将其设置为false以防止出现此问题

  

使用火场更改参数

     

创建脚本时,可以为一个字段监视字段   改变,然后写回更改的字段,风险   创建无限循环存在如下:

     
      
  1. 客户端脚本监视要更改的fieldA。
  2.   
  3. fieldA更改。
  4.   
  5. 脚本写入fieldA,导致Field Changed事件触发,   将代码返回到第2步,此循环无限重复。
  6.         

    要防止此循环行为,您可以设置可选项   客户端脚本中的firefieldchanged参数。

         

    firefieldchanged参数可用于所有写入功能。   如果设置为true,则该参数会导致触发任何字段更改事件   像平常一样。这是默认设置。如果设置为false,则字段已更改   事件不会被解雇。