Background Script to Close RITM and REQs without SCTASK under it or pending approvals under it.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-17-2022 11:10 AM
Hi Fam!
My scripting is awful, so I apologize in advance. Dealing with an Issue where workflows were broken for w.e. reason and we have stranded REQ and RITM without SCTASKS under them. I have a background script that can close them and solve the issue but I’m having a problem where its also closing items that dont have an SCTASK because they are pending approval.
How can I modify the below to close out RITMS and REQ that dont have an underlying task or Pending approval attached to it?
var req = new GlideRecord('sc_request');
req.addEncodedQuery('request_stateNOT INclosed_complete,closed_incomplete,closed_cancelled,closed_rejected,closed_skipped');
req.query();
while(req.next()){
var ritm = new GlideRecord('sc_req_item');
ritm.addEncodedQuery('stateNOT IN3,4,7');
ritm.query();
if(!ritm.next()){
req.request_state='closed_complete';
req.update();
}
else{
while(ritm.next()){
var task=new GlideRecord('sc_task');
task.addEncodedQuery('stateNOT IN3,4,7');
task.query();
if(!task.next()){
ritm.state='3';
ritm.update();
}
}
}
}
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-17-2022 11:33 AM
Hi,
I would recommend that you create a filtered list on the sc_req_item table.
There you can filter on both the correct Workflow (Context.Parent Workflow) and on the ones who are pending approval.
After you made a filter that shows the correct results, copy the query and insert it into your script,
so there's no need to start with a query on the sc_request.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-17-2022 11:38 AM
Something as below should help.
var getreq=new GlideRecord('sc_request');
getreq.addQuery('approval','!=','requested');
getreq.addEncodedQuery('stateNOT IN3,4,7');
getreq.setLimit(2); //run for 2 records only. Comment out later if everything works
getreq.query();
gs.print('REQ is '+getreq.number); // added for reference
while(getreq.next())
{
var getritm=new GlideRecord('sc_req_item');
getritm.addQuery('request',getreq);
getritm.addQuery('approval','!=','requested');
getritm.addEncodedQuery('stateNOT IN3,4,7');
getritm.query();
while(getritm.next())
{
var chktask=new GlideRecord('sc_task');
chktask.addQuery('request',getreq);
var chktaskaddor=chktask.addOrCondition('request_item',getritm);
chktask.query();
if(!chktask.next())
{
getritm.state='3';
getritm.update();
getreq.state='3';
getreq.update();
}
}
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-17-2022 02:02 PM
Hi
I tried your script and I got the error:
*** Script: REQ is undefined