[英]How do I get my for loop to include the last line in a user event script in NetSuite?
我在 NetSuite 中有一个用户事件脚本,它循环遍历所有销售订单行项目,并根据一些条件自动添加存款。 它适用于除最后一行之外的所有行。
几乎工作代码:
for(var i=0;i<=lineCount;i++){
var sub_field2 = load_so.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: i
});
log.debug({
title:"Item ID",
details: sub_field2
});
var sub_field1 = load_so.getSublistValue({
sublistId: 'item',
fieldId: 'custcol_vcc_deposit_item',
line: i
});
log.debug({
title:"Deposit Item?",
details: sub_field1
});
var isclosed = load_so.getSublistValue({
sublistId: 'item',
fieldId: 'isclosed',
line: i
});
if(sub_field1 == true && isclosed !== true){
var linkeddepitem = load_so.getSublistValue({
sublistId: 'item',
fieldId: 'custcol_vcc_ldi',
line: i
});
log.debug({
title:"Linked Item ID",
details: linkeddepitem
});
var depqty = load_so.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
});
log.debug({
title:"Qty",
details: depqty
});
load_so.insertLine({
sublistId: 'item',
line: i+1
});
load_so.setSublistValue({
sublistId: 'item',
fieldId:'item',
line: i+1,
value: linkeddepitem
});
load_so.setSublistValue({
sublistId: 'item',
fieldId:'quantity',
line: i+1,
value: depqty
});
var lineCountduringloop = load_so.getLineCount({ sublistId: 'item' });
log.debug({
title:"Line Count Before Return",
details: lineCountduringloop
});
};
};
我如何确保循环实际上通过最后一行? 日志表明脚本停止了比它应该在的位置少一行的地方,即检查插入的最后一行的条件,它正确地失败,然后脚本退出循环; 它甚至不在最后一行运行。
感谢您提供任何意见!
如果lineCount
是总行数,则最后一行的索引(在 SS 2.0 中)将为lineCount - 1
。 所以你的for
语句的第一行应该是:
for(var i=0;i<lineCount;i++){
不是
for(var i=0;i<=lineCount;i++){
(注意删除了“=”)
看起来发生的事情是脚本正在尝试对不存在的行进行操作; 因此错误。 这通常被称为一个错误。
氪星说的。
此外,您需要在添加一行到子列表来增加你的循环变量(i),并且还增加了行数。 希望这是有道理的。 这样就表示了行项目的总数,您的循环将跳过新添加的行。
for(var i = 0; i < lineCount; i++)
{
....
if(sub_field1 === true && isclosed !== true)
{
....
load_so.insertLine({ sublistId: 'item',
line: i+1
});
i++;
linecount++;
....
}
}
这确实作为 while 循环会更好,因为使用 for 使它看起来像是对固定数量的项目进行迭代。
关于“一个问题”,通过记住什么是计数(基于 1)和什么是偏移量(基于 0),我获得了很多里程。 数组的长度是一个计数,因此是基于一个的。 但是最后一项的索引(作为偏移量)是基于 0 的。
list = ['a', b', 'c', 'd'];
list.length === 4
list[list.length -1] === 'd'
// get second pair
index = 1; // an index (first pair has the index of 0).
lengthOfGroup = 2; // This is a count.
indexWithinGroup = 0; // another index
list[index * lengthOfGroup + indexWithinGroup] === 'c'
indexWithinGroup = 1;
list[index * lengthOfGroup + indexWithinGroup] === 'd'
当事情是基于一个的时,上面的事情会变得更加困难。 特别是当您使用 javascript API 时(我正在看着您,suitescript 1.0 ..)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.