2016-11-23 5 views
2

Я пытаюсь получить записи на основе типа записи и индекса.Netsuite API Принимая много времени для ответа

Запрос: { "RECORDTYPE": "клиент", "gu_action": "get_all", "размер": 1000, "Индекс": 0}

Его работы хорошо. Но Api принимает 4-5 минут ответа на каждый апи-вызов. Любая идея, как уменьшить это время?

Мои 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 может занять пару секунд, поэтому 1000 записей, занимающих несколько минут, не удивительно.

Вам действительно нужно все поля полей на каждой записи? Вы получите гораздо лучшую производительность от одного поиска, который содержит только столбцы, которые вы хотите для каждой записи, вместо того, чтобы загружать каждую полную запись.

Если вам понадобятся все поля на каждой записи, вам может потребоваться изучить API-интерфейс SuiteTalk SOAP; в то время как он имеет гораздо более низкую производительность в целом, чем RESTлеты, он может превзойти RESTлеты на очень больших запросах, подобных этому.

+0

Thanks @erictgrubaugh – Saravanakumar