SuiteScript 2.x Scheduled Script Type
Scheduled scripts are server scripts that are executed (processed) with SuiteCloud Processors. You can deploy scheduled scripts so they are submitted for processing at a future time, or at future times on a recurring basis. You can also submit scheduled scripts on demand from the deployment record or from another script with the task.ScheduledScriptTask API.
For additional information about SuiteScript 2.x scheduled scripts, see the following:
You can use SuiteCloud Development Framework (SDF) to manage scheduled scripts as part of file-based customization projects. For information about SDF, see SuiteCloud Development Framework Overview. You can use the Copy to Account feature to copy an individual scheduled script to another of your accounts. Each scheduled script page has a clickable Copy to Account option in the upper right corner. For information about Copy to Account, see Copy to Account Overview.
You can use SuiteScript Analysis to learn about when the script was installed and how it performed in the past. For more information, see Analyzing Scripts.
Also see the Scheduled Script Best Practices section in the SuiteScript Developer Guide for a list of best practices to follow when using client scripts.
Scheduled Script Use Cases
Use this script type for basis scheduled or on demand tasks. Your SuiteScript 2.x scheduled script should not process a large amount of data or a large number of records. It should not be used for operations that are long running.
For example, use this script type if:
-
You need to log basic information about a recurring schedule
-
You need to schedule the future execution of a maintenance script
-
You need to create and then purge temporary records
-
You need to asynchronously execute logic within another server script
If you previously used SuiteScript 1.0 scheduled scripts, many of the use cases for those scripts now apply to the SuiteScript 2.x SuiteScript 2.x Map/Reduce Script Type.
Scheduled Script Governance
Each scheduled script instance can use a maximum of 10,000 usage units. For additional information about governance and usage units, see SuiteScript Governance and Limits.
With SuiteScript 2.x scheduled scripts, you cannot set recovery points and you do not have the ability to yield. There is no SuiteScript 2.x equivalent to the SuiteScript 1.0 nlapiYieldScript()
and nlapiSetRecoverPoint()
APIs. If you need to process a large amount of data or a large number of records, use the SuiteScript 2.x Map/Reduce Script Type instead. The map/reduce script type has built in yielding and can be submitted for processing in the same ways as scheduled scripts.
Scheduled Script Entry Points
Script Entry Point |
|
---|---|
Defines the scheduled script trigger point. |
Scheduled Script API
API |
|
---|---|
Enumeration that holds the string values for scheduled script execution contexts. |
Scheduled Script Sample
This script sample finds and fulfills sales orders created on the current day.
Before you submit this script:
-
Create a sales order type of saved search. You can use search.create(options) and the search.Type enum to set up a saved search with the correct search id and search type.
-
Create a script parameter on the script record Parameters subtab. The sample accepts a search id from a script parameter that it assumes was created with the script record.
-
Set the id to custscript_searchid.
-
Set Type to Free-Form Text.
-
Assign the saved search id to the parameter. This is done on the deployment record Parameters subtab,
-
Note that this script sample uses the log.debug()
method but does not load the N/log module. A log
object is loaded by default for all script types, and you do not need to load the N/log module explicitly. For more information, see log Object.
This script sample uses SuiteScript 2.0. A newer version, SuiteScript 2.1, is also available and supports new language features that are included in the ES2019 specification. You can write scheduled scripts using either SuiteScript 2.0 or SuiteScript 2.1.
-
For help with writing scripts in SuiteScript 2.x, see SuiteScript 2.x Hello World and SuiteScript 2.x Entry Point Script Creation and Deployment.
-
For more information about SuiteScript versions and SuiteScript 2.1, see SuiteScript Versioning Guidelines and SuiteScript 2.1.
/**
*@NApiVersion 2.x
*@NScriptType ScheduledScript
*/
define(['N/search', 'N/record', 'N/email', 'N/runtime'],
function(search, record, email, runtime) {
function execute(context) {
if (context.type !== context.InvocationType.ON_DEMAND)
return;
var searchId = runtime.getCurrentScript().getParameter("custscript_searchid");
try {
search.load({
id: searchId
}).run().each(function(result) {
log.debug({
details: 'transforming so :' + result.id + ' to item fulfillment'
});
var fulfillmentRecord = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: result.id,
toType: record.Type.ITEM_FULFILLMENT,
isDynamic: false
});
var lineCount = fulfillmentRecord.getLineCount('item');
for (var i = 0; i < lineCount; i++) {
fulfillmentRecord.setSublistValue('item', 'location', i, 1);
}
var fulfillmentId = fulfillmentRecord.save();
var so = record.load({
type: record.Type.SALES_ORDER,
id: result.id
});
so.setValue('memo', fulfillmentId);
so.save();
return true;
});
} catch (e) {
var subject = 'Fatal Error: Unable to transform salesorder to item fulfillment!';
var authorId = -5;
var recipientEmail = 'notify@example.com';
email.send({
author: authorId,
recipients: recipientEmail,
subject: subject,
body: 'Fatal error occurred in script: ' + runtime.getCurrentScript().id + '\n\n' + JSON.stringify(e)
});
}
}
return {
execute: execute
};
});
Related Support Article
Related Topics
- SuiteScript Versioning Guidelines
- SuiteScript 2.1
- SuiteScript 2.x Script Types
- SuiteScript 2.x Bundle Installation Script Type
- SuiteScript 2.x Client Script Type
- SuiteScript 2.x Map/Reduce Script Type
- SuiteScript 2.x Mass Update Script Type
- SuiteScript 2.x Portlet Script Type
- SuiteScript 2.x RESTlet Script Type
- SuiteScript 2.x Suitelet Script Type
- SuiteScript 2.x User Event Script Type
- SuiteScript 2.x Workflow Action Script Type