Sunday 19 January 2020

Order of execution in Salesforce

We did one session in apex hours of How to become an Order of Execution Hero. In that session we did one deep drive in Salesforce Order of execution and covered some interview question on order of execution. Save Order of Execution is the most important factor in designing sustainable and scalable applications.
When you save a record with an insert, update, or upsert statement, Salesforce performs the following events in order. Here is cheat-sheet of Order of execution.

Order of Execution

  1. Loads Initial record.
  2. If the request came from a standard UI edit page, Salesforce runs system validation to check the record for page layout specific rules, field definition, Maximum field length.
  3. Executes  flows that make before-save update. (New Change in Winter 20)
  4. Executes all before triggers. 
  5. Runs most Custom validation.
  6. Executes duplicate rules. 
  7. Saves the record to the database, but doesn't commit yet. 
  8. Executes all after triggers. 
  9. Executes assignment rules. 
  10. Executes auto-response rules. 
  11. Executes workflow rules. 
  12. If there are workflow field updates, updates the record again.
  13. If workflow field updates introduced new duplicate field values, executes duplicate rules again. If the record was updated with workflow field updates, fires before update triggers and after update triggers one more time (and only one more time), in addition to standard validations. Custom validation rules are not run again.
  14. Executes processes and flow. 
  15. Executes escalation rules. 
  16. Executes entitlement rules. 
  17. If the record contains a roll-up summary field or is part of a cross-object workflow, performs calculations and updates the roll-up summary field in the parent record. Parent record goes through save procedure. 
  18. If the parent record is updated, and a grandparent record contains a roll-up summary field or is part of a cross-object workflow, performs calculations and updates the roll-up summary field in the grandparent record. Grandparent record goes through save procedure. 
  19. Executes Criteria Based Sharing evaluation. 
  20. Commits all DML operations to the database. 
  21. Executes all after-commit logic, such as sending email.

What is part of the after commit logic?

  1. All email sends
  2. Asynchronous Apex: @future methods
  3. Async Sharing Rule processing (for >25,000 records)
  4. Outbound Messages placed on queue
  5. Calculate Index, such as Search Index
  6. Render File Previews
  7. Publication of Platform Events (if configured)
NOTE: The order of execution isn’t guaranteed when having multiple triggers for the same object due to the same event. For example, if you have two before insert triggers for Case, and a new Case record is inserted that fires the two triggers, the order in which these triggers fire isn’t guaranteed.

Check this post for more detail Triggers and Order of Execution.

How deep is your knowledge of the Order of Execution ?

There's a lot more to know than triggers run before workflows. Dig deeper, understand the logic flow and your apps will scale better and run more reliably. Become an Order of Execution hero and walk away with an understanding of how to design robust apps optimized for scale and how to control recursion and remedy typical problems.  

What kind of issues did you experience ?

  • Unexpected Outcomes
    •  Missing or duplicate records
    •  Blank or “wrongly” populated fields
  • Hitting Limits
    •  CPU Time Limit Exception
    •  Too many SOQL Queries


Here is recording of our Apex Hour session.


 

Further Reading:

 https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm 


Thanks,
Amit Chaudhary

No comments:

Post a Comment