2016-11-04 59 views
2

我一直想成爲更多的面向對象。我在NetSuite中開發了一些,他們的API在JS中。我有下面的代碼。這是做什麼。成爲更多OO多個循環JS

1)搜索API搜索所有在水中的交易。

2)循環所有交易,然後搜索這些交易的每個人,它會對他們進行另一次搜索。原因是因爲NetSuite的API管理只允許使用搜索API的1000行(這也可以用其他方式)。也想這樣做,因爲將在其他邏輯中工作,這將使這種方式成爲必要。

3)然後將這些從記錄創建的值,項目,數量推送到三個數組中。 4)最後一個循環遍歷三個數組,然後打印出該項目,並從交易中創建數量值的次數。這是因爲我們將打印這些標籤作爲每個項目的標籤。

現在一直想成爲更多的面向對象。我做了另一件類似的事情,我通過對象與鍵和值進行循環。以爲這是整齊。我的問題是,你會如何做出更多的面向對象。我對我會做什麼有一些想法,但希望聽到一些想法。

1)創建一些函數,將調用步驟3和步驟4.所以每次它循環它稱爲功能
2)我想用回調或承諾做些事情。在這種情況下可能不適合他們,但是 3)將項目推入對象,然後在這些對象上運行forEach方法。

所以問題是如何使這個更多的OO風格的JavaScript。

// search APIs 
 
filters = []; 
 
filters[0] = new nlobjSearchFilter('location', null, 'anyof', ['23','25','20','24']); 
 
filters[1] = new nlobjSearchFilter('mainline', null, 'is', 'true'); 
 

 
var columns = []; 
 
columns[0] = new nlobjSearchColumn('tranid'); 
 
columns[1] = new nlobjSearchColumn('createdfrom'); 
 

 
var searchResults =[]; 
 
var searchResults = nlapiSearchRecord('itemreceipt', null, filters, columns); 
 

 
tranId = []; 
 
createdFrom = []; 
 
quantity = []; 
 
item = []; 
 
data = ''; 
 

 
if(searchResults){ 
 
     for (var i = 0; i < 5; i++){ 
 
      // gets all internal IDs 
 
      var tranId = searchResults[i].getValue(columns[0]); 
 

 
      filtersLine = []; 
 
      filtersLine[0] = new nlobjSearchFilter('tranid', null, 'is', tranId); 
 
      filtersLine[1] = new nlobjSearchFilter('mainline', null, 'is', 'false'); 
 

 
      var columnsLine = []; 
 
      columnsLine[0] = new nlobjSearchColumn('item'); 
 
      columnsLine[1] = new nlobjSearchColumn('createdfrom'); 
 
      columnsLine[2] = new nlobjSearchColumn('quantity'); 
 

 
      var searchResultsLine =[]; 
 
      var searchResultsLine = nlapiSearchRecord('itemreceipt', null, filtersLine, columnsLine); 
 

 

 
      for (var j = 0; j < searchResultsLine.length; j++){ 
 
        item.push(searchResultsLine[j].getText(columnsLine[0])); 
 
        createdFrom.push(searchResultsLine[j].getText(columnsLine[1])); 
 
        quantity.push(searchResultsLine[j].getValue(columnsLine[2])); 
 

 
        for (var x = 0; x < quantity[j]; x++){ 
 
         if(createdFrom[j] != 'undefined'){ 
 
           data += item[j] + createdFrom[j] + '\n'; 
 
           console.log(item[j] + ' ' + createdFrom[j].substring(16) + '\n'); 
 
         } 
 
        } 
 
      
 
      } 
 
     } 
 
}

+0

您的問題很不清楚,而且回答太寬泛。請將您的問題範圍縮小到易於理解和可回答的問題。 –

回答

3

您正在運行按每個搜索結果的搜索,那是要花上您的治理點一擊。我查了一下代碼,發現沒有必要使用這麼多的搜索。我已經重構了代碼以使用更多的函數,也嵌套了函數,這應該使它更具可讀性和可伸縮性。我還添加了幾個過濾器,以避免獲取比您需要的更多的數據。無論如何,這是代碼,歡迎您進一步優化。

var itemsToProcess = getItemsToProcess(); 
var data = getDataString(itemsToProcess); 

//**** HELPER FUNCTIONS ****// 
function getItemsToProcess(){ 
    // search APIs 
    var filters = []; 
    filters.push(new nlobjSearchFilter('location', null, 'anyof', ['23','25','20','24'])); 
    filters.push(new nlobjSearchFilter('createdfrom', null, 'isnotempty')); 
    filters.push(new nlobjSearchFilter('quantity', null, 'greaterthan', 0)); //Filtering out items with no quantity 
    filters.push(new nlobjSearchFilter('mainline', null, 'is', 'F')); //Dont want to get any extra info 
    filters.push(new nlobjSearchFilter('shipping', null, 'is', 'F')); //Dont want to get any extra info 
    filters.push(new nlobjSearchFilter('cogs', null, 'is', 'F')); //Dont want to get any extra info 
    filters.push(new nlobjSearchFilter('taxline', null, 'is', 'F')); //Dont want to get any extra info 

    var columns = []; 
    columns.push(new nlobjSearchColumn('item')); 
    columns.push(new nlobjSearchColumn('createdfrom')); 
    columns.push(new nlobjSearchColumn('quantity')); 

    var searchResults = fullSearch('itemreceipt', filters, columns); 

    var rows = []; 
    for(var i in searchResults){ 
     var result = {}; 
     result.item = searchResults[i].getText(columnsLine[0]); 
     result.createdFrom = searchResults[i].getText(columnsLine[1]); 
     result.quantity = searchResults[i].getValue(columnsLine[2]); 
     rows.push(result); 
    } 
    return rows; 

    //**** HELPER FUNCTIONS ****// 
    function fullSearch(type, filters, columns){ 
     var search = nlapiCreateSearch(type, filters, columns); 
     var resultset = search.runSearch(); 
     var resultsets = []; 
     var returnSearchResults = []; 
     var searchid = 0; 
     var startdate, enddate, resultslice; 
     /* Grabs results first */ 
     do { 
      resultslice = getResultSlice(resultset, searchid); 
      for (var rs in resultslice) { 
       returnSearchResults.push(resultslice[rs]); 
       searchid++; 
      } 
     } while (resultslice.length == 1000); 

     return returnSearchResults; 

     //*********** HELPER FUNCTION ***********/ 
     function getResultSlice(resultset, searchid){ 
      var resultslice = resultset.getResults(searchid, searchid + 1000); 
      return resultslice || []; 
     } 
    } 

} 

function getDataString(itemsToProcess){ 
    var data = ''; 
    for(var i in itemsToProcess){ 
     data += printItem(itemsToProcess[i].item, itemsToProcess[i].createdFrom, itemsToProcess[i].quantity); 
    } 
    return data; 

    //**** HELPER FUNCTIONS ****// 
    function printItem(item, createdFrom, quantity){ 
     var tempString = ''; 
     for (var x = 0; x < quantity; x++){ 
      console.log(item + ' ' + createdFrom.substring(16)); 
      tempString += item + createdFrom + '\n'; 
     } 
     return tempString; 
    } 
} 
+1

感謝您將該索引訪問轉換爲Array.push()調用。驅使我堅持NetSuite幫助中的代碼示例有多差,然後您會發現它出現在問題中,這真是太可惜了。 –