2016-12-22 12 views
0

私はサブリストを持つレコードを持っており、そのサブリストのすべての項目は別のサブリストを持つレコードです。私が欲しいのは、すべてのitemAに対して、すべてのitemAサブリストのすべてのサブリストを取得することです。このnetsuiteスクリプトの最適化

Bill of lading1 
    ->FulfillmentA 
     ->Item123 
     ->Item124 
     ->Item125 
    ->FulfillmentB 
     ->Item224 
     ->Item226 
     ->Item227 

と同じように、私は2つの成就を持っており、それらの成就のそれぞれは3を持っている船荷証券の1つの法案のために例えば

Fulfillment | Item | Description | Qty 

を船荷証券のすべての法案のために、このようなテーブルを作成することができるようにしたいです私はこれを行うことができます項目

   BILL OF LADING #4 
Fulfillment | Item | Description | Qty 
------------------------------------------- 
    A  | 123 |  xxxx | 2 
      | 124 |  xxxx | 1 
      | 125 |  xxxx | 7 
-------------------------------------------- 
    B  | 224 |  xxxx | 1 
      | 226 |  xxxx | 1 
      | 227 |  xxxx | 1 

は、問題がいくつかfullfilmentは60-70成就のように持っていたとき、私は、スクリプトの実行の使用限度超過エラーを取得しています。

* { 
    * 70: { 
    *  itemNumber : { 
    *  description: xxxx, 
    *  quantity: XX 
    *  }, 
    *  itemNumber2 : { 
    *  description: xxxx, 
    *  quantity: XX 
    *  }, 
    * 71: { ...}, 
    * .... 
    * } 

が続いてループを持つテーブルを作成します。

私のコードの基本的な考え方は、このようなオブジェクトを作成することです。

私が思う問題は、この行を次のとおりです。

fulfillmentArray.push(nlapiLoadRecord('itemFulfillment', fullfillmentInternalIDArray[z])); 

私は100 fullfilmentsを持っているBOLにそれを削除するとき、それは私のコードである。ここ

を動作するため:

var lines = record.getLineItemCount('recmachcustrecord_id_billoflading'); 
//Grab the fulfillment internal id 
for(var i = 1; i <= lines; i++){ 
    fullfillmentInternalIDArray.push(record.getLineItemValue('recmachcustrecord_id_billoflading', 'custrecord_fulfillment', i)); 
} 

//Get the fulfillment number 
for(var x = 1; x <= lines; x++){ 
    fulfillmentNumberArray.push(record.getLineItemText('recmachcustrecord_id_billoflading', 'custrecord_fulfillment', x).replace(/Fulfillment|#|Item/g,"")); 
} 

//Get the fulfillments and push them into an array 
//And create an empty object with the fulfillment number 
for(var z = 0; z < fullfillmentInternalIDArray.length; z++){ 
    fulfillmentArray.push(nlapiLoadRecord('itemFulfillment', fullfillmentInternalIDArray[z])); 
    billOfLadingFulfillmentsObject[ fulfillmentNumberArray[z] ] = {}; 
} 

オブジェクトの残りの部分を作成します。

for(var j = 0; j < fulfillmentArray.length; j++){ 
    itemCount = fulfillmentArray[j].getLineItemCount('item'); 

    for(var y = 1; y <= itemCount; y++){ 
     billOfLadingFulfillmentsObject[ fulfillmentNumberArray[j] ][ fulfillmentArray[j].getLineItemValue('item', 'itemname', y) ] = {}; 
    } 

    for(var item in billOfLadingFulfillmentsObject){ 
     for(var item2 in billOfLadingFulfillmentsObject[item]){ 
      for(var y = 1; y <= itemCount; y++){ 
       if(item2 === fulfillmentArray[j].getLineItemValue('item', 'itemname', y)){ 
        billOfLadingFulfillmentsObject[ fulfillmentNumberArray[j] ][item2]['description'] = fulfillmentArray[j].getLineItemValue('item', 'itemdescription', y); 
        billOfLadingFulfillmentsObject[ fulfillmentNumberArray[j] ][item2]['quantity'] = fulfillmentArray[j].getLineItemValue('item', 'quantity', y); 
       } 
      } 
     } 
    } 
} 

多くのフルフィルメントがある場合、スクリプト実行使用制限超過エラーをスローしないように最適化する方法はわかりません。

答えて

0

安価であるため、大量のデータを検索する検索をお勧めします。項目IDを収集する項目をループし、検索を行いデータを取得します。