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

时间:2017-12-28 17:45:02

标签: netsuite suitescript

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

  1. 计算添加行
  2. 时的销售订单总重量
  3. 将自定义字段中的税码复制到本机字段
  4. 当从子列表在UI中添加行时,脚本正确部署,但使用"添加多个"按钮,一次选择和添加多行,脚本不会触发。这是我到目前为止编写的脚本(我有2个版本,一个是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;
    }
    

    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 postSourcing(type, name)
    {
    
      if(type === 'item' && name === 'item')
      {
        var custcol_taxcode = nlapiGetCurrentLineItemValue('item', 'custcol_taxcode');
        var line = nlapiGetCurrentLineItemIndex(type);
    
        {
            nlapiSetCurrentLineItemValue('item', 'taxcode', custcol_taxcode);
        }
      }
    }
    

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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