在NetSuite中获取库存数量时出现未定义的错误

时间:2012-04-19 20:53:23

标签: javascript netsuite

我遇到的问题是在NetSuite中执行用户事件脚本时,我一直收到以下错误:

TypeError: Cannot read property "amazon" from undefined

NetSuite使用Javascript在客户端和服务器端执行业务逻辑。对于没有NetSuite经验的用户,在服务器上执行用户事件脚本。

我可以分享的代码如下:

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
 }

我正在调用返回值,如:

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

此代码适用于我的某些位置,但如果特定位置没有可用数量,则返回undefined,而不是像我期望的那样将qtyAvail设置为0。

我是否错过了在任何地方检查未定义的比较,或者其他人是否看到代码有任何问题?

2 个答案:

答案 0 :(得分:1)

从您收到的代码段看起来,您似乎没有初始化fba的值。

在开始时添加var fba=0;,看看是否修复了它。

或许你的意思是将qtyAvail分配给亚马逊而不是fba。

答案 1 :(得分:1)

从您共享的代码和原始描述中看起来,您从函数返回的对象文字实际上并未返回。 'amazon'是该对象的属性,因为错误说它未定义,那么该函数没有返回任何内容。

在JS引擎中运行以下代码:

function foo()
{
    return;
}

alert( foo().amazon );

你会看到:

  

TypeError:无法读取未定义的属性'amazon'

我发现你找到了一个解决方案,我只是看不出它与你报告的原始问题有什么关系。我错过了什么吗?

同样,虽然不是你问题的一部分,但我想我可能会提到另一种编写位置检查的方法,更容易理解:

var acceptedLocations = [ 7, 16, 20, 3, 19, 1, 27 ];
if(acceptedLocations.indexOf(location) > 0)
{
  //  Do rad stuff
}