2016-11-23 190 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