is there a removeQuery, changeQuery, or other way to manipulate a query in a business rule?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-25-2016 04:12 PM
So the reason I'm doing this is to get around a bug in servicenow. The issue involves Resource Workbench and it overwriting my date with their hard coded default date.
My Business Rule:
When: Before
Query: true (the rest false)
No filter conditions
Advanced: true
under the Advanced Tab, Script:
(function executeRule(current, previous /*null when async*/) {
try {
if (current.getTableName() == 'roster_schedule_span')
return;
var map = gs.action.getGlideURI().getMap();
var referringProcessor = map.get('sysparm_processor');
if (JSUtil.notNil(referringProcessor)) {
if (referringProcessor.toString().indexOf("com.snc.resource_management") > -1)
current.addQuery("show_as", "!=", "on_call"); // another bug fix that we have....sigh
else if (referringProcessor.toString().indexOf('ResourceWorkbenchService') > -1) {
/* This is a total hack to get around 2 bugs with ResourceWorkbench
* Bug 1: They hard code the default view to be 12 months -1 day from today
* Bug 2: If you set the EndDate prior to selecting the Group, it
* automatically overrides your date with their default 12
* months - 1 day.
* As such, we check to see if the end date is exactly 1 year - 1 day
* from today. If it is, then we default to 3 months out
*/
var endDate = new GlideDateTime(map.get('sysparm_end_date').toString());
var defaultDate = new GlideDateTime();
defaultDate.addYears(1);
defaultDate.addDays(-1);
if (defaultDate.equals(endDate))
;// !!!!!!! this is where I'd like to remove the end_date part of the query and instead
// default to a different date something like current.changeQuery('end_date', myDefaultDate);
}
}
}
catch(ex)
{
gs.error('Schedules Exception:\r\n' + ex );
}
})(current, previous);
Check below the 'if (defaultDate.equals...)' statement, that's where I'd like to override/change this query.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-03-2016 11:30 PM
The best you can probably do is use .addOrCondition() with your date query.
There is no API to change or remove an existing query without re-initializing current.
ServiceNow Nerd
ServiceNow Developer MVP 2020-2022
ServiceNow Community MVP 2019-2022
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-04-2016 08:21 AM
the or condition wont work as it'll include the dates we don't want. I like the idea of re-init, but is there a way to grab the original conditions before you re-init?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-04-2016 08:39 AM
You might try
var oldQuery = current.getEncodedQuery(); // returns an Encoded Query String with all queries added to current so far
var newQuery = oldQuery.replace(defaultDate, myDate); // use RegEx to match defaultDate
current.initialize();
current.addQuery(newQuery);
Please feel free to connect, follow, mark helpful / answer, like, endorse.
John Chun, PhD PMP ![]() | ![]() |