Business Rule Mass Update
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-03-2013 08:29 AM
Hey all,
Checking for any input on this one. I changed a business rule on Project that updates a field calculation. The rule executes when the form is saved but I'd like to update the existing records with the new calculation as well.
I found this post Mass update through script without calling Business Rules and Events that talks about running a simple background script and prevent things from running. So my question is, to get the business rules to trigger, could I just run it inverse as:
var gr = new GlideRecord('pm_project');
gr.query();
while (gr.next()){
gr.setWorkflow(true);
gr.update();
}
Or would I even need the setWorkflow bit?
Thanks,
-Mike
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-08-2019 05:22 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-08-2019 05:53 PM
Joro makes a good point, so it would look like this:
var businessRuleTableName= 'pm_project';
var current = new GlideRecord(businessRuleTableName);
current.setWorkflow(false); //Do not run any other business rules following the update
current.query();
while (current.next()) {
// COPY BUSINESS RULE SCRIPT HERE
// Previous will be null
(function executeRule(current, previous /*null when async*/) {
})(current, previous);
//END BUSINESS RULE
// Do not run any other business rules
gr.setWorkflow(false);
// Update silently (no audit or metadata updates)
gr.autoSysFields(false);
// Update record even if no changes
gr.setForceUpdate(true);
// Update the record
current.update();
}
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
‎09-09-2019 04:07 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-09-2019 08:13 AM
Hi Paul,
I updated the script you provided:
On line 30, it gives me a warning "do not make functions within a loop" message. Should I ignore?
I am trying to trigger each case on this table to update so my BR can be triggered.
Thank you!
Kyle
var businessRuleTableName= 'sn_hr_core_case';
var current = new GlideRecord('sn_hr_core_case');
current.setWorkflow(false); //Do not run any other business rules following the update
current.query();
while (current.next()) {
// COPY BUSINESS RULE SCRIPT HERE
// Previous will be null
(function executeRule(current, previous /*null when async*/) {
var categoryCountOpen = 0;
var categoryCountClosed = 0;
var gr = new GlideAggregate('sn_hr_core_case'); gr.addEncodedQuery('stateIN1,10,11,18,20,24^assignment_groupLIKEHRSS - US'); //For All open
gr.addAggregate("COUNT");
gr.query();
if(gr.next()) {//Use if not while
categoryCountOpen = gr.getAggregate("COUNT");
current.u_all_open = categoryCountOpen ;
}
})(current, previous);
//END BUSINESS RULE
// Do not run any other business rules
gr.setWorkflow(false);
// Update silently (no audit or metadata updates)
gr.autoSysFields(false);
// Update record even if no changes
gr.setForceUpdate(true);
// Update the record
current.update();
}