2012-04-19 23 views
0

の在庫量を取得するときに私が午前問題は、NetSuiteの中でユーザイベントスクリプトを実行するとき、私は一貫して、次のエラーを取得しています:未定義のエラーNetSuiteの

TypeError: Cannot read property "amazon" from undefined 

ネットスイートは、両方にビジネスロジックを実行するために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に設定するのではなく、未定義に戻しています。

どこにも定義されていないチェックの比較がありませんか、他の誰かがコードに問題があると思いますか?

答えて

1

スニペットから、あなたがfbaの値を初期化していないように見えます。

最初にvar fba=0;を追加して修正するかどうかを確認します。

おそらく、fbaの代わりにqtyAvailをamazonに割り当てることを意図していました。

+0

私は運を0にFBAを初期化してきました。私は戻り値を返すときに関数の外部からオブジェクトを取り出すことができる連想配列を返しているので、qtyAvailをfbaに代入しています。 奇妙なことは、コードがいくつかのレコードでうまく機能し、他はundefinedで失敗するということです。レコードを並べて比較すると、失敗したfbaの場所に値が表示されます。他のアイデア? 私は関数を書き直すことを検討しようとしていますが、避けることはできません。 –

+1

netsuiteデバッガでコードを実行しようとしましたか? – Craig

+0

はい私は悲しみの原因を見つけました。キットのアイテムが原因で失敗していたので、アイテム名のキット部分を落としてメインスキューを返します。変更が効いていると思われるので、私は現在、それがどのように実行されるかを見るために、200個の販売注文のバッチを実行しています。 –

1

共有したコードのビットと元の説明から、関数から返されたオブジェクトリテラルが実際には返されていないように見えます。 'amazon'はそのオブジェクトのプロパティで、エラーは定義されていないと言っていたので、その関数は何も返さなかったという。

実行JSエンジンに次のコード:

function foo() 
{ 
    return; 
} 

alert(foo().amazon); 

、あなたが表示されます。

TypeError: Cannot read property 'amazon' of undefined

を、私はあなたが解決策を見つけたことがわかり、私はちょうどそれがに関連していますどのように表示されませんあなたが報告した元の問題。何か不足していますか?

または、あなたの質問の一部ではないが、私は私が読み少し楽あなたの場所の確認を、書き込みに別のアプローチを言及するかもしれないと思った:

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

ありがとうございましたSteve、特定の状況下で私がコードを書き直す原因となったソリューションが失敗し続けました。興味深いことに、より洗練されたデザインをサポートするためにindexOfを使用しました。あなたの提案に+1、ありがとう。 –