Skip to main content
SFDC Developers
Admin

Salesforce Validation Rules: A Developer's Guide

Vinay Vernekar · · 6 min read

Understanding Salesforce Validation Rules

Salesforce Validation Rules serve as a critical mechanism for enforcing data integrity. They allow administrators and developers to define specific criteria that user-entered or system-modified data must meet before a record can be saved. If the data fails to meet these criteria, the save operation is blocked, and a user-defined error message is displayed.

Core Functionality

At its core, a validation rule is a declarative tool that evaluates a logical condition. This condition returns either TRUE or FALSE.

  • If the condition evaluates to TRUE: The record cannot be saved. This indicates that the data violates the defined rule.
  • If the condition evaluates to FALSE: The record can be saved. This indicates that the data meets the rule's criteria.

It's important to note that Salesforce has limits on the number of active validation rules per org, varying by edition.

When to Use Validation Rules

Validation rules are primarily used to maintain the quality of data within Salesforce, covering both user input and system-generated changes.

  • User Input Data: Where users might make mistakes, overlook required fields, or enter data in an incorrect format. This is the most common use case.
  • System-Modified Records: Data changes triggered by imports, Apex triggers, integrations, or other automation processes must also adhere to validation rules. However, it's best practice for these automated processes to be designed to respect existing validation rules, rather than attempting to bypass them without explicit intent.

A classic example is ensuring a "Closed Lost Reason" is selected when an Opportunity stage is set to "Closed Lost." Without this rule, sales reps could mark an opportunity as Closed Lost without specifying why, hindering accurate reporting.

Limitations and Alternatives

Validation rules are scoped to the object on which they are created. They cannot inherently check data across related or cross-object records declaratively. For such scenarios, consider using Salesforce Flow's Custom Error component, which offers more advanced error handling capabilities.

Validation Rules vs. Required Fields

While both enforce data presence, they differ in scope and conditionality:

  • Required Fields: Enforce a field's completion universally. The field must be populated for the record to be created or updated.
  • Validation Rules: Offer conditional logic. A field might not be required universally but only under specific circumstances (e.g., "Closed Lost Reason" only required when Stage is "Closed Lost").

Creating a Validation Rule

Creating a validation rule involves three key components:

  1. Name and Description: A clear, concise name and a detailed description are crucial for documentation and future maintenance. The description should explain the rule's purpose, the data issues it prevents, and any relevant context.
  2. Error Condition Formula: This is the core logic that Salesforce evaluates. It's written using Salesforce's formula syntax. The key distinction from formula fields is that a TRUE result here signifies an error and blocks the save.
  3. Error Message: A user-friendly message that explains the error and guides the user on how to correct it.

Error Condition Formula Syntax and Functions

The "Error Condition Formula" defines the logic. It's essentially an expression that Salesforce evaluates. If the expression returns TRUE, the validation rule fires.

Key Formula Elements:

  • Insert Field: Use this to select fields from the object. Always use the Field API Name, not the Field Label (e.g., StageName instead of Stage).
  • Insert Operator: Standard mathematical and logical operators like +, -, *, /, AND, OR, &&, ||, =, <>, !, etc.
    • && (AND): Evaluates to TRUE if both conditions are TRUE.
    • || (OR): Evaluates to TRUE if at least one condition is TRUE.
  • Insert Selected Function: Provides a library of built-in functions:
    • ISBLANK(field): Returns TRUE if the specified field is empty.
    • ISPICKVAL(field, text_literal): Returns TRUE if a picklist field matches the specified text value.
    • TEXT(picklist_field): Converts a picklist value to its text representation, useful for comparisons or ISBLANK checks on picklists.
    • AND(logical_expression1, ...): Returns TRUE if all its arguments are TRUE.
    • OR(logical_expression1, ...): Returns TRUE if any of its arguments are TRUE.

Example: Closed Lost Reason Rule

  • Error Condition Formula:

    AND(ISPICKVAL(StageName, "Closed Lost"), ISBLANK(TEXT(LostReason__c)))
    

    Explanation: This formula returns TRUE if the StageName is "Closed Lost" AND the LostReason__c field is blank. This triggers the validation rule.

  • Error Message: "Please select a reason for closing the Opportunity as Lost."

  • Error Location: Above the LostReason__c field.

Check Syntax

Always use the "Check Syntax" button to validate your formula. Common errors include missing parentheses, misspelled field API names, or incorrect function usage.

Activating the Rule

After defining the name, formula, and message, check the "Active" box to enable the validation rule.

Advanced Concepts: Bypass Logic

While ideally, automation should respect validation rules, there are scenarios where bypassing is necessary. This can be managed through several methods:

1. Custom Checkbox Field on User Object

  • Step 1: Create a checkbox field (e.g., Bypass_Validation_Rules__c) on the User object.

  • Step 2: For users who need to bypass rules, check this box on their User record.

  • Step 3: Modify your validation rule formulas by appending && NOT(Bypass_Validation_Rules__c) to the existing logic. This ensures the rule only fires if the bypass checkbox is NOT checked.

    Example:

    AND(ISPICKVAL(StageName, "Closed Lost"), ISBLANK(TEXT(LostReason__c)), NOT(Bypass_Validation_Rules__c))
    

2. Using Custom Permissions and Permission Sets

This is a more scalable and manageable approach. Grant a specific custom permission (e.g., Bypass_Validation_Rules_Permission) via Permission Sets. In the validation rule, check for the existence of this permission.

3. Using Profiles

If users requiring bypass are all within the same profile, you can reference the profile directly using the $Profile global variable.

Example: To allow "System Administrator" profile users to bypass the rule:

AND(ISPICKVAL(StageName, "Closed Lost"), ISBLANK(TEXT(LostReason__c)), $Profile.Name <> "System Administrator")

This formula returns TRUE (and blocks the save) unless the user's profile name is not "System Administrator".

&& vs. AND(), || vs. OR()

  • && and || are generally used for simpler, more direct logical concatenations.
  • AND() and OR() are preferred for more complex rules, especially when using multiple conditions, as they improve readability through indentation and separate lines.

Both are functionally equivalent, and the choice often comes down to personal preference and rule complexity.

Key Takeaways

  • Validation Rules enforce data quality by defining criteria that must be met before a record can be saved.
  • A TRUE result in the error condition formula triggers the validation rule and blocks the save.
  • Use the "Insert Field" button and always refer to Field API Names.
  • Common functions include ISBLANK, ISPICKVAL, TEXT, AND, and OR.
  • Bypass logic can be implemented using custom user fields, custom permissions, or by referencing profiles.
  • Understand the difference between validation rules and required fields for optimal data management.

Share this article

Get weekly Salesforce dev tutorials in your inbox

Comments

Loading comments...

Leave a Comment

Trending Now