Скрипт для получения серийных номеров Netsuite Advanced Inventory

Я пытаюсь получить серийные номера из записи выполнения в учетной записи Netsuite, которая использует Advanced Inventory (в отличие от обычной системы инвентаризации Netsuite, Advanced Inventory хранит серийный номер во вспомогательной записи в записи транзакции). Я пробовал использовать пример, который предоставляет Netsuite, и получил ответ NULL. Я попытался получить доступ к существующему сохраненному поиску, но получаю неправильные поля (сохраненный поиск отлично работает в пользовательском интерфейсе). Кто-нибудь знает, в чем прикол? Вот пример кода, который предоставляет Netsuite -

var ffill=nlapiLoadRecord('itemfulfillment', 5892, {recordmode: 'dynamic'});
ffill.selectLineItem('item', 1);
var invDetailSubrecord = ffill.viewCurrentLineItemSubrecord('item', 'inventorydetail');
invDetailSubrecord.selectLineItem('inventoryassignment', 1);

nlapiLogExecution('DEBUG', 'inventory number: ' + invDetailSubrecord.getCurrentLineItemValue('inventoryassignment', 'receiptinventorynumber'));

С помощью приведенного выше кода я получаю NULL из оператора Debug - «Debug Serial Mgr - Create inventory number = null»

А вот код с использованием существующего сохраненного поиска -

var results = nlapiSearchRecord('itemfulfillment', 620, null, null);
var result = results[0];
var columns = result.getAllColumns();
var columnlen = columns.length;

for (ci = 0; ci < columnLen; ci++)
{
var column = columns[ci];
var label = column.getLabel();
var value = result.getValue(column);
nlapiLogExecution('DEBUG','Serial Mgr', 'Columns ' + label + " " + value);

С помощью этого кода я получаю 3 столбца из поиска, но неправильные поля (Itemship и 553 неверны) - «Debug Serial Mgr Columns null 10/16/2013» «Debug Serial Mgr Columns null ItemShip» «Debug Serial Mgr Columns null 553 "


person user2889017    schedule 17.10.2013    source источник


Ответы (2)


Для ярлыка попробуйте следующее

var label = column.getLabel()||column.getText();
person Faz    schedule 24.10.2013

Вот как я это делаю для выполнения задания. Это выполняется внутри запланированного сценария, поскольку это потенциально «дорого» для нас, так как у наших клиентов могут быть очень крупные заказы.

var context = nlapiGetContext();
var internalID = context.getSetting('SCRIPT', 'custscriptitemfulfillment_internalid');
var rec = nlapiLoadRecord("itemfulfillment", internalID);
var count = rec.getLineItemCount("item");
for (var k = 1; k <= count; k++) {
    var internalItemID = rec.getLineItemValue("item", "item", k);
    var itemRecordType = nlapiLookupField('item', internalItemID, 'recordtype');
    if (itemRecordType == 'serializedinventoryitem') {
        var subRec = rec.viewLineItemSubrecord('item', 'inventorydetail', k);
        if (!(!subRec || subRec == null)) {
            var serialNo = [];
            var snc = 0;
            var subRecIntId = subRec.getFieldValue('id');
            var filters = [new nlobjSearchFilter('internalid', null, 'is', subRecIntId)];
            var columns = [
                new nlobjSearchColumn('inventorynumber', 'inventorynumber'),
                new nlobjSearchColumn('quantity'),
                new nlobjSearchColumn('binnumber')
            ];

            var arrSearchResults = nlapiSearchRecord('inventorydetail', null, filters, columns);

            for (var m = 0; m < arrSearchResults.length ; m++) {
                var currSerNo = '';

                var src_serNo = arrSearchResults[m].getValue(columns[0]);
                var src_qty = Math.abs(arrSearchResults[m].getValue(columns[1]));
                var src_bin = arrSearchResults[m].getValue(columns[2]);
                if (src_qty > 0) {
                    if (src_bin && src_bin != null && src_bin > '') {
                        currSerNo = { serialNumber: src_serNo, quantity: src_qty, binNumber: src_bin };
                    }
                    else {
                         currSerNo = { serialNumber: src_serNo, quantity: src_qty };
                    }
                    serialNo[snc] = currSerNo;
                    snc++;
                }
            }
            // snc has a count of all the serial numbers on that fulfilled item
            // serialNo is an array with the serialized items, including their location and bin when applicable.
            // These two get reset on the next line item so process them now.
        }
    }
}

Любые ошибки связаны с переименованием переменных и сокращением кода для удаления дополнительных функций.

person Robert Bolin    schedule 03.08.2016