Okay everyone, very much through the looking glass on this one. Many thanks to Barmar, Kryton and bknights whose wisdom has helped get me this far.
The script has changed and is now below. I can upload it and generate a script record and it does actually attempt to run, but now I am getting this error:
"type":"error.SuiteScriptError","name":"RCRD_DSNT_EXIST","message":"There are no records of this type.","stack":["createError(N/error)","initiateWorkflow(/SuiteScripts/grn20.js:9)"],"cause":{"type":"internal error","code":"RCRD_DSNT_EXIST","details":"There are no records of this type.","userEvent":"aftersubmit","stackTrace":["createError(N/error)","initiateWorkflow(/SuiteScripts/grn20.js:9)"],"notifyOff":false},"id":"","notifyOff":false,"userFacing":false}
But the record definitely does exist, the ID number and workflow ID are as specified in the workflow.
What else could be causing this problem?
Thank you in advance for any suggestions!
Edit - I have been told that the record ID below should refer to the internal ID of the item, this makes no sense, the workflow I am trying to initiate is designed to change fields on multiple items, why would I need to specify a single item in the script?
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
*/
define(['N/workflow', 'N/search', 'N/error', 'N/record'],
function (workflow, search, error, record) {
function initiateWorkflow(scriptContext) {
var workflowInstanceId = workflow.initiate({
recordType: 'inventoryitem',
recordId: 35,
workflowId: 'customworkflow14'
});
var inventoryitemRecord = record.load({
type: record.Type.INVENTORY_ITEM,
id: 35
});
}
return {
afterSubmit: initiateWorkflow
};
});
There are 2 issues that I can see:
define()
rather than require()
. Note from NetSuite documents below:Note This sample script uses the require function so that you can copy it into the SuiteScript Debugger and test it. You must use the define function in an entry point script (the script you attach to a script record and deploy). For more information, see SuiteScript 2.x Script Basics and SuiteScript 2.x Script Types.
return
block. For a User Event Script as this is, that means you need one of beforeLoad
, beforeSubmit
or afterSubmit
.For your example, your script would end up looking something like this:
/**
* @NApiVersion 2.0
* @NScriptType UserEventScript
*/
define(['N/task'],
function (task) {
function workflowTask(scriptContext) {
task.create({
taskType: task.TaskType.WORKFLOW_TRIGGER
});
workflowTask.recordType = 'INVENTORY_ITEM';
workflowTask.recordId = 'Item';
workflowTask.workflowId = 'customworkflow14';
var taskId = workflowTask.submit();
}
return {
afterSubmit: workflowTask
};
}
);