Модули N/task
и N/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
};
});
Означает ли это, что сценарий может остаться в одной и той же точке исполнения? Например, если я просматриваю результаты сохраненного поиска в запланированном скрипте, может ли этот метод возобновить запланированный скрипт с тем же результатом в сохраненном поиске, где сценарий остановился? Или он начнется с первого результата сохраненного поиска? –
Всякий раз, когда вы перепланируете Scheduled Script, вам нужно управлять возобновлением, где он остановился. Обычно это выполняется путем сортировки результатов по внутреннему идентификатору, хранению последнего обработанного идентификатора и фильтрации поиска внутренних идентификаторов, превышающих последние обработанные. – erictgrubaugh
Где безопасное место для хранения последнего обработанного ID? –