如何降低以下代码的治理成本
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() 小于您的阈值,您可以将剩余工作卸载到后续计划脚本。
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() 小于您的阈值,您可以将剩余工作卸载到后续计划脚本。