1

无论我做什么,我都无法更新入库货件记录中的行项目值。我有大量的调试语句,而且我知道我在技术上处于正确的位置,但是当我尝试获取或设置值时,它们是空的。

我在动态模式下工作,所以为了循环,我在网上找到了一些东西,说我需要对记录进行字符串化。我看到了所有正确的数据,但是每当我尝试操纵这些值时,它什么都不做,或者这些值是空的。我也不断被要求提供必填字段,但对于这一特定行,它们已经存在。

这是我的代码:

    function doPost(restletBody){

    log.debug('Called from POST', restletBody);

    var success = [],
    errors = [];

    restletBody.data.forEach(function(e) 
    {
        try 
        {
            //Inbound Shipment Stuff
            var ibsID = e.ibShipments.inboundShipmentRecordID;
            var containerNumber = e.ibShipments.containerNumber;
            var memo = e.ibShipments.memo;
            var cargoReturnDate = e.ibShipments.cargoReturnDate;
            var billoflading = e.ibShipments.billoflading;
            var quantityexpected = e.ibShipments.quantityexpected;
            var destCountry = e.ibShipments.destCountry;
            var actualdeliverydate = e.ibShipments.actualdeliverydate;
            var expecteddeliverydate = e.ibShipments.expecteddeliverydate;
            var poDueDate = e.ibShipments.poDueDate;
            var shipmentstatus = e.ibShipments.shipmentstatus;
            var factory = e.ibShipments.factory;
            var vesselNumber = e.ibShipments.vesselNumber;
            var actualshippingdate = e.ibShipments.actualshippingdate;
            var expectedshippingdate = e.ibShipments.expectedshippingdate;
            var vesselBookingNumber = e.ibShipments.vesselBookingNumber;
            var bookingDate = e.ibShipments.bookingDate;

            var recID = null;

            if((ibsID == "" || ibsID == null) && (containerNumber != "" || memo != "" || cargoReturnDate != "" ||
                billoflading != "" || quantityexpected != "" || destCountry != "" || actualdeliverydate != "" ||
                expecteddeliverydate != "" || poDueDate != "" || shipmentstatus != "" || factory != "" || vesselNumber != "" ||
                actualshippingdate != "" || expectedshippingdate != "" || vesselBookingNumber != "" || bookingDate != ""))
            {
                //Create a new record
                log.debug('Create Record', "");
                var rec =
                    r.create({
                        type: "inboundshipment",
                        isDynamic: true,
                        defaultValues: null
                    });

                //Might need to save the record, then add the fields
                recID = rec.save();
                var i = 1;
            }
            else
            {
                log.debug('Update Record Instead', ibsID);
                recID = ibsID;
            }
            var inboundShipmentUpdate = r.load({
                type:   'inboundshipment', 
                id:     recID,
                isDynamic: true
                });

            //Get Values from purchase order
            var poID = e.poID;
            var poName = e.poName;
            var poShipDate = e.poShipDate;
            var poShipWindowStart = e.poShipWindowStart;
            if(poShipWindowStart != "")
                poShipWindowStart = new Date(poShipWindowStart);
            else
                poShipWindowStart = "";

            var poShipWindowEnd = e.poShipWindowEnd;
            if(poShipWindowEnd != "")
                poShipWindowEnd = new Date(poShipWindowEnd);
            else
                poShipWindowEnd = "";

            //Item Fields
            var itemID = e.items.itemID;
            var itemDisplayName = e.items.displayName;
            var itemName = e.items.name;

            //Get Values from inbound shipment entry            
            var shipmentnumber = e.ibShipments.shipmentnumber;
            var bookingDate = e.ibShipments.bookingDate;
            if(bookingDate != "")
                bookingDate = new Date(bookingDate);
            else
                bookingDate = "";
            var vesselBookingNumber = e.ibShipments.vesselBookingNumber;
            var expectedshippingdate = e.ibShipments.expectedshippingdate;
            if(expectedshippingdate != "")
                expectedshippingdate = new Date(expectedshippingdate);
            else
                expectedshippingdate = "";          
            var actualshippingdate = e.ibShipments.actualshippingdate;
            if(actualshippingdate != "")
                actualshippingdate = new Date(actualshippingdate);
            else
                actualshippingdate = "";
            var vesselNumber = e.ibShipments.vesselNumber;
            var containerNumber = e.ibShipments.containerNumber;
            var factory = e.ibShipments.factory;
            var shipmentStatus = e.ibShipments.shipmentstatus;
            var poDueDate = e.ibShipments.poDueDate;
            var expecteddeliverydate = e.ibShipments.expecteddeliverydate;
            if(expecteddeliverydate != "")
                expecteddeliverydate = new Date(expecteddeliverydate);
            else
                expecteddeliverydate = "";
            var actualdeliverydate = e.ibShipments.actualdeliverydate;
            if(actualdeliverydate != "")
                actualdeliverydate = new Date(actualdeliverydate);
            else
                actualdeliverydate = "";
            var destCountry = e.ibShipments.destCountry;
            var quantityexpected = e.ibShipments.quantityexpected;
            var quantityreceived = e.ibShipments.quantityreceived;
            var billoflading = e.ibShipments.billoflading;
            var cargoReturnDate = e.ibShipments.cargoReturnDate;
            if(cargoReturnDate != "")
                cargoReturnDate = new Date(cargoReturnDate);
            else
                cargoReturnDate = "";
            var memo = e.ibShipments.memo;

            //Set Field Values
            inboundShipmentUpdate.setValue('actualshippingdate', actualshippingdate);
            inboundShipmentUpdate.setValue('actualdeliverydate',actualdeliverydate);
            inboundShipmentUpdate.setValue('custrecord_kk_booking_date', bookingDate);
            inboundShipmentUpdate.setValue('custrecord_kk_cargo_return_dt',cargoReturnDate);
            inboundShipmentUpdate.setValue('expectedshippingdate',expectedshippingdate);
            inboundShipmentUpdate.setValue('expecteddeliverydate',expecteddeliverydate);
            inboundShipmentUpdate.setValue('shipmentmemo', memo);           
            inboundShipmentUpdate.setValue('externaldocumentnumber',containerNumber);
            //inboundShipmentUpdate.setValue('shipmentstatus',shipmentStatus);
            inboundShipmentUpdate.setValue('billoflading',billoflading);
            inboundShipmentUpdate.setValue('custrecord_kk_vesselbooking_number',vesselBookingNumber);
            inboundShipmentUpdate.setValue('vesselnumber',vesselNumber);
            inboundShipmentUpdate.setValue('custrecord_kk_destination',destCountry);

            log.debug("Inside Line Items", e.items.itemID  + " " + poID);               

            //The item must be unique, so it cannot already be on the inbound shipment. Do not set the current sublist value to the item
            //if it already exists
            var objCurRecIBS = JSON.parse(JSON.stringify(inboundShipmentUpdate));
            log.debug("objCurRecIBS", objCurRecIBS );
            var objSublistsIBS = objCurRecIBS.sublists ? objCurRecIBS.sublists : '';
            log.debug("objSublistsIBS", objSublistsIBS );
            var objIBSItems = objSublistsIBS.items ? objSublistsIBS.items : '';
            log.debug("objIBSItems", objIBSItems );
            var itemLineCountIBS = Object.keys(objSublistsIBS.items).length; //First Item is an empty item

            var itemPresent = false;

            //First Item is an empty item, so start at 1
            for (var k = 1; k < itemLineCountIBS; k++) 
            {
                //This keeps coming back empty
                var currentQuantity = inboundShipmentUpdate.getCurrentSublistValue({
                    sublistId: "items",
                    fieldId: "quantityexpected"
                });
                log.debug("Current Quantity", currentQuantity + "Line  " + k );

                //So does this
                var currentItem = inboundShipmentUpdate.getCurrentSublistValue({
                    sublistId: "items",
                    fieldId: "shipmentitem"
                });
                log.debug("Current Item", currentItem + "Line  " + k );

                var currItemIDIBS = objIBSItems[Object.keys(objSublistsIBS.items)[k]].itemid;
                log.debug("Current Line Item Id", currItemIDIBS);

                var currentLineIBS = objIBSItems[Object.keys(objSublistsIBS.items)[k]];
                log.debug("cURRENT iTEM IBS Line", currentLineIBS);

                if(currItemIDIBS == itemID)
                {
                    //Update the existing line, since it is already present
                    itemPresent = true;
                    log.debug("Current Item Exists in the IBS", itemPresent);

                    //This is empty, too
                    var linePO = inboundShipmentUpdate.getCurrentSublistValue({
                        sublistId: "items",
                        fieldId: "purchaseorder"
                    });

                    log.debug("Line PO: ", linePO);

                    var currentQuantity = inboundShipmentUpdate.getCurrentSublistValue({
                        sublistId: "items",
                        fieldId: "quantityexpected"
                    });

                    log.debug("Current Quantity", currentQuantity + "Line  " + k );

                    var newQuantity = currentQuantity + 2;

                    log.debug("New Quantity", newQuantity );

                    inboundShipmentUpdate.selectLine({
                        sublistId: 'items',
                        line: k
                    });

                    inboundShipmentUpdate.setCurrentSublistValue({
                        sublistId: "items",
                        fieldId: "quantityexpected",
                        value: newQuantity
                            //quantityexpected
                    });
                    inboundShipmentUpdate.commitLine({sublistId:"items"});
                    log.debug("Inside SELECT Line Items", "Line Committed" );
                }
            }

            if(!itemPresent)
            {
                log.debug("Inside Item Present Check", itemPresent);
                inboundShipmentUpdate.setCurrentSublistValue({
                    sublistId: "items",
                    fieldId: "shipmentitem",
                    value: shipmentitem
                });
                inboundShipmentUpdate.setCurrentSublistValue({
                    sublistId: "items",
                    fieldId: "quantityexpected",
                    value: quantityexpected
                });
                log.debug("Inside Line Items", "Shipment ITEM Added " + shipmentitem );
                inboundShipmentUpdate.commitLine({sublistId:"items"});
                log.debug("Inside Line Items", "Line Committed" );
            }

        ++i;        

        inboundShipmentUpdate.save();

        }
        catch(err) 
        {
            var msg = '';
            log.debug("There was an error", err);
        }
    })
    return "";
}

有谁知道为什么当我尝试使用 NetSuite 的方法时一切对我来说都是空的,但是当我阅读实际记录的 JSON 时显示正确?

4

1 回答 1

1

我使这比我需要的要困难得多。我使用了 findSublistLineWithValue 函数,并且能够获得正确的行值(它是 0,无论出于何种原因,对象的 json 都返回了两个条目,第一个是空值,所以我错误地认为那是第 0 行) . 我还必须与实际字符串而不是值进行比较,否则我会得到 -1。

var lineNumber = inboundShipmentUpdate.findSublistLineWithValue({
                sublistId: 'items',
                fieldId: 'itemid',
                value: itemID.toString()
            });

一旦我这样做了,我就能够使用我的其他方法获得正确的值。我只是真的简化了我的 api 调用,这帮助我弄清楚发生了什么。

于 2018-03-13T17:08:24.490 回答