2016-11-23 4 views
2

Ich versuche, Datensätze basierend auf Datensatztyp und Index zu bekommen.Netsuite API Lange Zeit bis zur Antwort

Anfrage: { "Record": "Kunde", "gu_action": "get_all", "Größe": 1000, "Index": 0}

Seine Werke in Ordnung. Aber Api braucht 4-5 Minuten um für jeden Api Anruf zu antworten. Irgendeine Idee, wie man diese Zeit verringert?

Mein Restlet Code:

get_all Aktion wird die get_Allrecords Funktion aufrufen:

/********************** 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; 
} 

/Rückruf von get_all Aufzeichnungen/

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; 
} 

Antwort

3

Der nlapiLoadRecord Anruf in get_Allrecords ist Ihr Leistungsengpass. Das Laden eines vollständigen Datensatzes aus der Datenbank ist eine der teuersten Operationen in SuiteScript - insbesondere, wenn die Datensätze Transaktionen sind - und Sie laden 1000 Datensätze in Ihre Anfrage.

Das Laden der schwereren Datensätze (d. H. Transaktionen) in NetSuite kann ein paar Sekunden dauern, sodass 1000 Datensätze, die mehrere Minuten benötigen, nicht überraschend sind.

Benötigen Sie wirklich alle der Felder in jedem Datensatz? Sie würden viel bessere Leistung von einer einzelnen Suche erhalten, die nur die Spalten enthält, die Sie für jeden Datensatz möchten, anstatt zu versuchen, jeden vollständigen Datensatz zu laden.

Wenn Sie alle Felder in jedem Datensatz benötigen, müssen Sie möglicherweise stattdessen in der SuiteTalk SOAP API suchen; Obwohl es im Allgemeinen viel langsamer als RESTlets ist, kann es bei sehr großen Anforderungen wie diesem RESTlets übertreffen.

+0

Dank @erictgrubaugh – Saravanakumar