How to fix it
- Navigate to
System Definition > Business Rulesand filter by your affected table name in the Table field. - Identify Business Rules with
Whenset to 'before' or 'after' andActive= true. Open each one that could be involved in the loop. - For any Business Rule that updates the current record, add
current.setWorkflow(false);before callingcurrent.update()in the Script field. - Add field-level conditions to prevent unnecessary triggers. In the
Conditionfield, add checks likecurrent.field_name.changes()to only fire when specific fields change. - For GlideRecord operations in Business Rules, add
gr.setWorkflow(false);beforegr.update()calls where gr is your GlideRecord object. - Add execution tracking for complex scenarios by adding this at the start of your Business Rule script:
if (gs.getProperty('sys.br.depth', 0) > 5) return; - Check for cascading updates between related records. If updating parent records from child Business Rules, add conditions like
if (!current.parent.nil()) { parent_gr.setWorkflow(false); } - Save all modified Business Rules and test by creating or updating a record of the affected type.
Enable Debug logging for Business Rules by going to System Logs > System Log > Module Logs and setting com.glide.script to Debug level. This will show you exactly which Business Rules are firing and in what order.
- If the issue persists, temporarily deactivate suspicious Business Rules one by one by setting
Active = falseuntil you identify the specific rule causing the loop.
Always use current.setWorkflow(false) before current.update() in Business Rules to prevent triggering other Business Rules, Workflows, and Notifications on that update operation.