Built something you're proud of? Tell the story. A quick G2 review of App Engine or Build Agent helps other developers see what's possible on ServiceNow. Share your experience.

petercawdron
Kilo Guru

There are times where you simply want to abort a workflow during the approval process. You don't want to mess around with stuff and just want a clean start. Here's how you can do that from Script Includes (triggered by a UI action), simply pass the current record through to this script and you'll find yourself back where you started.

//First, reverse the existing approvals
var approvals = new GlideRecord('sysapproval_approver');
approvals.addEncodedQuery('^sysapproval=' + current.sys_id + '^ORdocument_id=' + current.sys_id);
approvals.query();
while(approvals.next()){
	approvals.state = 'not requested';  
	approvals.comments = 'This approval was manually reset';
	approvals.update();
}

//Which workflow are we working with?
var thisWorkFlow = '';
var whichWorkFlow = new GlideRecord('wf_context');
whichWorkFlow.addEncodedQuery('id='+current.sys_id);
whichWorkFlow.setLimit(1);
whichWorkFlow.query();

if(whichWorkFlow.next()){thisWorkFlow = whichWorkFlow.workflow_version.toString();}

//Now delete the current workflow
new Workflow().deleteWorkflow(current); 

//Reset this record back to not requested and a draft state
current.approval = 'not requested';
current.state = '1';//Draft
current.update();

//Finally, restart the workflow
if(thisWorkFlow!=''){
	var wf = new Workflow();
	var context = wf.startFlow(thisWorkFlow, current, current.update());
}

Have fun

Version history
Last update:
‎09-17-2019 11:12 PM
Updated by: