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

How do I decrease the governance cost of the following code

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

nlapiLoadRecord用了5个单位,nlapiLoadSearch用了5个,那么实际上是resultSet.forEachResult又用了10个,再加上你是运行nlapiSubmitRecord 用于每个搜索结果,这将使用 10 个单位 用于每个结果

在我看来,您对搜索结果所做的一切就像是将订单项添加到类别记录中。在您完全添加完所有行之前,您不需要提交记录。现在,您在添加的每一行之后提交记录。

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

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

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

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