The following scripts can be used to trigger a workflow state in a record by clicking the button in a suitelet page:
Parent Suitelet:
/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
define(['N/ui/serverWidget', 'N/url', 'N/runtime'], function(serverWidget, url, runtime) {
function onRequest(context) {
if (context.request.method === 'GET') {
let form = serverWidget.createForm({
title: 'Trigger Workflow State'
});
// Add a button that calls the Client Script function
form.addButton({
id: 'custpage_trigger_wf',
label: 'Trigger Workflow',
functionName: 'triggerWorkflow'
});
// Attach Client Script
form.clientScriptModulePath = './jj_cs_bill_approval.js';
context.response.writePage(form);
}
}
return { onRequest };
});
Client Script:
/**
* @NApiVersion 2.1
* @NScriptType ClientScript
*/
define(['N/url', 'N/ui/message'], function(url, message) {
function triggerWorkflow() {
try {
let suiteletUrl = url.resolveScript({
scriptId: 'customscript_jj_sl_trigegr_workflow', // Update with actual Suitelet Script ID
deploymentId: 'customdeploy_jj_sl_trigegr_workflow', // Update with actual Deployment ID
params: { action: 'trigger' }
});
console.log('Suitelet URL:', suiteletUrl);
// Call the Suitelet via AJAX
fetch(suiteletUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
})
.then(response => response.json())
.then(data => {
console.log('Response from Suitelet:', data);
if (data.success) {
alert('Workflow triggered successfully!');
} else {
alert('Error triggering workflow: ' + data.message);
}
})
.catch(error => {
console.error('Error in fetch request:', error);
alert('Unexpected error occurred.');
});
} catch (e) {
console.error('Error in triggerWorkflow:', e);
}
}
function pageInit(scriptContext) {
console.log('Client Script Loaded');
}
return { triggerWorkflow, pageInit };
});
Suitelet for triggering workflow:
/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
define(['N/ui/serverWidget', 'N/url', 'N/workflow', 'N/record'], function(serverWidget, url, workflow, record) {
function onRequest(context) {
if (context.request.method === 'GET') {
let form = serverWidget.createForm({
title: 'Trigger Workflow State'
});
form.addButton({
id: 'custpage_trigger_wf',
label: 'Trigger Workflow',
functionName: 'triggerWorkflow'
});
form.clientScriptModulePath = './jj_cs_bill_approval.js';
context.response.writePage(form);
} else if (context.request.method === 'POST') {
try {
let recordId = 20238; // Replace with actual record ID
let workflowId = 'customworkflow2'; // Verify correct workflow ID
let actionId = 'workflowaction584'; // Replace with the actual workflow action ID
if (!recordId || !workflowId || !actionId) {
log.error('Missing Parameters', { recordId: recordId, workflowId: workflowId, actionId: actionId });
context.response.write(JSON.stringify({ success: false, message: 'Missing record ID, workflow ID, or action ID' }));
return;
}
let workflowInstanceId = workflow.trigger({
recordId: recordId, // replace with an actual record id
recordType: 'vendorbill',
workflowId: workflowId,
actionId: 'workflowaction584'
});
log.debug('Workflow Instance', workflowInstanceId);
context.response.write(JSON.stringify({ success: true, message: 'Workflow triggered successfully!' }));
} catch (e) {
log.error('Workflow Trigger Error', e);
context.response.write(JSON.stringify({ success: false, message: e.message }));
}
}
}
return { onRequest };
});