Coding the Cloud: An Introduction to Apex Code - PowerPoint PPT Presentation

1 / 31
About This Presentation
Title:

Coding the Cloud: An Introduction to Apex Code

Description:

Create inboundEmailResult object for returning the result of the Force.com Email Service ... Sign up for free Developer Edition. Training Courses & Certification ... – PowerPoint PPT presentation

Number of Views:791
Avg rating:5.0/5.0
Slides: 32
Provided by: bodi52
Category:

less

Transcript and Presenter's Notes

Title: Coding the Cloud: An Introduction to Apex Code


1
Coding the Cloud An Introduction to Apex Code
Force.com Platform Fundamentals
  • Andrew Albert, salesforce.com

2
Safe Harbor Statement
Safe harbor statement under the Private
Securities Litigation Reform Act of 1995 This
presentation may contain forward-looking
statements including but not limited to
statements concerning the potential market for
our existing service offerings and future
offerings. All of our forward looking statements
involve risks, uncertainties and assumptions. If
any such risks or uncertainties materialize or if
any of the assumptions proves incorrect, our
results could differ materially from the results
expressed or implied by the forward-looking
statements we make. The risks and uncertainties
referred to above include - but are not limited
to - risks associated with possible fluctuations
in our operating results and cash flows, rate of
growth and anticipated revenue run rate, errors,
interruptions or delays in our service or our Web
hosting, our new business model, our history of
operating losses, the possibility that we will
not remain profitable, breach of our security
measures, the emerging market in which we
operate, our relatively limited operating
history, our ability to hire, retain and motivate
our employees and manage our growth, competition,
our ability to continue to release and gain
customer acceptance of new and improved versions
of our service, customer and partner acceptance
of the AppExchange, successful customer
deployment and utilization of our services,
unanticipated changes in our effective tax rate,
fluctuations in the number of shares outstanding,
the price of such shares, foreign currency
exchange rates and interest rates. Further
information on these and other factors that could
affect our financial results is included in the
reports on Forms 10-K, 10-Q and 8-K and in other
filings we make with the Securities and Exchange
Commission from time to time. These documents are
available on the SEC Filings section of the
Investor Information section of our website at
www.salesforce.com/investor. Salesforce.com, inc.
assumes no obligation and does not intend to
update these forward-looking statements, except
as required by law.
3
Andrew Albert Technical Evangelist
4
Apex Code Logic-as-a-Service
  • What is it?
  • What can it do?
  • How do I use it?
  • Well, lets see it!

5
Introducing Apex
  • Force.com allows many customizations through User
    Interface
  • Force.com API allows developers to write
    client-side programs or integrations for more
    flexibility in their applications
  • Client side programs have performance costs
  • Lack transactional control across API requests
  • Cost and complexity of client hosting server code
  • APEX was introduced to address those issues and
    to revolutionize the way developers create
    on-demand applications.

6
Apex Code Is
  • Strongly-typed, object-based programming language
  • Enables developers to execute logic and
    transaction control statements on Force.com
  • Runs natively on the server
  • Code executes on the server when initiated by
    User Interface via Buttons Events, and data
    through the API
  • Java or C-like syntax
  • Transactional

7
How can you use Apex Code?
  • Database Trigger
  • Apex Code that is executed in response to a
    database interaction
  • Example Apex trigger is initiated whenever a
    new Contact record is inserted.
  • Class
  • Similar to a Java or .NET class
  • A trigger can call an Apex Class

8
Differences between Triggers and Classes
  • Triggers execute implicitly in response to a
    database action
  • Apex class methods can be explicitly called in
    many areas of the Force.com
  • For example
  • Email to Apex Services
  • Apex Web Services
  • Visualforce controllers

9
How is Apex Different?
  • Executes directly on the Force.com
  • Eliminates network traffic between client
    application and Force.com
  • Apex Code tightly integrated to the rest of the
    platform functionality
  • Changes to the metadata referenced in Apex Code
    will cause an automatic recompilation the next
    time those components are executed

10
Language Basics
  • Data Types Primitive
  • String
  • Boolean
  • Date and DateTime
  • Integer, Long, Double
  • ID (Force.com database record identifier)
  • Blob (for storing binary data)
  • - Sobject (object representing a Force.com
    standard or custom object)
  • Example
  • DateTime dt System.now() 1
  • Boolean isClosed true
  • String sCapsFirstName Andrew.toUpperCase()
  • Account acct new Account() //Sobject example

11
Language Basics (cont)
  • Data Types Collections
  • Lists
  • Sets
  • Maps
  • Arrays
  • Example
  • ListltIntegergt myList new ListltIntegergt()
  • myList.add(12) //Add the number 12 to the list
  • myList.get(0) //Access to first integer stored
    in the List

12
Language Basics (cont)
  • Statements and Expressions
  • If/Else
  • For Loops
  • Do/While Loops
  • While Loops
  • Example
  • Integer count 0
  • while(count lt 11)
  • System.debug(Count count)
  • count

13
Language Basics (cont)
  • Exception Handling
  • Try/Catch/Finally statements
  • Ability to create and throw your own Exceptions
  • Example
  • public class OtherException extends BaseException
  • Try
  • //Add code here
  • throw new OtherException(Something went wrong
    here)
  • Catch (OtherException oex)
  • //Caught a custom exception type here
  • Catch (Exception ex)
  • //Caught all other exceptions here

14
Force.com Query Languages
  • SOQL Salesforce object Query Language
  • String myName Acme
  • Account accts select ID from Account where
    name myName //Pass in a variable
  • SOSL Salesforce object Search Language
  • ListltListltSObjectgtgt searchList FIND '415'
    IN PHONE FIELDS RETURNING Account, Contact
  • Account accounts ((ListltAccountgt)searchLis
    t0)
  • Contact contacts ((ListltContactgt)searchLis
    t1)

15
Data Manipulation with Apex
  • DML (Data Manipulation Language)
  • Insert
  • Update
  • Upsert - Operation to create a new or update
    existing record based on an external id.
  • Delete
  • Undelete

16
Heres what it looks like
Interface Implementation
Function Declaration
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 1
  • 1
  • 1 myPlainText email.plainTextBody.substring
    (0, email.plainTextBody.indexOf('ltstopgt'))
  • 1
  • 1 myPlainText email.plainTextBody
  • 1 System.debug('No ltstopgt in email ' e)
  • 1
  • 1
  • 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29
global class tasks implements Messaging.InboundEma
ilHandler
// Create inboundEmailResult object for
returning the result of the Force.com Email
Service // Add the email plain text into
the local variable // new Task object
to be created / Try to lookup any
contacts based on the email from address /
If there is more than 1 contact with the same
email address / an exception will be
thrown and the catch statement will be called
/
global Messaging.InboundEmailResult
handleInboundEmail(Messaging.inboundEmail email,

Messaging.InboundEnvelope env)
Messaging.InboundEmailResult result new
Messaging.InboundEmailResult()
Object Instantiation
String myPlainText '
Variable Declaration
try catch (System.StringException e)

Exception Handling
List Creation
Comment Syntax
ListltTaskgt newTask new ListltTaskgt()
  Select Id, Name, Email
From Contact Where Email email.fromAddress
  Contact vCon
Query Language
17
Bulk data operations with Apex
  • Commonly, the ordering of process for an apex
    solution is as follows
  • Records are retrieved from the Force.com database
    with a query statement
  • The array of records ismodified in the processing
    of your Apex Code
  • The array of records is then sent back to the
    object through a data manipulation statement

These actions are performed in bulk on the
Force.com
18
Bulk data operations with Apex (cont)
  • Apex Code must be designed to handle bulk
    operations
  • Why is this important?
  • The Force.com enforces limits to how many records
    can be processed at a time (governor limits)
  • Examples
  • Limit on the number of records that can be
    queried.
  • Limit on the number of records that be modified.
  • Limits are calculated by the number of records
    invoking the Apex Code code

19
Handling Bulk operations - example
20
Testing
  • Apex Code to test your Apex Code
  • Code to help developers perform and automate unit
    testing
  • Enables the platform to execute these test
    methods during deployment
  • Force.com requires that at least 75 of your Apex
    is covered by testing before code can be deployed
    to a Production environment (100 is ideal!)
  • Unit test methods are denoted with testMethod
    keyword.
  • testMethods do not modify any data in your org

21
What can you do with Apex Code?
  • Triggers
  • Apex Web Services
  • Email Services
  • SOA (callouts)
  • Visualforce Controllers

22
What can you do with Apex Code?
  • Triggers
  • Code runs when data changes to ensure business
    logic is applied
  • Executes on the server when data changes in
    either the UI or API.
  • Email Services
  • Send Receive emails, including attachments,
    with custom logic to process contents.
  • Includes all standard email attributes, use email
    templates, and supports plain text or HTML.
  • Force.com generates a unique email address to
    process the contents.

23
What else can you do with Apex Code?
  • Apex Web Services
  • Develop new Force.com Web Services
  • Define and expose a custom Web Service for an
    external service to invoke.
  • As simple as adding the webService keyword to a
    Apex method
  • WSDL automatically available
  • Consume other Web Services
  • Provides integration with external Web Services
  • Apex provides integration with Web services that
    utilize SOAP and WSDL, or HTTP services

24
What else can you do with Apex Code?
  • Visualforce Controllers
  • Apex logic accessed by Visualforce pages through
    custom controllers and controller extensions.
  • Apex Class that drives the logic when a user
    interacts with the Visualforce pages.

25
Winter 09 Apex Feature Dynamic Apex
  • Streamline code design eliminate repetitive code
    by constructing dynamic procedures for query,
    search, and data manipulation
  • Describe methods
  • New Apex methods to describe schema
    including object definition and field
    definitions.
  • User permission awareness
  • The power of system level access with the
    capability to enforce user permissions and
    constraints

public class displayFields //Retrieves
available SObjects with Global Describe private
Map ltString, Schema.SObjectTypegt schemaMap
Schema.getGlobalDescribe() //Retrieve
accessible fields for specified object public
ListltFieldgt showFields(String selectedObject)
fields.clear() Map ltString, Schema.SObjectField
gt fieldMap schemaMap.get(selectedObject).getDesc
ribe().fields.getMap() //for each field
determine whether the running user has access to
the field for(Schema.SObjectField f
fieldMap.Values()) Schema.DescribeFieldRe
sult df f.getDescribe()
if(df.isAccessible()) fields.add(f)
return fields
26
Winter 09 Apex Feature Async Apex
  • Asynchronous execution
  • Supports web service callouts from triggers
  • Monitoring UI provides detailed view of status
    and execution time

global class myclass public class
MyException extends Exception public static
void throwException() System.debug('calling
throw exception') throw new
MyException('for bar') _at_future(callouttru
e) static void voidvoid()
System.debug('void void') Http http new
Http() HttpRequest req new HttpRequest()
req.setMethod('GET') req.setEndpoint('http
//www.cheenath.com') HttpResponse res
http.send(req) System.debug(res.getBody())
//throw new MyException('for bar')
_at_future static void createAccount(String n)
Account a new Account(namen) insert a
27
Additional Dreamforce 2008 Apex Sessions
  • Apex Test Coverage Best Practices
  • Tuesday, 200-300PM, Esplanade 305
  • Hands-On Apex Code
  • Tuesday, 200-300PM, South 102
  • Development As A Service Building and Deploying
    Apps in the Cloud
  • Wednesday, 1015-1115AM, Esplanade 303

28
Force.com Library
  • Books
  • Developers Guide to the Force.com
  • Force.com Cookbook
  • Creating On-Demand Apps
  • Apex Language Reference

29
Additional Resources
  • Developer.Force.com
  • Force.com Developer Community
  • Apex Developer Guide Language Reference
  • Recorded technical presentations and whitepapers
  • Apex Message Boards
  • Sign up for free Developer Edition
  • Training Courses Certification
  • DEV401 Force.com essentials
  • DEV501 Visualforce, Apex, DaaS (Development As A
    Service)

30
Session FeedbackLet us know how were doing and
enter to win an iPod nano!
  • Please score the session from 5 to 1
    (5excellent,1needs improvement) in the
    following categories
  • Overall rating of the session
  • Quality of content
  • Strength of presentation delivery
  • Relevance of the session to your organization

Additionally, please fill in the name of each
speaker score them on overall delivery.
We strive to improve, thank you for filling out
our survey.
31
QUESTION ANSWER SESSION
Write a Comment
User Comments (0)
About PowerShow.com