- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-18-2020 05:37 AM
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();
}
}
Solved! Go to Solution.
- Labels:
-
Incident Management
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-19-2020 03:36 AM
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:
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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-18-2020 10:24 PM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-18-2020 10:51 PM
Hi Himanshu,
Thank you for the response the I can see the error messages but stll the state is updated to resolved
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-18-2020 11:08 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-19-2020 12:34 AM
It is not in resolved state just refresh the page and check it

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎06-18-2020 11:24 PM
Hi Vijay
In addition to Tejas and Himanshu,
I have another Script.You Can Try This
(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