Trigger a workflow state on button click in the suitelet page

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 };
});


Leave a comment

Your email address will not be published. Required fields are marked *