- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-21-2019 01:21 AM
Happy Monday all,
Im trying to get a business rule to trigger when a 'Resolve' UI Action is clicked on a 'parent' ticket within a scoped app, but for some reason it never triggers.
my condition is current.state.changesTo(6)
Its an after business rule (I have tried before) .
the BR itself is
function closeRelatedTasks(me) {
var task = new GlideRecord("x_insoa_investec_a_table_caa");
task.addQuery("parent", '=', me.sys_id);
task.query();
while (task.next()) {
gs.print("Task " + task.number + ' closed based on closure of task ' + me.number);
task.state.setValue(6);
task.close_notes.setValue("Resolved by closure of Parent");
task.update();
}
this.closeIncident(me);
}
All help is appreciated!
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-25-2019 05:44 AM
It was a mistake in the the code, I replaced
gs.info("case " + lend.number + ' closed based on closure of case ' + me.number);
with
gs.info("case " + lend.number + ' closed based on closure of case ' + current.number);
and it all worked fine! Thanks for the replies all

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-21-2019 03:03 AM
You described that the UI Action, changes the state of a parent ticket. Is that correct? The Business Rule is running on the parent ticket I assume?
Can you share the full code of the Business Rule? You only pasted a snipped I guess? Or if not: how is the function being called?
If my answer helped you in any way, please then mark it as helpful.
Kind regards,
Mark
---
LinkedIn
Community article list
Kind regards,
Mark Roethof
Independent ServiceNow Consultant
10x ServiceNow MVP
---
~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-21-2019 05:24 AM
Hi Mark,
Yes a UI Action with both client and server code and the BR runs on the parent.
Full code for both below.
UI Action
//Client-side 'onclick' function
function moveToResolved(){
g_form.setValue ('state', 6);
//Call the UI Action and skip the 'onclick' function
gsftSubmit(null, g_form.getFormElement(), 'resolve_iba_case'); //MUST call the 'Action name' set in this UI Action
}
//Code that runs without 'onclick'
//Ensure call to server-side function with no browser errors
if(typeof window == 'undefined')
runBusRuleCode();
//Server-side function
function runBusRuleCode(){
current.state = 6;
current.update();
// gs.addInfoMessage('You did it!');
action.setRedirectURL();
}
Business Rule
updateChildCases();
function updateChildCases() {
if (current.state.changesTo(6))
resolveRelatedCases();
else{
updateChildren('work_notes', gs.getMessage('Work note copied from Parent Case'));
}
}
function updateChildren (fieldName, msg){
var rec = newGlideRecord("x_insoa_investec_a_table_caa");
rec.addQuery("parent", current.sys_id);
rec.addQuery("state", "!=", 6);
rec.addActiveQuery();
rec.query();
while (rec.next()){
var fieldRawValue = current.getValue(fieldname) + '';
var fieldValue = fieldRawValue.trim();
if (!fieldValue || filedValue.length <= 0)
return;
if (fieldRawValue.indexOf(msg) ==0)
rec[fieldName] = msg + ": " + fieldRawValue;
rec.update();
}
}
function resolveRelatedCases() {
var lend = new GlideRecord("x_insoa_investec_a_table_caa");
lend.addActiveQuery();
lend.addQuery("parent", current.sys_id);
lend.addQuery("state", "!=", 6);
lend.query();
var msg = "";
while (lend.next()) {
gs.info("case " + lend.number + ' closed based on closure of case ' + me.number);
lend.state = 6;
if (lend.close_notes.nil()){
msg = gs.getMessage('{0} copied from Parent Case', current.close_notes.getLabel());
if (current.close_notes.toString().indexOf(msg) == 0)
lend.close_notes = current.close_notes;
else
lend.close_notes = msg + ": " + current.close_notes;
}
msg = gs.getMessage("Resolved based on resolution of Parent Case");
lend.update();
}
}
gs.addInfoMessage('Your condition worked');
The debugger is returning the child record but its not resolving?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-21-2019 06:41 AM
so you code is having problem in this section
function resolveRelatedCases() {
var lend = new GlideRecord("x_insoa_investec_a_table_caa");
lend.addActiveQuery();
lend.addQuery("parent", current.sys_id);
lend.addQuery("state", "!=", 6); //--> problem here
lend.query();
replace it as
end.addQuery("state!=6");
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-21-2019 06:42 AM
again
lend.state = 6; needs to be replaced as lend.state = "6";

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-21-2019 07:09 AM
If I look at an out-of-the-box example, it uses:
current.state.changesTo(IncidentState.RESOLVED)
Kind regards,
Mark
---
LinkedIn
Community article list
Kind regards,
Mark Roethof
Independent ServiceNow Consultant
10x ServiceNow MVP
---
~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field