0

我遇到的问题是在 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;}

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

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

4

2 回答 2

1

从您包含的代码段来看,您似乎没有初始化 fba 的值。

在开始时添加var fba=0;,看看是否可以解决它。

或者您可能打算将 qtyAvail 分配给亚马逊而不是亚马逊物流。

于 2012-04-20T01:40:52.007 回答
1

从您共享的代码位和原始描述看来,您从函数返回的对象文字实际上并未被返回。'amazon' 是该对象的属性,并且由于错误表明它是未定义的,因此该函数没有返回任何内容。

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

function foo()
{
    return;
}

alert( foo().amazon );

你会看到:

TypeError:无法读取未定义的属性“亚马逊”

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

另外,虽然不是您的问题的一部分,但我想我可能会提到另一种编写位置检查的方法,更容易阅读:

var acceptedLocations = [ 7, 16, 20, 3, 19, 1, 27 ];
if(acceptedLocations.indexOf(location) > 0)
{
  //  Do rad stuff
}
于 2012-04-27T05:20:55.947 回答