Netsuite API 响应时间长

Sar*_*mar 2 netsuite suitescript

我尝试根据记录类型和索引获取记录。

请求: {"recordtype":"customer","gu_action":"get_all","size":1000,"index":0}

它的工作正常。但是 Api 需要 4-5 分钟来响应每个 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;
}
Run Code Online (Sandbox Code Playgroud)

/回调get_All Records /

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;
}
Run Code Online (Sandbox Code Playgroud)

eri*_*ugh 5

该nlapiLoadRecord呼叫get_Allrecords是您的性能瓶颈。从数据库加载整个记录是 SuiteScript 中最昂贵的操作之一——尤其是如果记录是事务——并且您在请求中加载了 1000 条记录。

在 NetSuite 中加载较重的记录(即事务)可能需要几秒钟,因此 1,000 条记录需要几分钟的时间也就不足为奇了。

您真的需要每条记录上的所有字段吗?从只包含每条记录所需的列的单个搜索中获得更好的性能,而不是尝试加载每条完整记录。

如果您确实需要每条记录上的所有字段,则可能需要查看 SuiteTalk SOAP API;虽然它的性能总体上比 RESTlets 慢得多,但它可以在像这样的非常大的请求上胜过 RESTlets。