SlideShare a Scribd company logo
1 of 33
Download to read offline
Introduction to Apex
for Programmers
March 27, 2014
#forcewebinar
Safe Harbor
Safe 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 intellectual property and other litigation, risks associated with
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-Q for the most recent fiscal quarter ended July 31, 2012. This 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
Joshua
Birk
Developer Evangelist
@joshbirk
LeeAnne
Templeman
Developer Evangelist
@leeanndroid
#forcewebinar
Follow Developer Force for the Latest News
@forcedotcom / #forcewebinar
Developer Force – Force.com Community
Developer Force
Developer Force Group
+Developer Force – Force.com Community
#forcewebinar
Have Questions?
§  We have an expert support team at the ready to answer your questions
during the webinar.
§  Ask your questions via the GoToWebinar Questions Pane.
§  The speaker(s) will chose top questions to answer live at the end of the
webinar.
§  Please post your questions as we go along!
§  Only post your question once; we’ll get to it as we go down the list.
#forcewebinar
Introduction to Apex
§  What is Apex?
§  Developing in your browser
§  Apex Controllers
§  Apex Triggers
§  Other Apex Use Cases
#forcewebinar
Declarative Apps
#forcewebinar
Declarative and Programmatic
Declarative Programmatic
Visualforce Pages
Visualforce Components
Apex Controllers
Apex Triggers
Metadata API
REST API
Bulk API
Workflows
Validation Rules
Approval Processes
Objects
Fields
Relationships
Page Layouts
Record Types
User
Interface
Business
Logic
Data
Model
#forcewebinar
Apex
#forcewebinar
Introduction to Apex
Chapter 1:
§  Object-Oriented Language
§  Dot Notation Syntax
§  Developed, Compiled and Deployed in the Cloud
§  “First Class” Citizen on the Platform
#forcewebinar
Every Object, Every Field: Apex and Visualforce Enabled
Visualforce Pages
Visualforce Components
Apex Controllers
Apex Triggers
Custom UI
Custom Logic
#forcewebinar
Apex Class Structure
Chapter 1:
public with sharing class myControllerExtension implements Util {



private final Account acct;

public Contact newContact {get; set;}

public myControllerExtension(ApexPages.StandardController stdController) {

this.acct = (Account)stdController.getRecord();

}



public PageReference associateNewContact(Id cid) {

newContact = [SELECT Id, Account from Contact WHERE Id =: cid LIMIT 1];

newContact.Account = acct;

update newContact;

}

}

Class and Interface based
Scoped Variables
Inline SOQL
Inline DML
þ
þ
þ
þ
#forcewebinar
Developer Console
•  Browser Based
•  Create and Edit Classes
•  Create and Edit Triggers
•  Run Unit Tests
•  Review Debug Logs
#forcewebinar
Apex Controllers
•  Logic for User Interfaces
•  Custom Controllers or Extensions
•  Transport via:
•  Viewstate
•  JavaScript
#forcewebinar
Interacting with Apex
Annotated Apex methods exposed to JavaScript
Visualforce Forms
Visualforce component bound to an Apex Method
JavaScript Remoting
#forcewebinar
Apex Triggers
§  Event Based Logic
§  Associated with Object Types
§  Before or After:
§  Insert
§  Update
§  Delete
§  Undelete
#forcewebinar
Controlling Flow
trigger LineItemTrigger on Line_Item__c (before insert,	
	 	 	 	 	 	 	 	 	
	 	 	before update) { 



//separate before and after 	
if(Trigger.isBefore) {



//separate events
if(Trigger.isInsert) {	
	 	 System.debug(‘BEFORE INSERT’);	
	 	 	
	 	 DelegateClass.performLogic(Trigger.new);
#forcewebinar
Controlling Flow
trigger LineItemTrigger on Line_Item__c (before insert,	
	 	 	 	 	 	 	 	 	
	 	 	before update) { 



//separate before and after 	
if(Trigger.isBefore) {



//separate events
if(Trigger.isInsert) {	
	 	 System.debug(‘BEFORE INSERT’);	
	 	 	
	 	 DelegateClass.performLogic(Trigger.new);
#forcewebinar
Static Flags
public with sharing class AccUpdatesControl {

// This class is used to set flag to prevent multiple calls

public static boolean calledOnce = false;



public static boolean ProdUpdateTrigger = false;



}
#forcewebinar
Chatter Triggers
trigger AddRegexTrigger on Blacklisted_Word__c (before insert,
before update) {



for (Blacklisted_Word__c f : trigger.new)

{

if(f.Custom_Expression__c != NULL)

{

f.Word__c = '';

f.Match_Whole_Words_Only__c = false;

f.RegexValue__c = f.Custom_Expression__c;

}

}

}
#forcewebinar
Scheduled Apex
#forcewebinar
Schedulable Interface
global with sharing class WarehouseUtil implements Schedulable
{



//General constructor

global WarehouseUtil() {}



//Scheduled execute

global void execute(SchedulableContext ctx) {

//Use static method for checking dated invoices

WarehouseUtil.checkForDatedInvoices(); 

}
#forcewebinar
Schedulable Interface
System.schedule('testSchedule','0 0 13 * * ?',	
	 	new WarehouseUtil());



Via Apex
Via Web UI
#forcewebinar
Batch Apex
#forcewebinar
Batchable Interface
global with sharing class WarehouseUtil 	
	 	implements Database.Batchable<sObject> {



//Batch execute interface

global Database.QueryLocator start(Database.BatchableContext B
//Start on next context

}



global void execute(Database.BatchableContext BC, 	
	 	 	 	 	 	 	 List<sObject> scop
//Execute on current scope

}



global void finish(Database.BatchableContext BC) { 

//Finish and clean up context

}

#forcewebinar
Apex Endpoints
#forcewebinar
Apex REST
@RestResource(urlMapping='/CaseManagement/v1/*')

global with sharing class CaseMgmtService

{



@HttpPost

global static String attachPic(){

RestRequest req = RestContext.request;

RestResponse res = Restcontext.response;

Id caseId =
req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);

Blob picture = req.requestBody;

Attachment a = new Attachment (ParentId = caseId,

Body = picture,

ContentType = 'image/
#forcewebinar
Unit Testing
•  Declare Classes/Code as Test
•  isTest Annotation
•  testmethod keyword
•  Default data scope is test only
•  75% coverage required
#forcewebinar
Governor Limits
•  System Level Limits
•  Examples include:
•  150 DML calls
•  10 callouts
•  More in the Apex Workbook
•  Chapter 3, Tutorial #13
#forcewebinar
Bulkify Logic
// For loop to iterate through all the queried Account records !
for(Account a: accountsWithContacts){!
// Use the child relationships dot syntax to access the related Contacts!
for(Contact c: a.Contacts){!
!contactsToUpdate.add(c);!
} !
}!
!
//Now outside the FOR Loop, perform a single Update DML statement. !
update contactsToUpdate; !
!
http://wiki.developerforce.com/page/Apex_Code_Best_Practices
#forcewebinar
Recap
§  What is Apex?
§  Developing in your browser
§  Apex Controllers
§  Apex Triggers
§  Other Apex Use Cases
#forcewebinar
Resources
§  Your Developer Edition
–  http://developer.force.com/join
§  Force.com Workbook
–  http://developer.force.com/workbooks
§  Apex Workbook
–  http://developer.force.com/workbooks
Q & A
#forcewebinar
Joshua
Birk
Developer Evangelist
@joshbirk
LeeAnne
Templeman
Developer Evangelist
@leeanndroid

More Related Content

What's hot

Spring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview WebinarSpring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview Webinar
Salesforce Developers
 
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Yury Bondarau
 
Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1
Amit Sharma
 
Force.com migration utility
Force.com migration utilityForce.com migration utility
Force.com migration utility
Amit Sharma
 
User and group security migration
User and group security migrationUser and group security migration
User and group security migration
Amit Sharma
 

What's hot (20)

10 Principles of Apex Testing
10 Principles of Apex Testing10 Principles of Apex Testing
10 Principles of Apex Testing
 
Spring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview WebinarSpring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview Webinar
 
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
 
Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1
 
Deep Dive into Apex Triggers
Deep Dive into Apex TriggersDeep Dive into Apex Triggers
Deep Dive into Apex Triggers
 
Secure Salesforce: Common Secure Coding Mistakes
Secure Salesforce: Common Secure Coding MistakesSecure Salesforce: Common Secure Coding Mistakes
Secure Salesforce: Common Secure Coding Mistakes
 
sf tools from community
sf tools from communitysf tools from community
sf tools from community
 
Lightning Connect Custom Adapters: Connecting Anything with Salesforce
Lightning Connect Custom Adapters: Connecting Anything with SalesforceLightning Connect Custom Adapters: Connecting Anything with Salesforce
Lightning Connect Custom Adapters: Connecting Anything with Salesforce
 
Getting Started With Apex REST Services
Getting Started With Apex REST ServicesGetting Started With Apex REST Services
Getting Started With Apex REST Services
 
Mastering the Lightning Framework - Part 1
Mastering the Lightning Framework - Part 1Mastering the Lightning Framework - Part 1
Mastering the Lightning Framework - Part 1
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base Components
 
Best Practices for Lightning Apps
Best Practices for Lightning AppsBest Practices for Lightning Apps
Best Practices for Lightning Apps
 
Mds cloud saturday 2015 salesforce intro
Mds cloud saturday 2015 salesforce introMds cloud saturday 2015 salesforce intro
Mds cloud saturday 2015 salesforce intro
 
Lightning components performance best practices
Lightning components performance best practicesLightning components performance best practices
Lightning components performance best practices
 
Salesforce API Series: Integrating Applications with Force.com Webinar
Salesforce API Series: Integrating Applications with Force.com WebinarSalesforce API Series: Integrating Applications with Force.com Webinar
Salesforce API Series: Integrating Applications with Force.com Webinar
 
Introduction to Visualforce
Introduction to VisualforceIntroduction to Visualforce
Introduction to Visualforce
 
Abap proxies
Abap proxiesAbap proxies
Abap proxies
 
Force.com migration utility
Force.com migration utilityForce.com migration utility
Force.com migration utility
 
Salesforce API Series: Release Management with the Metadata API webinar
Salesforce API Series: Release Management with the Metadata API webinarSalesforce API Series: Release Management with the Metadata API webinar
Salesforce API Series: Release Management with the Metadata API webinar
 
User and group security migration
User and group security migrationUser and group security migration
User and group security migration
 

Viewers also liked

Introduction to apex code
Introduction to apex codeIntroduction to apex code
Introduction to apex code
EdwinOstos
 
Apex code-fundamentals
Apex code-fundamentalsApex code-fundamentals
Apex code-fundamentals
Amit Sharma
 
Alt tab - better apex tabs
Alt tab - better apex tabsAlt tab - better apex tabs
Alt tab - better apex tabs
Enkitec
 
Apex - How to create a master detail form
Apex - How to create a master detail formApex - How to create a master detail form
Apex - How to create a master detail form
Viveka Solutions
 
Apex for Admins: Beyond the Basics
Apex for Admins: Beyond the BasicsApex for Admins: Beyond the Basics
Apex for Admins: Beyond the Basics
Salesforce Developers
 
Visualforce for the Salesforce1 Platform
Visualforce for the Salesforce1 PlatformVisualforce for the Salesforce1 Platform
Visualforce for the Salesforce1 Platform
sg8002
 
Coding the Salesforce1 Platform
Coding the Salesforce1 PlatformCoding the Salesforce1 Platform
Coding the Salesforce1 Platform
sg8002
 

Viewers also liked (20)

Introduction to apex code
Introduction to apex codeIntroduction to apex code
Introduction to apex code
 
Introduction to Apex for Developers
Introduction to Apex for DevelopersIntroduction to Apex for Developers
Introduction to Apex for Developers
 
Apex code-fundamentals
Apex code-fundamentalsApex code-fundamentals
Apex code-fundamentals
 
Introduction to Apache Apex
Introduction to Apache ApexIntroduction to Apache Apex
Introduction to Apache Apex
 
Salesforce Presentation
Salesforce PresentationSalesforce Presentation
Salesforce Presentation
 
Alt tab - better apex tabs
Alt tab - better apex tabsAlt tab - better apex tabs
Alt tab - better apex tabs
 
High Reliability DML and Concurrency Design Patterns for Apex
High Reliability DML and Concurrency Design Patterns for ApexHigh Reliability DML and Concurrency Design Patterns for Apex
High Reliability DML and Concurrency Design Patterns for Apex
 
APEX navigation concepts
APEX navigation conceptsAPEX navigation concepts
APEX navigation concepts
 
Apex - How to create a master detail form
Apex - How to create a master detail formApex - How to create a master detail form
Apex - How to create a master detail form
 
Atl elevate programmatic developer slides
Atl elevate programmatic developer slidesAtl elevate programmatic developer slides
Atl elevate programmatic developer slides
 
Triggers for Admins: A Five-step Framework for Creating Triggers
Triggers for Admins: A Five-step Framework for Creating TriggersTriggers for Admins: A Five-step Framework for Creating Triggers
Triggers for Admins: A Five-step Framework for Creating Triggers
 
Interview questions
Interview   questionsInterview   questions
Interview questions
 
Hands-On Workshop: Introduction to Development on Force.com for Developers
Hands-On Workshop: Introduction to Development on Force.com for DevelopersHands-On Workshop: Introduction to Development on Force.com for Developers
Hands-On Workshop: Introduction to Development on Force.com for Developers
 
Apex for Admins: Beyond the Basics
Apex for Admins: Beyond the BasicsApex for Admins: Beyond the Basics
Apex for Admins: Beyond the Basics
 
Workflow in Salesforce
Workflow in SalesforceWorkflow in Salesforce
Workflow in Salesforce
 
Visualforce for the Salesforce1 Platform
Visualforce for the Salesforce1 PlatformVisualforce for the Salesforce1 Platform
Visualforce for the Salesforce1 Platform
 
Coding the Salesforce1 Platform
Coding the Salesforce1 PlatformCoding the Salesforce1 Platform
Coding the Salesforce1 Platform
 
Salesforce Developer Workshop for GDF Suez Hackathon
Salesforce Developer Workshop for GDF Suez HackathonSalesforce Developer Workshop for GDF Suez Hackathon
Salesforce Developer Workshop for GDF Suez Hackathon
 
How to Get Started with Salesforce Lightning
How to Get Started with Salesforce LightningHow to Get Started with Salesforce Lightning
How to Get Started with Salesforce Lightning
 
What you need to know on Force.com in 10 slides
What you need to know on Force.com in 10 slidesWhat you need to know on Force.com in 10 slides
What you need to know on Force.com in 10 slides
 

Similar to Intro to Apex Programmers

Visualforce: Using ActionFunction vs. RemoteAction
Visualforce: Using ActionFunction vs. RemoteActionVisualforce: Using ActionFunction vs. RemoteAction
Visualforce: Using ActionFunction vs. RemoteAction
Salesforce Developers
 
Building Command-line Tools with the Tooling API
Building Command-line Tools with the Tooling APIBuilding Command-line Tools with the Tooling API
Building Command-line Tools with the Tooling API
Jeff Douglas
 

Similar to Intro to Apex Programmers (20)

Intro to Apex - Salesforce Force Friday Webinar
Intro to Apex - Salesforce Force Friday Webinar Intro to Apex - Salesforce Force Friday Webinar
Intro to Apex - Salesforce Force Friday Webinar
 
Force.com Friday : Intro to Apex
Force.com Friday : Intro to Apex Force.com Friday : Intro to Apex
Force.com Friday : Intro to Apex
 
Salesforce1 Platform for programmers
Salesforce1 Platform for programmersSalesforce1 Platform for programmers
Salesforce1 Platform for programmers
 
Force.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.comForce.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.com
 
Dive Deep into Apex: Advanced Apex!
Dive Deep into Apex: Advanced Apex! Dive Deep into Apex: Advanced Apex!
Dive Deep into Apex: Advanced Apex!
 
Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2
 
Advanced Apex Webinar
Advanced Apex WebinarAdvanced Apex Webinar
Advanced Apex Webinar
 
Summer '13 Developer Preview Webinar
Summer '13 Developer Preview WebinarSummer '13 Developer Preview Webinar
Summer '13 Developer Preview Webinar
 
Winter 14 Release Developer Preview
Winter 14 Release Developer PreviewWinter 14 Release Developer Preview
Winter 14 Release Developer Preview
 
Force.com Friday - Intro to Visualforce
Force.com Friday - Intro to VisualforceForce.com Friday - Intro to Visualforce
Force.com Friday - Intro to Visualforce
 
Visualforce Hack for Junction Objects
Visualforce Hack for Junction ObjectsVisualforce Hack for Junction Objects
Visualforce Hack for Junction Objects
 
Lightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René WinkelmeyerLightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René Winkelmeyer
 
Force.com Friday : Intro to Visualforce
Force.com Friday : Intro to VisualforceForce.com Friday : Intro to Visualforce
Force.com Friday : Intro to Visualforce
 
JavaScript Integration with Visualforce
JavaScript Integration with VisualforceJavaScript Integration with Visualforce
JavaScript Integration with Visualforce
 
ELEVATE Paris
ELEVATE ParisELEVATE Paris
ELEVATE Paris
 
Visualforce: Using ActionFunction vs. RemoteAction
Visualforce: Using ActionFunction vs. RemoteActionVisualforce: Using ActionFunction vs. RemoteAction
Visualforce: Using ActionFunction vs. RemoteAction
 
How Force.com developers do more in less time
How Force.com developers do more in less timeHow Force.com developers do more in less time
How Force.com developers do more in less time
 
Building Visualforce Custom Events Handlers
Building Visualforce Custom Events HandlersBuilding Visualforce Custom Events Handlers
Building Visualforce Custom Events Handlers
 
Quit Jesting and Test your Lightning Web Components, Phillipe Ozil
Quit Jesting and Test your Lightning Web Components, Phillipe OzilQuit Jesting and Test your Lightning Web Components, Phillipe Ozil
Quit Jesting and Test your Lightning Web Components, Phillipe Ozil
 
Building Command-line Tools with the Tooling API
Building Command-line Tools with the Tooling APIBuilding Command-line Tools with the Tooling API
Building Command-line Tools with the Tooling API
 

More from Salesforce Developers

More from Salesforce Developers (20)

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component Performance
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer Highlights
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX India
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web Components
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web Components
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer Highlights
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and Testing
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura Interoperability
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce data
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An Introduction
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCP
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in Salesforce
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data Capture
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DX
 
Get Into Lightning Flow Development
Get Into Lightning Flow DevelopmentGet Into Lightning Flow Development
Get Into Lightning Flow Development
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS Connect
 
Introduction to MuleSoft
Introduction to MuleSoftIntroduction to MuleSoft
Introduction to MuleSoft
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

Intro to Apex Programmers

  • 1. Introduction to Apex for Programmers March 27, 2014
  • 2. #forcewebinar Safe Harbor Safe 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 intellectual property and other litigation, risks associated with 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-Q for the most recent fiscal quarter ended July 31, 2012. This 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.
  • 4. #forcewebinar Follow Developer Force for the Latest News @forcedotcom / #forcewebinar Developer Force – Force.com Community Developer Force Developer Force Group +Developer Force – Force.com Community
  • 5. #forcewebinar Have Questions? §  We have an expert support team at the ready to answer your questions during the webinar. §  Ask your questions via the GoToWebinar Questions Pane. §  The speaker(s) will chose top questions to answer live at the end of the webinar. §  Please post your questions as we go along! §  Only post your question once; we’ll get to it as we go down the list.
  • 6. #forcewebinar Introduction to Apex §  What is Apex? §  Developing in your browser §  Apex Controllers §  Apex Triggers §  Other Apex Use Cases
  • 8. #forcewebinar Declarative and Programmatic Declarative Programmatic Visualforce Pages Visualforce Components Apex Controllers Apex Triggers Metadata API REST API Bulk API Workflows Validation Rules Approval Processes Objects Fields Relationships Page Layouts Record Types User Interface Business Logic Data Model
  • 10. #forcewebinar Introduction to Apex Chapter 1: §  Object-Oriented Language §  Dot Notation Syntax §  Developed, Compiled and Deployed in the Cloud §  “First Class” Citizen on the Platform
  • 11. #forcewebinar Every Object, Every Field: Apex and Visualforce Enabled Visualforce Pages Visualforce Components Apex Controllers Apex Triggers Custom UI Custom Logic
  • 12. #forcewebinar Apex Class Structure Chapter 1: public with sharing class myControllerExtension implements Util {
 
 private final Account acct;
 public Contact newContact {get; set;}
 public myControllerExtension(ApexPages.StandardController stdController) {
 this.acct = (Account)stdController.getRecord();
 }
 
 public PageReference associateNewContact(Id cid) {
 newContact = [SELECT Id, Account from Contact WHERE Id =: cid LIMIT 1];
 newContact.Account = acct;
 update newContact;
 }
 }
 Class and Interface based Scoped Variables Inline SOQL Inline DML þ þ þ þ
  • 13. #forcewebinar Developer Console •  Browser Based •  Create and Edit Classes •  Create and Edit Triggers •  Run Unit Tests •  Review Debug Logs
  • 14. #forcewebinar Apex Controllers •  Logic for User Interfaces •  Custom Controllers or Extensions •  Transport via: •  Viewstate •  JavaScript
  • 15. #forcewebinar Interacting with Apex Annotated Apex methods exposed to JavaScript Visualforce Forms Visualforce component bound to an Apex Method JavaScript Remoting
  • 16. #forcewebinar Apex Triggers §  Event Based Logic §  Associated with Object Types §  Before or After: §  Insert §  Update §  Delete §  Undelete
  • 17. #forcewebinar Controlling Flow trigger LineItemTrigger on Line_Item__c (before insert, before update) { 
 
 //separate before and after if(Trigger.isBefore) {
 
 //separate events if(Trigger.isInsert) { System.debug(‘BEFORE INSERT’); DelegateClass.performLogic(Trigger.new);
  • 18. #forcewebinar Controlling Flow trigger LineItemTrigger on Line_Item__c (before insert, before update) { 
 
 //separate before and after if(Trigger.isBefore) {
 
 //separate events if(Trigger.isInsert) { System.debug(‘BEFORE INSERT’); DelegateClass.performLogic(Trigger.new);
  • 19. #forcewebinar Static Flags public with sharing class AccUpdatesControl {
 // This class is used to set flag to prevent multiple calls
 public static boolean calledOnce = false;
 
 public static boolean ProdUpdateTrigger = false;
 
 }
  • 20. #forcewebinar Chatter Triggers trigger AddRegexTrigger on Blacklisted_Word__c (before insert, before update) {
 
 for (Blacklisted_Word__c f : trigger.new)
 {
 if(f.Custom_Expression__c != NULL)
 {
 f.Word__c = '';
 f.Match_Whole_Words_Only__c = false;
 f.RegexValue__c = f.Custom_Expression__c;
 }
 }
 }
  • 22. #forcewebinar Schedulable Interface global with sharing class WarehouseUtil implements Schedulable {
 
 //General constructor
 global WarehouseUtil() {}
 
 //Scheduled execute
 global void execute(SchedulableContext ctx) {
 //Use static method for checking dated invoices
 WarehouseUtil.checkForDatedInvoices(); 
 }
  • 23. #forcewebinar Schedulable Interface System.schedule('testSchedule','0 0 13 * * ?', new WarehouseUtil());
 
 Via Apex Via Web UI
  • 25. #forcewebinar Batchable Interface global with sharing class WarehouseUtil implements Database.Batchable<sObject> {
 
 //Batch execute interface
 global Database.QueryLocator start(Database.BatchableContext B //Start on next context
 }
 
 global void execute(Database.BatchableContext BC, List<sObject> scop //Execute on current scope
 }
 
 global void finish(Database.BatchableContext BC) { 
 //Finish and clean up context
 }

  • 27. #forcewebinar Apex REST @RestResource(urlMapping='/CaseManagement/v1/*')
 global with sharing class CaseMgmtService
 {
 
 @HttpPost
 global static String attachPic(){
 RestRequest req = RestContext.request;
 RestResponse res = Restcontext.response;
 Id caseId = req.requestURI.substring(req.requestURI.lastIndexOf('/')+1);
 Blob picture = req.requestBody;
 Attachment a = new Attachment (ParentId = caseId,
 Body = picture,
 ContentType = 'image/
  • 28. #forcewebinar Unit Testing •  Declare Classes/Code as Test •  isTest Annotation •  testmethod keyword •  Default data scope is test only •  75% coverage required
  • 29. #forcewebinar Governor Limits •  System Level Limits •  Examples include: •  150 DML calls •  10 callouts •  More in the Apex Workbook •  Chapter 3, Tutorial #13
  • 30. #forcewebinar Bulkify Logic // For loop to iterate through all the queried Account records ! for(Account a: accountsWithContacts){! // Use the child relationships dot syntax to access the related Contacts! for(Contact c: a.Contacts){! !contactsToUpdate.add(c);! } ! }! ! //Now outside the FOR Loop, perform a single Update DML statement. ! update contactsToUpdate; ! ! http://wiki.developerforce.com/page/Apex_Code_Best_Practices
  • 31. #forcewebinar Recap §  What is Apex? §  Developing in your browser §  Apex Controllers §  Apex Triggers §  Other Apex Use Cases
  • 32. #forcewebinar Resources §  Your Developer Edition –  http://developer.force.com/join §  Force.com Workbook –  http://developer.force.com/workbooks §  Apex Workbook –  http://developer.force.com/workbooks
  • 33. Q & A #forcewebinar Joshua Birk Developer Evangelist @joshbirk LeeAnne Templeman Developer Evangelist @leeanndroid