Как мне получить, чтобы l oop включил последнюю строку в сценарий пользовательских событий в NetSuite? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть сценарий пользовательских событий в 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
                                            });


          };


};

Как мне убедиться, что l oop действительно проходит через последнюю строку? Журналы указывают, что сценарий останавливается на одну строку ниже того, где он должен быть, то есть последняя вставленная строка проверяется на наличие условий, которые он корректно завершает, а затем сценарий выходит из цикла; он даже не работает на последней строчке.

Спасибо за любой вклад!

Ответы [ 2 ]

3 голосов
/ 14 февраля 2020

Если lineCount - общее количество строк, индекс для последней строки (в SS 2.0) будет lineCount - 1. Таким образом, первая строка вашего for оператора должна быть:

for(var i=0;i<lineCount;i++){ 

NOT

for(var i=0;i<=lineCount;i++){

(Обратите внимание на удаленное "=")

Похоже, что происходит, что скрипт пытается выполнить операцию на несуществующей линии; отсюда и ошибка. Это обычно называется отключено одной ошибкой.

0 голосов
/ 10 марта 2020

Что сказал Криптон.

Кроме того, вам нужно увеличить переменную l oop (i), когда вы добавляете строку в подсписок, а также увеличивает счетчик строк. , Надеюсь, это имеет смысл. Таким образом, отображается общее количество позиций, и ваш l oop пропустит только что добавленную строку.

for(var i = 0; i < lineCount; i++)
{
    ....
    if(sub_field1 === true && isclosed !== true)
    {
        ....
        load_so.insertLine({ sublistId: 'item',
                             line: i+1
                          });
        i++;
        linecount++;
        ....
    }
}

Это действительно будет лучше, как некоторое время l oop, так как использование для заставляет его выглядеть как итерация по фиксированному количеству элементов.

А что касается «от одной проблемы», я получаю много пробега, вспоминая, что такое счет (на основе 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 ..).

...