在创建/编辑订单时,在销售订单上输入两次相同的项目时弹出警告

时间:2018-02-02 20:18:59

标签: javascript duplicates netsuite suitescript

如果在Netsuite上创建/修改订单时输入两次完全相同的项目,我会尝试在保存销售订单之前执行弹出警告。但是,没有窗口弹出,我不确定脚本有什么问题。这是我得到的:

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

感谢Krypton !!

1 个答案:

答案 0 :(得分:2)

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

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

它发现type等于undefined,因此不符合条件,代码将直接跳至已设置为return flag的{​​{1}}。

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

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

  

我想理解你在itemSO [i]背后的逻辑 - 因为itemSO不是一个数组。为什么不直接将内循环的当前行中的项与外循环的当前行进行比较,如果它们匹配则将标志设置为false?此外,内部循环只需要从j = i + 1开始,因为之前的行已经被比较过了。