如何防止计划脚本中的执行使用限制

时间:2016-08-09 19:52:45

标签: netsuite

我正在使用预定脚本,该脚本将根据条件创建自定义记录。每当计划脚本运行时,它应该创建约。 100,000条记录,但脚本在创建5000或10000条记录后超时。我使用以下脚本来防止脚本执行使用限制,但即使这样脚本也无法正常工作。任何人都可以建议一些事情或提供任何信息。任何建议都欢迎并高度赞赏。

在我的for循环中使用以下脚本。如果包含以下脚本,则预定脚本最多只能创建5000或10000条记录。

if (nlapiGetContext().getRemainingUsage() <= 0 && (i+1) < results.length )
   {
     var stateMain = nlapiYieldScript(); 
   }

3 个答案:

答案 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);

}