Question

The issue I am having is I am consistently getting the following error when executing a user event script in NetSuite:

TypeError: Cannot read property "amazon" from undefined

NetSuite uses Javascript to do the business logic on both client and server side. For those without NetSuite experience, a user event script is executed on the server.

The code I can share is as follows:

var qtyAvail = 0; 
qtyAvail = rec.getValue('locationquantityavailable');
if(!qtyAvail || qtyAvail === 'undefined' || qtyAvail === null || isNaN(qtyAvail) || typeof qtyAvail === "undefined"){
                qtyAvail = 0;

            }   
  location = rec.getValue(kColumns[3]);
            if(location == 7 ||location == 16 ||location == 20 ||location == 3 ||location == 19 ||location == 1 ||location == 27 ||location == 27){    
                if(location == 7){
                    fba = qtyAvail;
                    if(!fba){
                        qtyAvail = 0;
                    }                    
                }
...more business code here....
 return {

            amazon: fba,
            ups: upsName
 }

I am calling the return values like:

var itemQty = getLocationQty(item);
           if(itemQty.amazon){
               var fbaStock = itemQty.amazon;
           } else { fbaStock = 0;}

This code works fine for some of my locations, but if there is not quantity available in a specific location it is returning undefined, rather then setting the qtyAvail to 0 as I would expect.

Am I missing a comparison for checking undefined anywhere, or does anyone else see any issues with the code?

Was it helpful?

Solution

From the snippet you included it looks like you are not initializing the value of fba.

Add var fba=0; at the start and see if that fixes it.

Or perhaps you meant to assign qtyAvail to amazon instead of fba.

OTHER TIPS

From the bits of code you did share and your original description it looks like the object literal you were returning from your function wasn't actually being returned. 'amazon' being a property of that object and since the error says it's undefined then that function was returning nothing.

Run the following code in a JS engine:

function foo()
{
    return;
}

alert( foo().amazon );

and you will see:

TypeError: Cannot read property 'amazon' of undefined

I see that you found a solution, I just don't see how it's related to your original problem you reported. Am I missing something?

Also, although not part of your question I thought I might mention another approach to writing your location check, a little easier to read:

var acceptedLocations = [ 7, 16, 20, 3, 19, 1, 27 ];
if(acceptedLocations.indexOf(location) > 0)
{
  //  Do rad stuff
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top