I want to close all child incidents before closing parent incident, if any one child incident not closed the parent incident should not be closed

Vijay8
Giga Contributor

I want to close all child incidents before closing parent incident, if any one child incident not closed the parent incident should not be closed should populate a error message

I tried the code below but, If I try to close one child Incident parent incident is also getting closed 

I tried many solutions in community but, none of them work please help me with this

 

 

var inc = new GlideRecord('incident');
inc.addQuery('parent_incident', current.sys_id);
inc.addQuery('sys_id', '!=', current.sys_id);
inc.addActiveQuery();
inc.query();
if (!inc.next()) {

var parInc = new GlideRecord('incident');
parInc.addQuery('sys_id', current.parent_incident);
parInc.query();
if (parInc.next()) {
parInc.state = 6;
parInc.active = false;
parInc.update();
}
}

1 ACCEPTED SOLUTION

Hi Vijay,

Actually in resolved state the active flag is true only and in closed state it is setting to false.

Try updating the filter condition as shown below:

find_real_file.png

 

Remove the resolved part and try putting infomessage inside the code and see which info message is coming in the below sctipt:

//Check if all hte task are closed or not
var inc = new GlideRecord('incident');
inc.addQuery('parent_incident', current.getValue('parent_incident'));
inc.addActiveQuery();
inc.query();
if(!inc.hasNext()) {

gs.addInfoMessage('@inside Loop ' + current.getValue('parent_incident'));
//If task are closed then closed the parent ticket.
var parInc = new GlideRecord('incident');
parInc.get(current.getValue('parent_incident'));
gs.addInfoMessage('parent incident nubmer ' + parInc.getValue('number'));

parInc.state = 6 //State value which you want to set
parInc.update();

}

gs.addInfoMessage('Inside BR');

 

 

 

 

Thanks,

CB

View solution in original post

27 REPLIES 27

Himanshu Dubey
Giga Guru

Hi Vijay,

Add below changes in the above BR's

condition : state  changes to  resolved

                     or

                state  changes to  closed     // if someone directly closing the ticket 

BR code 

	var rec = new GlideRecord('incident');
rec.addQuery('parent_incident', current.sys_id);
rec.addQuery('state', 'IN', '1,2,3');
rec.query();
if (rec.next()) {

    gs.addErrorMessage("There is an active child incident, please resolve the child incident, before closing parent");

    current.setAbortAction(true);
}

 


Mark ✅ Correct if my answer solves your issue and also mark 👍 Helpful if you find my response worthy.

Thanks & Regards

Himanshu Dubey

Hi Himanshu,

Thank you for the response the I can see the error messages but stll the state is updated to resolved

Vijay8
Giga Contributor

find_real_file.png

It is not in resolved state just refresh the page and check it 

Gaurav Shirsat
Mega Sage

Hi Vijay

In addition to Tejas and Himanshu,

I have another Script.You Can Try This

find_real_file.png

find_real_file.png

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

// Add your code here
var closedChild = 0;
var grInc = new GlideRecord('incident');
grInc.addQuery('parent_incident',current.sys_id);
grInc.query();
var totalChildCount = grInc.getRowCount();
gs.addInfoMessage("CNT: "+totalChildCount);

while(grInc.next()){
if(grInc.state == 6){
closedChild +=1;
}
}
if(closedChild != totalChildCount){
gs.addErrorMessage("please close All child incident");
current.setAbortAction(true);
}

})(current, previous);

 

Please Mark Correct and Helpful

Thanks and Regards

Gaurav Shirsat