Detecting Field Changes in Business Rules
A ServiceNow developer needs to implement a business rule that automatically sets the 'state' field to 'In Progress' when a user is assigned to an incident. The rule should run only when the 'assigned_to' field changes, and should not run on any other updates. Which condition type and condition script should be used?
Quick Answer
This combination is correct because it satisfies both parts of the requirement independently rather than approximating one behavior that only partially covers the need. Setting the rule to run 'on update' rather than 'on insert' or both ensures it never fires on a brand-new incident, only on records already being modified, which matches the requirement that this should trigger specifically when someone is assigned. From there, current.assigned_to.changes() adds a second layer of precision: this method returns true only when the assigned_to field specifically was modified during that update transaction, so if any other field changes without assigned_to being touched, the rule simply will not run. Without the changes() check, an 'on update' rule alone would fire on every update to the record regardless of which field changed, which is too broad and would incorrectly reset the state field constantly. The two settings work together, one narrowing by operation type and the other narrowing by which field actually changed, to produce exactly the behavior described. Whenever a requirement specifies that logic should run only when a particular field is modified, and not on every update or on record creation, look for this pattern: an 'on update' business rule paired with a changes() condition on that specific field, the standard way to detect and react to a targeted field change in ServiceNow.
⚠ Common exam trap
Candidates often confuse 'changes()' with 'changed()' (which is not a valid method) or incorrectly assume that 'on update' alone without a field condition will run on any update, leading them to add unnecessary conditions like 'current.state.changes()' or choose the 'advanced' option.
Answer choices
Why each option matters
Answer the question above first, then reveal the full breakdown to understand why each option is right or wrong.
Correct answer & explanation
✓
Condition type: 'when to run' set to 'on update' with condition 'current.assigned_to.changes()'
The 'when to run' condition type set to 'on update' with the condition 'current.assigned_to.changes()' ensures the business rule triggers only when the 'assigned_to' field is updated, and not on insert or other field changes. The 'changes()' method returns true only when the specified field has been modified during the current transaction, which precisely meets the requirement.
Answer analysis
Option-by-option breakdown
For each option: why learners choose it and why it is or isn't the right answer here.
- ✓
Condition type: 'when to run' set to 'on update' with condition 'current.assigned_to.changes()'
Why this is correct
Correct: condition type 'when to run' with 'on update' and the condition script 'current.assigned_to.changes()' ensures it only runs on update when assigned_to changes.
- ✗
Condition type: 'when to run' set to 'on update' with condition 'current.assigned_to.changes() || current.state.changes()'
Why it's wrong here
Adding '|| current.state.changes()' is unnecessary and could cause the rule to run when state changes but assigned_to does not.
- ✗
Condition type: 'when to run' set to 'on insert or update' with condition 'current.assigned_to.changes()'
Why it's wrong here
This would also run on insert, which is not desired.
- ✗
Condition type: 'advanced' with condition script 'current.assigned_to.changes()' and run on 'update'
Why it's wrong here
'advanced' condition type is used for a condition script that returns true/false, but the condition script 'current.assigned_to.changes()' already returns boolean; however, typical approach is to use 'when to run' with condition.
Go deeper
Related to this question
About these practice questions
This SNOW-CAD question is part of Courseiva's 481-question bank — original exam-style content with full explanations and wrong-answer analysis, never real exam questions or exam dumps. Learn why practice questions differ from exam dumps →
Same concept, more angles
1 more way this is tested on SNOW-CAD
These questions test the same concept from different angles. Work through them to make sure you can recognise it however the exam phrases it.
Variation 1. A developer writes a business rule that runs on after update. The script intends to send an email notification when the priority changes. Which method should be used to compare the previous and current values?
easy- A.current.getDisplayValue('priority') != previous.getDisplayValue('priority')
- ✓ B.current.priority.changes()
- C.current.changes()
- D.previous.priority != current.priority
Why B: The changes() method on a field object returns true if the field changed. Option B is correct. Option A checks if any field changed. Option C uses direct comparison but is not a method. Option D uses getDisplayValue which compares labels, not values.
JA
Written by Johnson Ajibi, MSc IT Security
Senior Network & Security Engineer · founder of Courseiva
This SNOW-CAD practice question is part of Courseiva's free ServiceNow certification practice question bank. Courseiva provides original exam-style practice questions with explanations, topic-based practice, mock exams, readiness tracking, and study analytics to help learners prepare for the SNOW-CAD exam.