2016-11-27 8 views
1

私はJavaScriptを持っています。itemId(このitemIdはKey Value Pairsを持つオブジェクト)という名前のJavaScriptグローバル変数。このオブジェクトはStandard Item Record Detailsを格納します。NetsuiteユーザーイベントスクリプトがJavaScriptグローバル変数の空の値を取得しています

"User Event Script Before-Load Event"に値を保存し、 "Before-Submit Event"でグローバル変数 "itemId"をにアクセスしようとしましたが、このitemId(Object)は空の値を取得します。

それがエラーを示すあるキーを使用して、このオブジェクトの値を取得しようです:「:プロパティを読み取ることができません 『ItemQuantityTolerance』未定義から」

コード:

のSuiteScriptバージョン:2.0アイテムIDオブジェクトの

var itemId = new Object(); 

function beforeLoad(scriptContext) { 

     try { 

      var IR_Record = scriptContext.newRecord; 
      var form = scriptContext.form; 
      form.clientScriptFileId = 50137; 

      if (IR_Record != null && IR_Record != '' && IR_Record != undefined) { 


       var ItemsId = new Array(); 
       var IR_LineItemCount = null; 
       var lineNumber = null; 

       IR_LineItemCount = IR_Record.getLineCount('item'); 
       log.debug('Value', 'IR_LineItemCount : ' + IR_LineItemCount); 

       if (IR_LineItemCount != null && IR_LineItemCount != '' && IR_LineItemCount != undefined) { 

        for (var i = 0; i < IR_LineItemCount; i++) { 

         lineNumber = i; 
         log.debug('Value', 'LineNumber : ' + lineNumber); 

         var IR_ItemId = IR_Record.getSublistValue({ 
          sublistId: 'item', 
          fieldId: 'item', 
          line: i 
         }); 

         ItemsId[lineNumber] = IR_ItemId; 
         log.debug('Value', 'IR_ItemId : ' + IR_ItemId); 

        } 

        if (ItemsId != null && ItemsId != '' && ItemsId != undefined) { 

         log.debug('Value:', 'ItemsId:' + ItemsId); 

         getItemToleranceValues(ItemsId); 

        } 

       } 


      } 

     } catch (exception) { 
      log.debug("Value :", "Before-Load Error :", exception.message); 
      throw exception.message; 
     } 


    } 

    function getItemToleranceValues(ItemsId) { 

     try { 

      var ItemDetialsSearch = ""; 
      var ItemSearchResults = ""; 

      var Item_Id = null; 
      var Item_Name = ""; 




      ItemDetialsSearch = search.create({ 
       type: 'item', 
       filters: ['internalid', 'anyof', ItemsId], 
       columns: ['internalid', 'itemid'] 
      }); 

      if (ItemDetialsSearch != null && ItemDetialsSearch != '' && ItemDetialsSearch != undefined) { 

       ItemSearchResults = ItemDetialsSearch.run().getRange(0, 200); 

       if (ItemSearchResults != null && ItemSearchResults != '' && ItemSearchResults != undefined) { 


        for (var i = 0; i < ItemSearchResults.length; i++) { 

         var itemDetails = new Object(); 

         Item_Id = ItemSearchResults[i].getValue('internalid'); 

         Item_Name = ItemSearchResults[i].getValue('itemid'); 

         if (Item_Name != null && Item_Name != '' && Item_Name != undefined) { 



          itemDetails['ItemName'] = Item_Name; 

         } 


         itemId[Item_Id] = itemDetails; 

        } 

        log.debug("itemId:", itemId); 

       } 

      } 


     } catch (exception) { 

      log.debug("Value:", "Item-Tolerance-Value Error:" + exception.message); 
      throw exception.message; 
     } 

    } 


    function beforeSubmit(scriptContext) { 

     try { 


      var IR_Record = scriptContext.newRecord; 
      var itemName = ""; 
      if (IR_Record != null && IR_Record != '' && IR_Record != undefined) { 

       if (itemId != null && itemId != '' && itemId != undefined) { 

        log.debug("itemId:", itemId); 


        itemName = itemId[IR_ItemId]['ItemName']; // Getting Empty Values at this point, eventhough it is global variable with values 

        log.debug('Value', 'itemName : ' + itemName); 



       } 

      } 

     }catch(exception){ 

      throw exception.message; 

     } 

例値:

{ 
    337: { 
     ItemName: "Apple", 

    }, 
    359: { 
     ItemName: "Orange" 

    } 
} 

グローバル変数アイテムにアクセスする方法は、プロパティ "ItemName"を使用して値を取得します。

ありがとうございます。

答えて

6

スクリプトの実行ライフサイクルを誤解しています。サーバー側では、ロード前、ロード前および実行後の実行はすべて完全に独立しています。あなたのbeforeLoadスクリプトでgetItemToleranceValuesへの呼び出しによってitemIdをロードしている唯一の場所が、beforeSubmitスクリプトの空の値にアクセスしているようです。

beforeLoadスクリプトで値をロードする理由がある場合は、その値をセッション変数にキャッシュしてbeforeSubmitスクリプトで値を取得できます。 N /ランタイムモジュールのSession.get/setを参照

関連する問題