Close existing open Requests from Backgroun/Fix script

Rocky5
Kilo Sage

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.

6 REPLIES 6

Bert_c1
Kilo Patron

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.

Hi Bert,

Yes, but still no luck.

 

Thanks,

Rocky.

Hi Rocky,

I'm sorry my post is not helpful.   Maybe try:

https://www.codecademy.com/catalog/language/javascript

and :

https://developer.servicenow.com/dev.do#!/reference/api/utah/server_legacy/c_GlideRecordAPI?navFilte...

 

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();
	}
}

 

 

Hello Bert,

 

May I know what’s the difference in the functionality of your code and mine.? 

thanks,

rocky.