Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Unable to close REQ for multiple RITM having different states

Karishma Dubey
Tera Expert

Hello,

I am trying to close the REQ which has multiple RITM's. If one of the RITM is 'closed incomplete' or 'closed skipped' then the REQ should be 'closed incomplete' else 'closed incomplete'. I am writing below BR however it is not working.

(function executeRule(current, previous /*null when async*/ ) {

var gr = new GlideAggregate('sc_req_item');
gr.addQuery('request', current.request);
gr.addAggregate('COUNT');
gr.query();
var count=0;
if (gr.next()) {
count=gr.getAggregate('COUNT'); //Get all task count
}

var glideRITM = new GlideAggregate('sc_req_item');
glideRITM.addQuery('request',current.request);
glideRITM.addQuery('state','3'); //Get Closed complete task count
glideRITM.addAggregate('COUNT');
glideRITM.query();
var closedTaskCount=0;
if (glideRITM.next()) {

closedTaskCount=glideRITM.getAggregate('COUNT');

var glideRequest=current.request.getRefRecord();
if(count==closedTaskCount){

glideRequest.setValue('state','closed_complete'); //close the request if count of all task and closed task same.
glideRequest.update();
}
else{

glideRequest.setValue('state','closed_incomplete'); //close the request if count of all task and closed task same.
glideRequest.update();
}
}

})(current, previous);

1 ACCEPTED SOLUTION

Sandeep Rajput
Tera Patron
Tera Patron

@Karishma Dubey Here is the updated BR.

 

(function executeRule(current, previous /*null when async*/ ) {

// Add your code here
var gr = new GlideAggregate('sc_req_item');
gr.addQuery('request', current.request);
gr.addAggregate('COUNT');
gr.query();
var Totaltaskcount = 0;
if (gr.next()) {
Totaltaskcount = gr.getAggregate('COUNT'); //Get all task count
}
gs.log('count ' + count);
var glideRITM = new GlideAggregate('sc_req_item');
glideRITM.addQuery('request', current.request);
// glideRITM.addQuery('state', '3'); //Get Closed complete task count
//glideRITM.addEncodedQuery('stateIN3,4,7');
//glideRITM.addAggregate('COUNT');
glideRITM.addAggregate('COUNT', 'state');
glideRITM.groupBy('state');
//glideRITM.groupBy('state');
glideRITM.query();
var closedTaskCount = 0;
var stateobj = {};
while (glideRITM.next()) {
//gs.print('state '+glideRITM.getDisplayValue('state')+" count "+glideRITM.getAggregate('COUNT','state'));
stateobj[glideRITM.getValue('state')] = glideRITM.getAggregate('COUNT', 'state');
}
if(stateobj){
var closedTaskcount = stateobj['Closed Complete'];
var closedIncomTaskcount = stateobj['Closed Incomplete'];
var closedSkipTaskcount = stateobj['Closed Skipped'];
var glideRequest = current.request.getRefRecord();
if(Totaltaskcount==parseInt(closedTaskcount)){
glideRequest.setValue('state', '3');
glideRequest.setValue('request_state', 'closed_complete');
glideRequest.update();
}
else if(Totaltaskcount==parseInt(closedTaskcount)+parseInt(closedIncomTaskcount)+parseInt(closedSkipTaskcount)){
glideRequest.setValue('state', '4');
glideRequest.setValue('request_state', 'closed_incomplete');
glideRequest.update();
}

}

})(current, previous);

View solution in original post

2 REPLIES 2

Sandeep Rajput
Tera Patron
Tera Patron

@Karishma Dubey Here is the updated BR.

 

(function executeRule(current, previous /*null when async*/ ) {

// Add your code here
var gr = new GlideAggregate('sc_req_item');
gr.addQuery('request', current.request);
gr.addAggregate('COUNT');
gr.query();
var Totaltaskcount = 0;
if (gr.next()) {
Totaltaskcount = gr.getAggregate('COUNT'); //Get all task count
}
gs.log('count ' + count);
var glideRITM = new GlideAggregate('sc_req_item');
glideRITM.addQuery('request', current.request);
// glideRITM.addQuery('state', '3'); //Get Closed complete task count
//glideRITM.addEncodedQuery('stateIN3,4,7');
//glideRITM.addAggregate('COUNT');
glideRITM.addAggregate('COUNT', 'state');
glideRITM.groupBy('state');
//glideRITM.groupBy('state');
glideRITM.query();
var closedTaskCount = 0;
var stateobj = {};
while (glideRITM.next()) {
//gs.print('state '+glideRITM.getDisplayValue('state')+" count "+glideRITM.getAggregate('COUNT','state'));
stateobj[glideRITM.getValue('state')] = glideRITM.getAggregate('COUNT', 'state');
}
if(stateobj){
var closedTaskcount = stateobj['Closed Complete'];
var closedIncomTaskcount = stateobj['Closed Incomplete'];
var closedSkipTaskcount = stateobj['Closed Skipped'];
var glideRequest = current.request.getRefRecord();
if(Totaltaskcount==parseInt(closedTaskcount)){
glideRequest.setValue('state', '3');
glideRequest.setValue('request_state', 'closed_complete');
glideRequest.update();
}
else if(Totaltaskcount==parseInt(closedTaskcount)+parseInt(closedIncomTaskcount)+parseInt(closedSkipTaskcount)){
glideRequest.setValue('state', '4');
glideRequest.setValue('request_state', 'closed_incomplete');
glideRequest.update();
}

}

})(current, previous);

Sujatha V M
Kilo Patron
Kilo Patron

@Karishma Dubey  Please refer the below link similar to your requirement, 

 

https://www.servicenow.com/community/itsm-forum/if-ritm-state-is-closed-complete-then-req-should-als...

 

Please mark this as helpful and accept it as a solution if this resolves your query.

Thanks,

Sujatha V.M.

Please mark this as helpful and accept it as a solution if this resolves your query.
Sujatha V.M.