我正在使用预定脚本,该脚本将根据条件创建自定义记录。每当计划脚本运行时,它应该创建约。 100,000条记录,但脚本在创建5000或10000条记录后超时。我使用以下脚本来防止脚本执行使用限制,但即使这样脚本也无法正常工作。任何人都可以建议一些事情或提供任何信息。任何建议都欢迎并高度赞赏。
在我的for循环中使用以下脚本。如果包含以下脚本,则预定脚本最多只能创建5000或10000条记录。
if (nlapiGetContext().getRemainingUsage() <= 0 && (i+1) < results.length )
{
var stateMain = nlapiYieldScript();
}
答案 0 :(得分:1)
如果要使用nlapiYieldScript
机制重新安排,则还需要在希望脚本恢复的位置使用nlapiSetRecoveryPoint
。请参阅每种方法的帮助文档,以及标题为在预定脚本中设置恢复点的页面
请注意nlapiSetRecoveryPoint
使用100
个治理单位,因此您需要在getRemainingUsage
支票中对此进行说明。
答案 1 :(得分:1)
我有一个脚本,可以像forEach一样处理数组。脚本检查每次迭代并计算最大使用量和产量,当剩余使用量不足以覆盖最大值时。
转到https://github.com/BKnights/KotN-Netsuite并下载simpleBatch.js
答案 2 :(得分:0)
@rajesh,您只是检查剩余的使用情况。还要检查执行时间限制,对于任何计划的脚本,都是1小时。像下面的片段 -
var checkIfYieldOrContinue = function(startTime) {
var endTime = new Date().getTime();
var timeElapsed = (endTime * 0.001) - (startTime * 0.001);
if (nlapiGetContext().getRemainingUsage() < 3000 ||
timeElapsed > 3500) { //3500 secs
nlapiLogExecution('AUDIT', 'Remaining Usage: ' + nlapiGetContext().getRemainingUsage() + '. Time elapsed: ' + timeElapsed);
startTime = new Date().getTime();
var yieldStatus = nlapiYieldScript();
nlapiLogExecution('AUDIT', 'script yielded.' + yieldStatus.status);
nlapiLogExecution('AUDIT', 'script yielded reason.' + yieldStatus.reason);
nlapiLogExecution('AUDIT', 'script yielded information.' + yieldStatus.information);
}
};
在for循环中,您可以将此方法称为 -
var startTime = new Date();
if ((i+1) < results.length ) {
//do your operations here and then...
checkIfYieldOrContinue(startTime);
}