Close existing open Requests from Backgroun/Fix script
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-03-2023 12:48 PM
Hello Experts,
We have several requests that are in 'open' state but RITMs under those requests are already closed complete. So, I want to fix i.e. close those open requests. So, I am using below script in background script but no luck. Seeking help.
Background script:
var req = new GlideRecord('sc_request');
req.addActiveQuery();
req.query();
while (req.next()) {
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('request',req.sys_id);
ritm.addEncodedQuery('state=3^request.state=1'); //where RITM is closed and REQUEST is open state.
ritm.setLimit(1);
}
if (ritm.next()) {
req.state = '3';
req.active = 'false';
req.setWorkflow('false');
req.stage = 'Completed';
req.autoSysFields();
req.update();
}
Thanks,
Rocky.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-03-2023 12:56 PM - edited 04-03-2023 01:05 PM
Hi,
Seems placement of closing braces is the problem. Do you mean the following:
var req = new GlideRecord('sc_request');
req.addActiveQuery();
req.query();
while (req.next()) {
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('request',req.sys_id);
ritm.addEncodedQuery('state=3^request.state=1'); //where RITM is closed and REQUEST is open state.
ritm.setLimit(1);
if (ritm.next()) {
req.state = '3';
req.active = false;
req.setWorkflow(false);
req.stage = 'Completed';
req.autoSysFields();
req.update();
}
}
state is a boolean field so use true/false, not string values. Same in setWorkflow().
I also recommend adding var dryRun=false; at the top, and then:
if (!dryRun)
req.update();
Add some gs.info() to debug logic.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-03-2023 01:05 PM
Hi Bert,
Yes, but still no luck.
Thanks,
Rocky.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-03-2023 01:12 PM - edited 04-03-2023 02:49 PM
Hi Rocky,
I'm sorry my post is not helpful. Maybe try:
https://www.codecademy.com/catalog/language/javascript
and :
My version:
var dryRun = false;
var req = new GlideRecord('sc_request');
req.addActiveQuery();
req.query();
gs.info("Processing: " + req.getRowCount() + " sc_request records.");
while (req.next()) {
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('request',req.sys_id);
ritm.addEncodedQuery('state=3^request.state=1'); //where RITM is closed and REQUEST is open state.
ritm.setLimit(1);
ritm.query();
gs.info("Found " + ritm.getRowCount() + " sc_req_item records for req: " + req.number);
if (ritm.next()) {
req.state = 3; // integer value
req.active = false; // boolean value
req.setWorkflow(false);
req.stage = 'closed_complete'; // OOB value
req.autoSysFields(false); // needs a boolean value
gs.info("Updating sc_request for: " + ritm.request);
if (!dryRun)
req.update();
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-03-2023 06:46 PM
Hello Bert,
May I know what’s the difference in the functionality of your code and mine.?
thanks,
rocky.