How to restart a workflow from UI action
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-30-2020 11:16 PM
Hi,
Could you please tell me how to restart a workflow from UI action?
Have used below script:
UI Action
Table:sc_req_item
new Workflow().restartWorkflow(current, true);
current.state = '1';
current.update();
action.setRedirectURL(current);
This script restarts the workflow,but the issue is if there are 2 levels of approval and 1st level of approval is approved and 2nd is requested, when this UI action button is clicked 1st level of approval is still in approved state. I want to restart the approvals as well.
Kindly request you to suggest solution for this.
Regards,
Yashaswini
- Labels:
-
Service Catalog

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-30-2020 11:31 PM
Hi Yashaswini,
Here you go.
new WorkflowApprovalUtils().cancelAll(current, comment);
new Workflow().restartWorkflow(current);
current.state = '1';
current.update();
action.setRedirectURL(current);

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-30-2020 11:33 PM
If the above doesn't work then try this
new Workflow().cancel(current);
new WorkflowApprovalUtils().cancelAll(current, comment);
new Workflow().restartWorkflow(current);
current.state = '1';
current.update();
action.setRedirectURL(current);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-30-2020 11:52 PM
Thanks for replying.
Have tried both the codes. Workflow is restarted but approvals are not reset.
Regards,
Yashaswini

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-30-2020 11:59 PM
Try with below code.
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
//Finally, restart the workflow
if(thisWorkFlow!=''){
var wf = new Workflow();
var context = wf.startFlow(thisWorkFlow, current, current.update());
}
current.approval = 'not requested';
current.state = '1';//Draft
current.update();
action.setRedirectURL(current);