Get a first look at what's coming. The Developer Passport Australia Release Preview kicks off March 12. Dive in! 

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

@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

@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);

sujitha16
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.