2016-12-22 159 views
0

我有一個子列表的記錄,並且該子列表的每個項目都是具有另一個子列表的記錄。我想要的是,每個itemA獲得每個itemA子列表的所有子列表。像這樣優化netsuite腳本

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

我希望能夠創造這樣的表爲具有2個應驗提單1提單

Fulfillment | Item | Description | Qty 

例如每比爾而且每個應驗的有3個項目

   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進行循環,並進行搜索以獲取數據。