introduction to apex code

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

Upload: edwinostos

Post on 11-May-2015

8.868 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Introduction to apex code

Coding the Cloud: An Introduction to Apex Code

Andrew Albert, salesforce.com

Force.com Platform Fundamentals

Page 2: Introduction to apex code

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.

Page 3: Introduction to apex code

Andrew AlbertTechnical Evangelist

Page 4: Introduction to apex code

Apex Code: Logic-as-a-Service

What is it?

What can it do?

How do I use it?

Well, let’s see it!

Page 5: Introduction to apex code

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.

Page 6: Introduction to apex code

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

Page 7: Introduction to apex code

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

Page 8: Introduction to apex code

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:

(a) Email to Apex Services

(b) Apex Web Services

(c) Visualforce controllers

Page 9: Introduction to apex code

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

Page 10: Introduction to apex code

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

Page 11: Introduction to apex code

Language Basics (cont)

Data Types – Collections- Lists- Sets- Maps- Arrays

Example:List<Integer> myList = new List<Integer>();

myList.add(12); //Add the number 12 to the list

myList.get(0); //Access to first integer stored in the List

Page 12: Introduction to apex code

Language Basics (cont)

Statements and Expressions- If/Else - For Loops- Do/While Loops- While Loops

Example:Integer count = 0;

while(count < 11){

System.debug(‘Count = ‘ + count);

count++;

}

Page 13: Introduction to apex code

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

}

Page 14: Introduction to apex code

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

List<List<SObject>> searchList = [FIND '415' IN PHONE FIELDS RETURNING Account, Contact ]; Account [] accounts = ((List<Account>)searchList[0]); Contact [] contacts = ((List<Contact>)searchList[1]);

Page 15: Introduction to apex code

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

Page 16: Introduction to apex code

Here’s what it looks like1 2 3 4 56 7 89 11 1 1 myPlainText = email.plainTextBody.substring(0, email.plainTextBody.indexOf('<stop>'));1 1 myPlainText = email.plainTextBody;1 System.debug('No <stop> in email: ' + e);1 11 2 2 2 2

2 try {2 ...

1234567891011121314151617181920212223242526272829

global class tasks implements Messaging.InboundEmailHandler {

// 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 */

Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();

String myPlainText = '’;

try {

} catch (System.StringException e) {

}

List<Task> newTask = new List<Task>();

  [Select Id, Name, Email From Contact Where Email = :email.fromAddress]  Contact vCon =

Interface Implementation

Comment Syntax

Object InstantiationVariable Declaration

Exception Handling

List Creation

Query Language

Function Declaration

global Messaging.InboundEmailResult handleInboundEmail(Messaging.inboundEmail email, Messaging.InboundEnvelope env){

Page 17: Introduction to apex code

Bulk data operations with Apex

Commonly, the ordering of process for an apex solution is as follows:

1) Records are retrieved from the Force.com database with a query statement

2) The array of records ismodified in the processing of your Apex Code

3) 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

Page 18: Introduction to apex code

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

Page 19: Introduction to apex code

Handling Bulk operations - example

Page 20: Introduction to apex code

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

Page 21: Introduction to apex code

What can you do with Apex Code?

Triggers Apex Web Services Email Services SOA (callouts) Visualforce Controllers

Page 22: Introduction to apex code

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.

Page 23: Introduction to apex code

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

Page 24: Introduction to apex code

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.

Page 25: Introduction to apex code

Winter ‘09 Apex Feature – Dynamic Apex

public class displayFields{……//Retrieves available SObjects with Global Describeprivate Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();

//Retrieve accessible fields for specified objectpublic List<Field> showFields(String selectedObject) {fields.clear();Map <String, Schema.SObjectField> fieldMap = schemaMap.get(selectedObject).getDescribe().fields.getMap();//for each field – determine whether the running user has access to the field for(Schema.SObjectField f : fieldMap.Values()){ Schema.DescribeFieldResult df = f.getDescribe(); if(df.isAccessible()){

fields.add(f); } }return fields;}

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

Page 26: Introduction to apex code

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'); } @future(callout=true) 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'); } @future static void createAccount(String n) { Account a = new Account(name=n); insert a; }

Page 27: Introduction to apex code

Additional Dreamforce 2008 Apex Sessions

Apex Test Coverage Best Practices– Tuesday, 2:00-3:00PM, Esplanade 305

Hands-On : Apex Code– Tuesday, 2:00-3:00PM, South 102

Development As A Service – Building and Deploying Apps

in the Cloud– Wednesday, 10:15-11:15AM, Esplanade 303

Page 28: Introduction to apex code

Force.com Library

Books– Developer’s Guide to the Force.com

– Force.com Cookbook

– Creating On-Demand Apps

Apex Language Reference

Page 29: Introduction to apex code

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)

Page 30: Introduction to apex code

Session FeedbackLet us know how we’re doing and enter to win an iPod nano!

Please score the session from 5 to 1 (5=excellent,1=needs 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.

Page 31: Introduction to apex code

QUESTION & ANSWER SESSION