Trigger.isBefore 2 – Create Triggers with Context Variables – Triggers and Bulk Processing – Salesforce Certified Platform Developer I Study Guide

To avoid recursive triggers in Apex, you can implement the following approaches as in the following example:

\ 1.\ Static Boolean Variable: Create a static Boolean variable, and use it to track whether the trigger has already been executed. Set the variable to true before executing the trigger logic, and reset it to false after the logic is completed. Check the value of this variable at the beginning of the trigger to prevent recursion.

\ 2.\ Trigger Context Variables: Use the Trigger context variables, such as Trigger.isExecuting and Trigger.new, to control the execution of the trigger. By checking these variables, you can determine if the trigger is being executed for the first time or if it is being called recursively.

In this example, we’ll create a trigger on the Account object that updates the Description field. The static Boolean variable will be used to prevent recursion.

trigger AccountTrigger on Account (before update) {

  • Static Boolean variable to track trigger execution private static Boolean isExecuting = false;
  • Check if the trigger is already executing to avoid recursion if (isExecuting) {

return;

}

  • Set the trigger as executing to prevent recursion isExecuting = true;
  • Get the updated accounts

List<Account> updatedAccounts = Trigger.new;

  • Update the Description field for each account for (Account acc : updatedAccounts) {

acc.Description = ‘Trigger Updated’;

}

  • Reset the trigger execution status isExecuting = false;

}

•\ Static Boolean Variable is used to track whether the trigger is

currently executing. It’s marked as static so that its value persists

across trigger invocations.

•\ The purpose of this variable is to prevent recursion. If the trigger is

already executing, it skips the logic to avoid an infinite loop.

•\ The trigger checks if it’s already executing (if (isExecuting)). If it is,

the trigger returns early without performing any further actions. This

check helps to prevent recursive trigger execution.

•\ The trigger then proceeds to process the records in Trigger.new. In

this case, it iterates over the updated Account records.

•\ For each Account in the trigger, it sets the Description field to

“Trigger Updated”. This is a simple example of modifying the records

before they are saved to the database.

•\ After processing the records, the trigger resets the isExecuting

variable to false. This step is important to allow future trigger

executions to proceed.

It’s important to carefully design and test your triggers to avoid recursion and ensure proper functionality. By implementing these practices, you can prevent recursive triggers and maintain the integrity and performance of your Salesforce application. Then usage of a single trigger per object is a best practice in Salesforce Apex because it promotes code organization, maintainability, and avoids unnecessary complexity. A single trigger ensures that your logic executes in a predictable sequence, which can be important for enforcing business rules.