Код Suitescript останавливается без видимой причины

У меня есть следующий код, который выполняет поиск, а затем просто останавливается.

for (var i=1; i<=numberItems; i++ ) {
        nlapiInsertLineItem(SUBLIST_Items,1);
        var itemID = vendorItems[i].getId();
        nlapiSetCurrentLineItemValue(SUBLIST_Items,'custrecordvpri_item',itemID );
        var avgCost  = Round(nlapiLookupField(itemType,itemID,'averagecost'),4);
        var stdCost  = Round(nlapiLookupField(itemType,itemID,'custitem_costrepl'),4);
        var lastCost = Round(nlapiLookupField(itemType,itemID,'lastpurchaseprice'),4);
        if (isNaN(avgCost))  { avgCost  = '' };
        if (isNaN(stdCost))  { stdCost  = '' };
        if (isNaN(lastCost)) { lastCost = '' };
        nlapiSetCurrentLineItemValue(SUBLIST_Items,'custrecordvpri_costavg',  avgCost );
        nlapiSetCurrentLineItemValue(SUBLIST_Items,'custrecordvpri_costlast', lastCost );
        nlapiSetCurrentLineItemValue(SUBLIST_Items,'custrecordvpri_coststd',  stdCost );
        nlapiSetCurrentLineItemValue(SUBLIST_Items,'custrecordvpri_vendorcurrency',vendorItems[i].getValue('vendorpricecurrency'));
        nlapiSetCurrentLineItemValue(SUBLIST_Items,'custrecordvpri_currentprice',vendorItems[i].getValue('vendorcost'));
        nlapiCommitLineItem(SUBLIST_Items);
    }   

Все это выполняется как клиентский сценарий, запускаемый кнопкой в ​​записи поставщика.

В этой функции есть несколько подфункций (например, поиск и т. Д.).

Я не могу найти причину, по которой код останавливался.

если я закомментирую цикл «while», он запускает новое окно и т. д., и создается основная запись (VprRecord), но без элементов подсписка.

Что-то мне здесь не хватает? Я не опытный JS-программист, но основы есть. Разрешено ли ограниченное количество вложенных функций или что-то в этом роде?

У меня есть только одна запись, так что управление не должно быть проблемой.

Добавление моей функции поиска, которая возвращает объект результата поиска:

function getVendorItems(vendorid) {
        try {
            var filters = new Array();
            var columns = new Array();
            filters[0] = new nlobjSearchFilter('vendorcost', null, 'greaterthan', 0);
            filters[1] = new nlobjSearchFilter('internalid', 'vendor', 'anyof', vendorid );
            columns[0] = new nlobjSearchColumn('itemid');
            columns[1] = new nlobjSearchColumn('entityid', 'vendor');
            columns[2] = new nlobjSearchColumn('vendorcost');
            columns[3] = new nlobjSearchColumn('vendorcode');
            columns[4] = new nlobjSearchColumn('vendorpricecurrency');
            //columns[5] = new nlobjSearchColumn('preferredvendor');
            var searchresults = nlapiSearchRecord('item', null, filters, columns );
            return searchresults;
        } catch (err) { logError(err,'VPR_getVendorItems: (Vendor: '+vendorid+')' ) }
    } 

person Steve Reeder    schedule 30.12.2015    source источник
comment
Обратите внимание: я также пробовал тот же код с циклом for вместо while.   -  person Steve Reeder    schedule 30.12.2015
comment
вы видите предупреждение в браузере?   -  person prasun    schedule 30.12.2015
comment
Нет. Вообще ничего ... пробовал, это тоже nlapiLogExecution ... ничего,   -  person Steve Reeder    schedule 30.12.2015
comment
поместите свой код в блок try catch и в журнал ошибок на консоли, например: try { ...} catch(e){console.dir(e);}. Похоже, что на стороне клиента есть ошибка JS, которая блокирует выполнение остальной части кода. Используйте консоль браузера с помощью F12, чтобы увидеть ошибку   -  person prasun    schedule 30.12.2015
comment
Хм. Он говорит, что .getValue (и getFieldValue) не являются допустимыми функциями. Все же объект является результатом поиска ??   -  person Steve Reeder    schedule 30.12.2015
comment
это потому, что searchResultls - это массив, вам нужно сделать - searchResultls[numberItem].getValue(FIELD_ID)   -  person prasun    schedule 30.12.2015
comment
Аххх конечно ... теперь я чувствую себя настоящим дураком   -  person Steve Reeder    schedule 30.12.2015


Ответы (1)


Код не выполняется из-за необработанных ошибок javascript.

поместите свой код в блок try catch и в журнал ошибок на консоли, например: try { ...} catch(e){console.dir(e);}

Используйте консоль браузера с помощью F12, чтобы увидеть ошибку

Также убедитесь, что вы работаете с searchResults как с массивом, а не с nlobjSearchResult

person prasun    schedule 30.12.2015
comment
теперь я получаю ............. 'TypeError: a.toLowerCase не является функцией в nsapiGetRecord (system.netsuite.com/javascript/) 'Это после первой попытки вставки. - person Steve Reeder; 30.12.2015
comment
это происходит, если вы передаете неправильные аргументы, каково точное утверждение? - person prasun; 30.12.2015
comment
Мне нужно знать конкретную строку, в которой вы получаете эту ошибку. - person prasun; 30.12.2015
comment
кажется nlapiLookupField(itemType,itemID,'averagecost') любой из первых двух аргументов undefined - person prasun; 30.12.2015
comment
Красиво ... Сейчас работает ... Легендарная помощь !! Благодарю вас .... Я узнал больше от вас, @prasun, за последние несколько дней, чем, я думаю, я бы узнал из учебной программы Aussie NS. Я знаю, что это не по теме, есть ли простой способ отобразить ход выполнения такой функции? - person Steve Reeder; 30.12.2015
comment
Самый простой способ - console.log() и посмотреть в консоли. в противном случае используйте причудливую библиотеку HTML / CSS / JS для отображения индикатора выполнения - person prasun; 30.12.2015
comment
в идеале вставка позиций не должна занимать много времени, но последняя nlapiSubmitRecord() сама может занять значительное время. Это занимает слишком много времени? - person prasun; 30.12.2015
comment
на самом деле вы делаете nlapiLookupField, стоимость управления которым составляет около 4 баллов, поэтому в вашем случае 12 баллов на подсписок - person prasun; 30.12.2015
comment
напишите поиск и используйте searchResult многократно, вместо того, чтобы запускать search/lookup в каждом поле - person prasun; 30.12.2015
comment
что странно сейчас, так это то, что строки подсписка не прикрепляются к основной записи. Я создам новый вопрос и дам ссылку на этот. - person Steve Reeder; 30.12.2015
comment
да, сделайте это, слишком много комментариев - person prasun; 30.12.2015
comment
stackoverflow.com/questions/34528400/ - person Steve Reeder; 30.12.2015