- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-05-2022 02:24 PM
Hello,
We have a request to "cleanup" old Requests where some of the RITMs are still open because some of the Tasks were never completed. I've got a background script working all except for closing the Tasks.
I've been given a list (a very long list) of the Request numbers that need to be cleaned up. What is wrong with my script that I cannot get the tasks closed?
var scrs = ['SCR0111947', ]; //list of Requests that have open tasks - will get the list and format in Excel and paste into the script for the array
for (var i = 0; i < scrs.length; i++) {
var rec = new GlideRecord('sc_request');
rec.addEncodedQuery('numberSTARTSWITH' + scrs[i]);
rec.query();
if (rec.next()) {
rec.setWorkflow(false);
rec.state = 4;
rec.stage = 'closed_incomplete';
rec.description = "Bulk closure of old tickets per SER0058621";
rec.update();
//find all the RITMs for each SCR
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('requestSTARTSWITH' + scrs[i]);
ritm.addQuery('active', true);
ritm.query();
while (ritm.next()) {
ritm.setWorkflow(false);
ritm.state = 4;
ritm.stage = 'Request Cancelled';
ritm.update();
}
//find all the RTASKs for each SCR/RITM
var rtask = new GlideRecord('sc_task');
rtask.addQuery('request.numberSTARTSWITH' + scrs[i]);
rtask.addQuery('active', true);
while (rtask.next()) {
gs.print('SCR is ' + request.number);
rtask.setWorkflow(false);
rtask.state = 4;
rtaks.update();
}
}
}
Any help is greatly appreciated!
Thank you,
Laurie
Solved! Go to Solution.
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-05-2022 02:51 PM
You can condense this by using the updateMultiple function. Have you also considered cancelling the workflows/flows behind these records?
var SOURCE_REQUESTS = ['REQ0010027', 'REQ0010026','REQ0010011'];
var requestGR = new GlideRecord('sc_request');
requestGR.addQuery('number' , 'IN' , SOURCE_REQUESTS);
requestGR.setValue('state' , 4);
requestGR.setValue('request_state' , 'closed_incomplete');
requestGR.setValue('stage' , 'closed_incomplete');
requestGR.setValue('description' , 'Bulk closure of old tickets per SER0058621');
requestGR.setWorkflow(false);
requestGR.updateMultiple();
var requestItemGR = new GlideRecord('sc_req_item');
requestItemGR.addQuery('request.number' , 'IN' , SOURCE_REQUESTS);
requestItemGR.addActiveQuery();
requestItemGR.setValue('state' , 4);
requestItemGR.setValue('stage' , 'Request Cancelled');
requestItemGR.setWorkflow(false);
requestItemGR.updateMultiple();
var taskGR = new GlideRecord('sc_task');
taskGR.addQuery('request.number' , 'IN' , SOURCE_REQUESTS);
taskGR.addActiveQuery();
taskGR.setValue('state' , 4);
taskGR.setWorkflow(false);
taskGR.updateMultiple();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-08-2022 08:00 AM
Hi Shubham,
I have reviewed those links - thank you.
I am uncertain how to get the code written to cancel the workflows for the Requested Items when using:
requestItemGR.updateMultiple();
Laurie
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-08-2022 07:19 AM
Hi,
Did you check any BR is restricting closure of sc_task?
What debugging have you performed so far?
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-08-2022 07:57 AM
Hi Ankur,
This is for a background script to cleanup old tickets. I have setWorkflow(false) so emails will not trigger. This is preventing the business rules from closing tasks and cancelling workflows. The original script close incompletes the Request, active Request Items, and active Tasks. I don't know how to cancel the associated workflow to the Request Items when using updateMultiple().
Thank you,
Laurie
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-09-2022 07:05 AM
Here is my final code which includes cancelling the workflows for the Requested Items
var SOURCE_REQUESTS = ['SCR0111939',];
var requestGR = new GlideRecord('sc_request');
requestGR.addQuery('number' , 'IN' , SOURCE_REQUESTS);
requestGR.setValue('state' , 4);
requestGR.setValue('request_state' , 'closed_incomplete');
requestGR.setValue('stage' , 'closed_incomplete');
requestGR.setValue('description' , 'Bulk closure of old tickets per SER0058621');
requestGR.setWorkflow(false);
requestGR.updateMultiple();
var requestItemGR = new GlideRecord('sc_req_item');
requestItemGR.addQuery('request.number' , 'IN' , SOURCE_REQUESTS);
requestItemGR.addActiveQuery();
requestItemGR.setValue('state' , 4);
requestItemGR.setValue('stage' , 'Request Cancelled');
requestItemGR.setWorkflow(false);
requestItemGR.updateMultiple();
//cancel workflows
var requestItemWF = new GlideRecord('sc_req_item');
requestItemWF.addQuery('request.number' , 'IN' , SOURCE_REQUESTS);
requestItemWF.query();
while(requestItemWF.next()){
requestItemWF.setWorkflow(false);
var workflow = new Workflow();
workflow.cancel(requestItemWF);
}
var taskGR = new GlideRecord('sc_task');
taskGR.addQuery('request.number' , 'IN' , SOURCE_REQUESTS);
taskGR.addActiveQuery();
taskGR.setValue('state' , 4);
taskGR.setWorkflow(false);
taskGR.updateMultiple();