簡體   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