- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-17-2025 04:55 AM
Hi Al,
one interaction i can have one or many incident, change , problem or request attached to this interaction.
The interaction must be closed if all incident .problem, change and req are closed.
I tried this BR but unfortunately it s not working
var result = [];
var array = [];
var ref = [7,3,107];
var gr = new GlideRecord ('interaction_related_record');
gr.addQuery('task',current.sys_id);
gr.query();
while (gr.next())
{
array.push(gr.state);
}
if(array.length > 0)
{
for(var i=0;i<array.length;i++)
{
var arrayUtil = new ArrayUtil();
if(arrayUtil.indexOf(ref, array[i])==-1)
{
result.push(array[i]);
}
}
}
if(result.length == 0)
{
var inter = new GlideRecord ('interaction');
inter.addQuery('task',current.sys_id);
inter.query();
if(inter.next())
{
inter.state='closed_complete';
inter.update();
}
}
})(current, previous);
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-17-2025 05:08 AM - edited 06-17-2025 05:28 AM
business rule is on which table and what are you trying to achieve here by using that array?
try this
I assume after update business rule on task table
// Business Rule: After Update on 'task'
// Condition: current.state changes
// Define your closed state values
var closedStates = ['7', '3', '107']; // Use strings for comparison
// Find all interaction_related_record entries that reference this task
var irrGR = new GlideRecord('interaction_related_record');
irrGR.addQuery('task', current.sys_id);
irrGR.query();
while (irrGR.next()) {
var interactionId = irrGR.interaction; // Adjust if your field is named differently
// Check all related tasks for this interaction
var allClosed = true;
var relatedGR = new GlideRecord('interaction_related_record');
relatedGR.addQuery('interaction', interactionId);
relatedGR.query();
while (relatedGR.next()) {
var taskGR = new GlideRecord('task');
if (taskGR.get(relatedGR.task)) {
if (closedStates.indexOf(taskGR.state.toString()) === -1) {
allClosed = false;
break;
}
}
}
// If all related tasks are closed, close the interaction
if (allClosed) {
var interactionGR = new GlideRecord('interaction');
if (interactionGR.get(interactionId)) {
interactionGR.state = 'closed_complete'; // Or your closed state value
interactionGR.update();
}
}
}
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-17-2025 05:08 AM - edited 06-17-2025 05:28 AM
business rule is on which table and what are you trying to achieve here by using that array?
try this
I assume after update business rule on task table
// Business Rule: After Update on 'task'
// Condition: current.state changes
// Define your closed state values
var closedStates = ['7', '3', '107']; // Use strings for comparison
// Find all interaction_related_record entries that reference this task
var irrGR = new GlideRecord('interaction_related_record');
irrGR.addQuery('task', current.sys_id);
irrGR.query();
while (irrGR.next()) {
var interactionId = irrGR.interaction; // Adjust if your field is named differently
// Check all related tasks for this interaction
var allClosed = true;
var relatedGR = new GlideRecord('interaction_related_record');
relatedGR.addQuery('interaction', interactionId);
relatedGR.query();
while (relatedGR.next()) {
var taskGR = new GlideRecord('task');
if (taskGR.get(relatedGR.task)) {
if (closedStates.indexOf(taskGR.state.toString()) === -1) {
allClosed = false;
break;
}
}
}
// If all related tasks are closed, close the interaction
if (allClosed) {
var interactionGR = new GlideRecord('interaction');
if (interactionGR.get(interactionId)) {
interactionGR.state = 'closed_complete'; // Or your closed state value
interactionGR.update();
}
}
}
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-17-2025 05:16 AM
I have selected the Task table. I need one interaction to have different records (like Incident, Problem, Change, and Request). I want the interaction to be closed only when all those records are closed.
If any one of the related records (e.g., Incident) is still in an open state while others are closed, then that interaction should not be closed.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-17-2025 05:28 AM
I updated the above script just now
please try that and share the feedback
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-17-2025 06:00 AM
Table - task
I am tried , After closed incident and request , that interaction not closed .
its not working