2016-07-21 93 views

回答

8

N/taskN/runtime模块有你在找什么。您将使用N/task执行重新计划,并使用N/runtime获取当前脚本信息。

没有你确切的代码,我不能举一个很具体的例子,但你的计划脚本最终会通常看起来像:

/** 
* @NApiVersion 2.x 
* @NScriptType ScheduledScript 
*/ 
define(['N/task', 'N/runtime'], function(task, runtime) { 

    /** 
    * Reschedules the current script and returns the ID of the reschedule task 
    */ 
    function rescheduleCurrentScript() { 
     var scheduledScriptTask = task.create({ 
      taskType: task.TaskType.SCHEDULED_SCRIPT 
     }); 
     scheduledScriptTask.scriptId = runtime.getCurrentScript().id; 
     scheduledScriptTask.deploymentId = runtime.getCurrentScript().deploymentId; 
     return scheduledScriptTask.submit(); 
    } 

    function execute(context) { 

     // Do stuff... 

     while(...) { 
      // Do processing in loop 

      // Check remaining usage and reschedule if necessary 
      if (runtime.getCurrentScript().getRemainingUsage() < 100) { 
       var taskId = rescheduleCurrentScript(); 
       log.audit("Rescheduling status: " + task.checkStatus(taskId)); 
       return; 
      } 
     } 
    } 

    return { 
     execute: execute 
    }; 
}); 
+0

这是否也允许脚本在执行中的同一点处离开?例如,如果我循环播放预定脚本中已保存搜索的结果,那么此方法是否可以在保存的搜索中以相同结果恢复预定脚本?或者它会从保存的搜索的第一个结果开始? –

+2

无论何时重新安排预定脚本,您都需要在停止的地方继续进行管理。这通常通过内部ID对结果进行排序,存储上次处理的ID并过滤搜索大于上次处理的内部ID的搜索。 – erictgrubaugh

+0

哪里最安全的地方存储最后处理的ID? –

0

好像scheduledScriptTask.submit()方法返回null。

var taskId = rescheduleCurrentScript(); 

上面的taskId在记录时返回null。 NetSuite可能是一个bug吗?