deep dive into apex triggers
TRANSCRIPT
Deep Dive into Apex TriggersJune 18, 2015
#forcewebinar
Safe HarborSafe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
#forcewebinar
Speakers
Kartik ViswanadhaDirector, OpFocusSalesforce MVP@logontokartik
#forcewebinar
Go Social!
Salesforce Developers
+Salesforce Developers
Salesforce Developers
Salesforce Developers The video will be posted to YouTube & the webinar recappage (same URL as registration).
This webinar is being recorded!
@salesforcedevs / #forcewebinar
#forcewebinar
Pre-requisites
• Basic understanding of Apex Triggers and Apex Code.
• Basic understanding of Salesforce Platform in general
#forcewebinar
What is a Trigger?
Which of the below definitions is right for our context?
#forcewebinar
What is a Trigger in Database terms?
A trigger is a procedure that initiates an action (i.e., fires an action) when an event occurs.
Insert
Update
Delete
Undelete
#forcewebinar
Trigger Order of Execution
B A
Save State Commit
System Validation Rules
Apex Before Triggers
Custom Validation Rules
Apex After Triggers
Assignment Rules
Workflow Rules
Escalations
Rollup Summary Fields
efore fter
#forcewebinar
Trigger Contexts
B A
Save State Commit
• Trigger.new• Trigger.old• Trigger.newMap• Trigger.oldMap
• Trigger.isBefore• Trigger.isAfter• Trigger.isExecuting• Trigger.size
• Trigger.isInsert• Trigger.isUpdate• Trigger.isDelete• Trigger.isUndelete
fterefore
#forcewebinar
Why are Triggers hard and confusing?
• They are all Code
• They are shared across the instance
• They execute with everything else
(Workflows, Flows, Process Builder)
• They can cause Recursion
• They need to be Bulkified
#forcewebinar
Why do we need Triggers?
• Use triggers to perform complex tasks
that do not need user intervention.
• Execute Business rules without
worrying about security
• Examples• Send Data to External System on Save
• Update related and non related records
• Assignments based on business rules.
#forcewebinar
Considerations for Trigger Management
• Discuss with Architect or other Developers about
best practices
• Avoid writing Triggers when not needed
• Build Logical Trigger Switches
• Keep Logic outside of Triggers
• Consider having only one Trigger per Object
• Follow Apex Best Practices
• Build good Test classes
Best Practice Discuss with Architector Other Developers
#forcewebinar
Best Practice
• Know the Standards, Naming
Conventions
• Discuss your approach with
others in your team
• If you don’t know, ASK
Best Practice Avoid Writing Triggers
when not needed
#forcewebinar
Use Case
• Create a Task when Lead Status
or Priority Changes
• Update a field “Next Step” on
Opportunity when Opportunity is
Closed Won
#forcewebinar
Best Practice
• Consider using Workflow rules,
Flows, Process Builder or other
point & click tools before
considering building an Apex
Trigger
• Do not over-architect for simple
things
Best Practice Trigger Switches
#forcewebinar
Use case
• During a massive data load
exercise I do not want the
triggers to run.
• The similar upload is scheduled
on a weekly basis
• I do not want triggers to run when
Integration User is sending data.
#forcewebinar
Best Practice
• Control the execution of Triggers
by using Custom Settings.
• Provide configurations wherever
possible to allow admin /
business users to control Trigger
Execution.
Best Practice Keep Logic outside of Triggers
#forcewebinar
Use case
• A Trigger on Task that is sending an email to a Group when Task status is changed or when it becomes overdue
• User needs to have ability to manually send an email to the Group for selected records.
#forcewebinar
Best Practice
• Make the Triggers Logic-less • Use Handler/Helper classes that perform the
core business logic that can be reusable across the organization.
Trigger Apex Class
Handler
Controller
Best Practice One Trigger per Object
#forcewebinar
Use case
• A lead has 20+
Workflow rules
• 10 different Triggers
on Lead
• Assignment Rules
• Flows
#forcewebinar
Best Practice
• Control the execution order
• Debugging simplified
• Separation of Concerns
• Structured and Organized
One Trigger to rule them all
Best Practice Good Test Classes
#forcewebinar
Best Practice
• Write tests for Bulk
Data, Always
• Test all your business
scenarios
• Use asserts, lavishly
Trigger Framework
#forcewebinar
Trigger Framework
• Design Patterns
• Observer/Listener
• Domain Model
• Factory Pattern
• Trigger Templates
Debugging Techniques
#forcewebinar
Developer Console
• Stack Tree
• Execution Overview
• Execution Logs
• Profiling
#forcewebinar
Logging Techniques
• Custom Log Class
• Push & Pop
• Custom Object Tracking
#forcewebinar
References
• https://developer.salesforce.com/page/Apex_Code_Best_Practices
• https://developer.salesforce.com/page/Apex_Enterprise_Patterns_-_Domain_Layer
• https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode
/
• https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigger_Best_Practices
#forcewebinarChallenge Yourself! http://developer.salesforce.com/trailhead
• Interactive learning paths• Earn badges and points• Declarative and Programmatic
BRAND NEW! Introducing Trailhead
#forcewebinarChallenge Yourself! http://developer.salesforce.com/trailhead
Trailhead – Apex Triggers
#forcewebinar
New App Builders
http://www.udacity.com/salesforcehttp://ccoenraets.github.io/salesforce-
developer-workshop
Developer WorkshopFast Track Tutorial for
Experienced Developers
Experienced App Builders
More Free Online Tutorials
#forcewebinar
Upcoming Webinar
Building Mobile Apps onSalesforce Platform with Mobile SDK
June 24, 2015
https://developer.salesforce.com/calendar
#forcewebinar
Survey
Your feedback is crucial to the successof our webinar programs. Thank you!
http://bit.ly/1HM3hKo
Q & A
#forcewebinar
Jitendra ZaaSalesforce MVP@jitendrazaa
Abhinav GuptaSalesforce MVP@abhinavguptas
Q & A
Thank You