2016-11-23 189 views
2

我嘗試根據記錄類型和索引獲取記錄。Netsuite API花費很長時間迴應

請求: { 「記錄類型」: 「客戶」, 「gu_action」: 「get_all」, 「大小」:1000, 「指數」:0}

其正常工作。但Api會每4-6小時響應每個API調用。任何想法如何減少這個時間?

我的Restlet代碼:

get_all行動將調用get_Allrecords功能:

/********************** Get All records of Record type *******************************/ 

function get_Allrecords(datain) { 
     var all_IDs = getAllIDs(datain); 
     var len = all_IDs.length; 
     var result = new Array(); 
     var results = new Array(); 
     var fields = datain.fields; 
     for (var i = 0; i < len; i++) { 
       var required_result = {}; 
       try { 
         result[i] = **nlapiLoadRecord(all_IDs[i].getRecordType(), all_IDs[i].id);** 
         if(fields != undefined && fields.length > 0) { 
          for(var j = 0; j<fields.length; j++){ 
           req = fields[j]; 
           if(result[i].getFieldValue(req) != undefined){ 
             required_result[req] = result[i].getFieldValue(req); 
           } 
           if(req == "recordtype"){ 
             required_result[req] = all_IDs[i].getRecordType(); 
           } 
          } 
        } else { 
          required_result =result[i]; 
        } 
       } catch (ex) { 
         if (ex.code == "INSUFFICIENT_PERMISSION") { 
         } 
       } //try.... catch... ends 
      results.push(required_result); 
     } //for ends 

     return results; 
} 

/回撥get_All記錄/

function getAllIDs(datain) { 
     var MAX_SIZE = typeof(datain.size) == 'undefined' ? 200 : datain.size; 
     var INDEX = 0; 
     if (typeof(datain.index) !== 'undefined') { 
       INDEX = datain.index * MAX_SIZE; 
       MAX_SIZE += INDEX; 
     } 
     /*** Define search filters ***/ 
     var NS_filters = new Array(); 
     var columns = new Array(); 
     columns[0] = new nlobjSearchColumn('lastmodifieddate').setSort(1); 
     var search = **nlapiCreateSearch(datain.recordtype, NS_filters, columns)** 
     var results = search.runSearch(); 
     var records = results.getResults(INDEX, MAX_SIZE); 
     return records; 
} 

回答

3

nlapiLoadRecord通話的get_Allrecords是你的性能瓶頸。從數據庫中加載整個記錄是SuiteScript中最昂貴的操作之一 - 特別是如果記錄是事務 - 並且您正在請求中加載1000條記錄。

在NetSuite中加載較重的記錄(即事務)可能需要幾秒鐘,因此花費幾分鐘的1,000條記錄並不奇怪。

你真的需要全部每個記錄上的字段?您可以從單個搜索中獲得更好的性能,該搜索只包含您希望爲每條記錄創建的列,而不是嘗試加載每條完整記錄。

如果您確實需要每條記錄上的所有字段,則可能需要查看SuiteTalk SOAP API;雖然它的性能一般比RESTlets慢很多,但它可以在像這樣的非常大的請求上勝過RESTlet。

+0

謝謝@erictgrubaugh – Saravanakumar