2016-11-23 2 views
2

私はレコードタイプとインデックスに基づいてレコードを取得しようとします。Netsuite API応答に長時間かける

要求: { "RECORDTYPE": "顧客"、 "gu_action": "GET_ALL"、 "サイズ":1000、 "インデックス":0}

その作品罰金。しかしApiはすべてのapi呼び出しのために応答に4-5のminituesを取っている。どのようにこの時間を減らすためにどのようなアイデア?

私のRestletコード:

GET_ALLアクションがget_Allrecords関数を呼び出します:get_AllrecordsバックGET_ALLレコードの

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

/コール/

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コールあなたのパフォーマンスのボトルネックです。データベースからレコード全体をロードすることは、特にレコードがトランザクションの場合はSuiteScriptの中で最も高価なオペレーションの1つであり、要求に1000レコードをロードしています。

NetSuiteに重いレコード(トランザクション)をロードするには数秒かかるので、数分かかる1,000レコードは驚くことではありません。

すべてのレコードのフィールドのすべてが必要ですか?すべてのフルレコードをロードしようとするのではなく、各レコードに必要な列のみを含む単一の検索から、はるかに優れたパフォーマンスが得られます。

すべてのレコードのすべてのフィールドが必要な場合は、代わりにSuiteTalk SOAP APIを調べる必要があります。 RESTletよりもパフォーマンスがはるかに低速ですが、このような非常に大きな要求ではRESTletを上回る可能性があります。

+0

ありがとう@erictgrubaugh – Saravanakumar

関連する問題