restart workflow in req
						
					
					
				
			
		
	
			
	
	
	
	
	
- Mark as New
 - Bookmark
 - Subscribe
 - Mute
 - Subscribe to RSS Feed
 - Permalink
 - Report Inappropriate Content
 
10-10-2024 11:41 PM
Hi all,
We created a UI action button to restart the RITM flow and the workflow in REQ. When we clicked the restart button, the RITM flow restarted and the state and stage completed, but the workflow in REQ did not work correctly. The parent REQ should also be closed when the RITM was finished.
Here is the ui action script:
(function() {
    var req = new GlideRecord('sc_request');
    req.addQuery('sys_id', current.request);
    req.query();
    if (req.next()) {
        if (req.request_state == 'closed_incomplete') {
            req.active = true;
            req.request_state = 'requested';
            req.setWorkflow(false);
            req.update();
            new Workflow().restartWorkflow(req);
        }
    }
    var wfContext = new GlideRecord('wf_context');
    wfContext.addQuery('table', 'sc_request'); 
    wfContext.addQuery('id', req.sys_id); 
    wfContext.query();
    if (wfContext.next()) {
   
        var workflowId = wfContext.workflow.toString(); 
        var wflow = new global.Workflow();
        // Cancel the workflow context
        gs.info('Cancelling workflow context: ' + wfContext.sys_id);
        wflow.cancel(wfContext);
        // Start a new workflow for sc_request
        gs.info('Starting new workflow for sc_request: ' + req.sys_id);
        wflow.startFlow(workflowId, req, null); // Start the same workflow again on sc_request
    } else {
        gs.error('Error: Workflow context not found for sc_request: ' + req.sys_id);
    }
    var approvals = new GlideRecord('sysapproval_approver');
    approvals.addEncodedQuery('sysapproval=' + current.sys_id.toString());
    approvals.orderByDesc('sys_created_on');
    approvals.query();
    while (approvals.next()) {
        approvals.state = 'cancelled';
        approvals.update();
    }
    // Find and cancel related flow context records for RITM
    var grFlowContext = new GlideRecord('sys_flow_context');
    grFlowContext.addQuery('source_record', current.sys_id.toString());
    grFlowContext.orderByDesc('sys_created_on');
    grFlowContext.query();
    while (grFlowContext.next()) {
        sn_fd.FlowAPI.cancel(grFlowContext.sys_id.toString(), null);
    }
    // Restart the Flow Designer flow for RITM
    try {
        // Restart the flow context for RITM
        sn_fd.FlowAPI.getRunner().restartFlowFromContext(grFlowContext.sys_id.toString(), null);
    } catch (ex) {
        gs.error('Error occurred: ' + ex.getMessage());
    }
    // Update the RITM record
    current.active = true;
    current.state = '1'; // Set to active
    current.update();
    // Add a work note to the RITM
    current.work_notes = 'Request has been restarted by ' + gs.getUserDisplayName();
    current.update();
    // Redirect to the current RITM record
    action.setRedirectURL(current);
})();Please see the screenshot attached for your reference:
RITM state and stages
REQ state and stages
REQ workflow
please guide me
Thank you,     
- Mark as New
 - Bookmark
 - Subscribe
 - Mute
 - Subscribe to RSS Feed
 - Permalink
 - Report Inappropriate Content
 
10-11-2024 08:55 PM
Hello @rognomolta,
Please refer to the link below:
https://www.servicenow.com/community/developer-forum/restart-workflow-for-one-req-or-ritm/m-p/149825...
If it is helpful, please mark it as helpful and accept the correct solution. In future, it might be helpful for someone to refer to this solution.
Thanks & Regards,
Abbas Shaik
