How to fix it

  1. Navigate to System Definition > Business Rules and filter by your affected table name in the Table field.
  2. Identify Business Rules with When set to 'before' or 'after' and Active = true. Open each one that could be involved in the loop.
  3. For any Business Rule that updates the current record, add current.setWorkflow(false); before calling current.update() in the Script field.
  4. Add field-level conditions to prevent unnecessary triggers. In the Condition field, add checks like current.field_name.changes() to only fire when specific fields change.
  5. For GlideRecord operations in Business Rules, add gr.setWorkflow(false); before gr.update() calls where gr is your GlideRecord object.
  6. 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;
  7. 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); }
  8. 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.

  1. If the issue persists, temporarily deactivate suspicious Business Rules one by one by setting Active = false until 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.