如果在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 !!
答案 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开始,因为之前的行已经被比较过了。