如何降低以下代码的治理成本?

时间:2015-02-06 19:24:05

标签: javascript netsuite

对于netsuite,您可以使用某些API(以及某些脚本)的频率有限制。对于我正在做的事情,我相信以下是适用的费用: nlapiLoadSearch:5 nlobjSearchResultSet.getSearch():10 它需要大约一个小时,但每次我的脚本(后面)错误输出,可能是由于这个。如何更改它以降低治理成本?

function walkCat2(catId, pad){
var loadCategory = nlapiLoadRecord("sitecategory", "14958149");   
var dupRecords = nlapiLoadSearch('Item', '1951');   //load saved search
var resultSet = dupRecords.runSearch();   //run saved search
resultSet.forEachResult(function(searchResult)
    {
    var InterID=(searchResult.getValue('InternalID'));   // process- search 
var LINEINX=loadCategory.getLineItemCount('presentationitem'); 
loadCategory.insertLineItem("presentationitem",LINEINX); 
loadCategory.setLineItemValue("presentationitem", "presentationitem", LINEINX, InterID+'INVTITEM');  //--- Sets the line value.-jf
nlapiSubmitRecord(loadCategory , true);
    return true;                // return true to keep iterating 
    });                 
}

2 个答案:

答案 0 :(得分:4)

nlapiLoadRecord使用5个单位,nlapiLoadSearch使用5个,实际上resultSet.forEachResult使用另外10个。最重要的是,您为每个搜索运行nlapiSubmitRecord结果,每个结果将使用10个单位

在我看来,您对搜索结果的所有操作都是将行项目添加到类别记录中。在完成添加所有行之前,您无需提交记录。现在,您在添加的每一行之后提交记录。

nlapiSubmitRecord来电之后移动forEachResult 。这将使您的治理(以及特别是您的执行时间)从每个搜索结果10个单位减少到仅10个单位。

答案 1 :(得分:0)

不同的API具有与之相关的不同成本[请参阅suiteanswers ID 10365]。此外,不同类型的脚本(用户,计划等)对总使用限制具有不同的最大限制。 [见suiteanswers ID 10481]

您的脚本应该消耗少于该限制,否则NetSuite将抛出错误。 您可以使用以下代码行来衡量代码中不同点的剩余使用情况。 nlapiLogExecution(' AUDIT','脚本使用',' RemainingUsage:' + nlapiGetContext()。getRemainingUsage());

避免最大使用率超出异常的一种策略是将脚本类型更改为"预定脚本"因为那有最大限度。鉴于您的循环正在处理搜索,结果集可能很大,甚至可能导致计划的脚本超出其限制。在这种情况下,您可能希望在代码中引入检查点并使其可重入。这样,如果您看到nlapiGetContext()。getRemainingUsage()小于阈值,则将剩余的工作卸载到后续的计划脚本。