繁体   English   中英

如何让我的 for 循环在 NetSuite 的用户事件脚本中包含最后一行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM