当订单为 created/edited 时,在销售订单上输入两次相同商品时弹出警告

Pop up a warning when the same item is entered twice on a sales order when the order is created/edited

如果在 Netsuite 上的订单为 created/modified 时输入了两次完全相同的商品,我会尝试在保存销售订单之前弹出警告。但是,没有 window 弹出,我不确定脚本有什么问题。这是我得到的:

function validateitem (type){


var flag = true;
var numLine = nlapiGetLineItemCount('item');
itemArr = [];

if (type == 'item' && numLine > 0) {
       for(var i = 0; i < numLine; i++) {
           var itemSO = {};
           itemSO.id = nlapiGetLineValue('item','item',i);
           if (itemSO.id != null && itemSO.id !=''){
               for (var j = 0; j < numLine; j++){
                  if(itenArr.indexOf(itemSO[i].id) === -1) {
                      itemArr.push(itemSO[i].id);}
                  else{
                      if (!confirm('You have entered a duplicate item for this sales order. Continue?'))
                         {
                            flag = false;
                         }
                  }
              }
           }
        }
}
return flag;
}

有人可以帮忙吗?


这里是一个稍微编辑过的版本:

function validateitem (){


var flag = true;
var numLine = nlapiGetLineItemCount('item');
itemArr = [];

if (numLine > 0) {
       for(var i = 1; i <= numLine; i++) {
           var itemSO = nlapiGetLineItemValue('item','item',i);
           if (itemSO != null && itemSO !=''){
               for (var j = 1; j <= numLine; j++){
                  if(itemArr.indexOf(itemSO[i]) === -1) {
                      itemArr.push(itemSO[i]);}
                  else{
                      flag = false;
                  }
              }
           }
        }
}
if (flag == false){
    alert('You have entered the same item twice.Continue?');
}
return flag;
}

这是有效的完整编辑后代码:

function validateitem (){

var flag = true;
var numLine = nlapiGetLineItemCount('item');
itemArr = [];

if (numLine > 0) {
       for(var i = 1; i <= numLine; i++) {
           var itemSO = nlapiGetLineItemValue('item','item',i);
           if (itemSO != null && itemSO !=''){
               for (var j = i+1; j <= numLine; j++){
                   var itemSOplus = nlapiGetLineItemValue('item','item',j);
                   if(itemSO === itemSOplus) {
                      flag = false;
                      }
              }
           }
        }
}
if (flag == false){
    alert('You have entered the same item twice.Continue?');
}
return flag;
}

感谢氪星!!

根据SuiteAnswers ID 10579,没有参数传递给 saveRecord 客户端事件。因此,当您的代码检查以下内容时:

if (type == 'item' && numLine > 0)

发现type等于undefined,所以不满足条件,代码会直接跳转到return flag已经设置为true

另请注意,在 SuiteScript 1.0 中,行索引从 1 开始 - 而不是您的代码假定的 0。

编辑 - 添加评论以构成此答案的一部分:

I'd like to understand your logic behind itemSO[i] - as itemSO is not an array. Why not just compare the item from the current line of the inner loop with the current line of the outer loop and set the flag false if they match? Also, the inner loop need only start from j = i + 1 as the previous lines would have already been compared.