在销售订单(SuiteScript 1.0)上使用“添加多个”按钮时不会触发客户端脚本

问题描述 投票:0回答:1

我有一个客户端脚本,它做了两件事:

  1. 计算添加行的销售订单总重量
  2. 将税码从自定义字段复制到本机字段

从子列表在UI中添加行时,脚本正确部署,但是当使用“添加多个”按钮并一次选择并添加多行时,脚本不会触发。这是我到目前为止编写的脚本(我有两个版本,一个是validateLine,另一个是postSourcing)。

验证行:

function calculateTotalWeight(type){

      var lines = nlapiGetLineItemCount('item');
      var totalWeight = 0 ;

      for(var i=1; i< lines+1 ; i++){   
           var weight = nlapiGetLineItemValue('item', 'custcol_itemweight', i);
           var quantity = nlapiGetLineItemValue('item', 'quantity', i);
           var weightTimesQuantity = weight * quantity;

           totalWeight = totalWeight + weightTimesQuantity ;

      }
      nlapiSetFieldValue('custbody_items_total_weight', totalWeight);

}
function validateLine(type){

        var taxableCustomer = nlapiGetFieldValue('custbody_taxable');

        if (taxableCustomer == 'T'){
            var customTax = nlapiGetCurrentLineItemValue(type,'custcol_taxcode');
            nlapiLogExecution('DEBUG', 'Custom Tax Value',customTax);
            nlapiSetCurrentLineItemValue('item','taxcode',customTax,true,true);
        }
        return true;
}

postSoursing:

function calculateTotalWeight(type){

      var lines = nlapiGetLineItemCount('item');
      var totalWeight = 0 ;

      for(var i=1; i< lines+1 ; i++){   
           var weight = nlapiGetLineItemValue('item', 'custcol_itemweight', i);
           var quantity = nlapiGetLineItemValue('item', 'quantity', i);
           var weightTimesQuantity = weight * quantity;

           totalWeight = totalWeight + weightTimesQuantity ;

      }
      nlapiSetFieldValue('custbody_items_total_weight', totalWeight);

}
function postSourcing(type, name)
{

  if(type === 'item' && name === 'item')
  {
    var custcol_taxcode = nlapiGetCurrentLineItemValue('item', 'custcol_taxcode');
    var line = nlapiGetCurrentLineItemIndex(type);

    {
        nlapiSetCurrentLineItemValue('item', 'taxcode', custcol_taxcode);
    }
  }
}

如何通过添加多个按钮来触发此脚本?

netsuite suitescript
1个回答
0
投票

您需要计算recalc事件的权重。以下内容来自一个脚本,该脚本用作可编写脚本的cart / checkout脚本。它可以部署在电子商务上下文或UI上下文中。 (即部署的客户端脚本,而不是附加到表单的客户端脚本)

注意:您应设置税码,以便自动分配。可以编写那些脚本但这样做很麻烦。

字段custbody_sco_toggle是一个复选框字段,如果您的recalc脚本可能更改订单总数,则会使脚本无限循环。

var scriptableCart = (function(){

var cartScript = {};

var isUI = ('userinterface' == nlapiGetContext().getExecutionContext());
var isWeb = !isUI;

function tty(type, title, detail){
    var haveWindow = typeof window != 'undefined';
    if(isUI && haveWindow && window.console) window.console.log(title, detail);
    else if(isWeb || !haveWindow) nlapiLogExecution(type, title, (detail || '') +' '+entranceId +' '+nlapiGetContext().getExecutionContext()); // this slows down the NS GUI
}

function calculateTotalWeight(type){...}

cartScript.recalc = function(type){
    tty("DEBUG", "entered "+ type +" with toggle: "+ nlapiGetFieldValue('custbody_sco_toggle'));
    if('F' == nlapiGetFieldValue('custbody_sco_toggle')){
        try{
            nlapiSetFieldValue('custbody_sco_toggle', 'T', false, true);
            if(type == 'item'){
                calculateTotalWeight(type);
            }
        }catch(e){
            tty('ERROR', 'In recalc for '+ type, (e.message || e.toString()) + (e.getStackTrace ? (' \n \n' + e.getStackTrace().join(' \n')) : ''));
        }finally{
            nlapiSetFieldValue('custbody_sco_toggle', 'F');
        }
    }
};

return cartScript;
})();
© www.soinside.com 2019 - 2024. All rights reserved.