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;して、それで修正されるかどうかを確認します。

あるいは、fbaではなくamazonにqtyAvailを割り当てるつもりだったのかもしれません。

于 2012-04-20T01:40:52.007 に答える
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
}
于 2012-04-27T05:20:55.947 に答える