Introduction to apex code


Published on

Published in: Technology

Introduction to apex code

  1. 1. Coding the Cloud: An Introductionto Apex Code Platform Fundamentals Andrew Albert,
  2. 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 offeringsand future offerings. All of our forward looking statements involve risks, uncertainties and assumptions. If any such risks oruncertainties materialize or if any of the assumptions proves incorrect, our results could differ materially from the resultsexpressed 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 inour operating results and cash flows, rate of growth and anticipated revenue run rate, errors, interruptions or delays in ourservice or our Web hosting, our new business model, our history of operating losses, the possibility that we will not remainprofitable, breach of our security measures, the emerging market in which we operate, our relatively limited operatinghistory, our ability to hire, retain and motivate our employees and manage our growth, competition, our ability to continue torelease and gain customer acceptance of new and improved versions of our service, customer and partner acceptance ofthe AppExchange, successful customer deployment and utilization of our services, unanticipated changes in our effectivetax rate, fluctuations in the number of shares outstanding, the price of such shares, foreign currency exchange rates andinterest 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. Thesedocuments are available on the SEC Filings section of the Investor Information section of our website, inc. assumes no obligation and does not intend to update these forward-looking statements, except as required by law.
  3. 3. Andrew AlbertTechnical Evangelist
  4. 4. Apex Code: Logic-as-a-Service  What is it?  What can it do?  How do I use it?  Well, let‟s see it!
  5. 5. Introducing Apex  allows many customizations through User Interface  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. 6. Apex Code Is Strongly-typed, object-based programming language Enables developers to execute logic and transaction control statements on 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. 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. 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  For example: (a) Email to Apex Services (b) Apex Web Services (c) Visualforce controllers
  9. 9. How is Apex Different?  Executes directly on the  Eliminates network traffic between client application and  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. 10. Language BasicsData Types – Primitive - String - Boolean - Date and DateTime - Integer, Long, Double - ID ( database record identifier) - Blob (for storing binary data) - Sobject (object representing a standard or custom object) Example: DateTime dt = + 1; Boolean isClosed = true; String sCapsFirstName = „Andrew‟.toUpperCase(); Account acct = new Account(); //Sobject example
  11. 11. 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
  12. 12. 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++; }
  13. 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. 14. 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]);
  15. 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. 16. Here’s what it looks like Interface Implementation Function Declaration 1 1 global class tasks implements Messaging.InboundEmailHandler { 2 2 3 3 global Messaging.InboundEmailResult handleInboundEmail(Messaging.inboundEmail email, 4 4 Messaging.InboundEnvelope env){ 5 5 6 6 // Create inboundEmailResult object for returning the result of the Email Service 7 7 Messaging.InboundEmailResult result = new Messaging.InboundEmailResult(); 8 8 9 9 String myPlainText = ‟; Object 101 Instantiation Variable Declaration 111 // Add the email plain text into the local variable 121 try { 131 myPlainText = email.plainTextBody.substring(0, email.plainTextBody.indexOf(<stop>)); 141 } catch (System.StringException e) { 151 myPlainText = email.plainTextBody; Exception 161 System.debug(No <stop> in email: + e); Handling 171 } 181 191 // new Task object to be created List Creation Comment 202 List<Task> newTask = new List<Task>(); Syntax 212 222 /* Try to lookup any contacts based on the email from address 232 / If there is more than 1 contact with the same email address 24 / an exception will be thrown and the catch statement will be called 25 */ 262 try { 272 Contact vCon = Id, Name, Email From Contact Where Email = :email.fromAddress] [Select 28 29 ... Query Language
  17. 17. Bulk data operations with Apex  Commonly, the ordering of process for an apex solution is as follows: 1) Records are retrieved from the 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
  18. 18. Bulk data operations with Apex (cont)  Apex Code must be designed to handle bulk operations  Why is this important? - The 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. 19. Handling Bulk operations - example
  20. 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 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. 21. What can you do with Apex Code? Triggers Apex Web Services Email Services SOA (callouts) Visualforce Controllers
  22. 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. – generates a unique email address to process the contents.
  23. 23. What else can you do with Apex Code?  Apex Web Services – Develop new 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. 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. 25. Winter ‘09 Apex Feature – Dynamic Apex  Streamline code designpublic class displayFields{……//Retrieves available SObjects with Global Describe eliminate repetitive code byprivate Map <String, Schema.SObjectType> schemaMap =Schema.getGlobalDescribe(); constructing dynamic procedures//Retrieve accessible fields for specified objectpublic List<Field> showFields(String selectedObject) { for query, search, and datafields.clear();Map <String, Schema.SObjectField> fieldMap = manipulationschemaMap.get(selectedObject).getDescribe().fields.getMap();//for each field – determine whether the running user hasaccess to the field  Describe methods for(Schema.SObjectField f : fieldMap.Values()){ Schema.DescribeFieldResult df = f.getDescribe(); if(df.isAccessible()){ New Apex methods to describe fields.add(f); } schema including object definition }return fields; and field definitions.}  User permission awareness The power of system level access with the capability to enforce user permissions and constraints
  26. 26. Winter ‘09 Apex Feature – Async Apexglobal class myclass { public class MyException extends Exception{}  Asynchronous execution public static void throwException() { System.debug(calling throw exception);  Supports web service callouts throw new MyException(for bar); } from triggers @future(callout=true) static void voidvoid() { System.debug(void void);  Monitoring UI provides Http http = new Http(); HttpRequest req = new HttpRequest(); detailed view of status and req.setMethod(GET); req.setEndpoint(; execution time 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; }
  27. 27. 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
  28. 28. Library Books – Developer‟s Guide to the – Cookbook – Creating On-Demand Apps Apex Language Reference
  29. 29. Additional Resources  – 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: essentials – DEV501: Visualforce, Apex, DaaS (Development As A Service)
  30. 30. 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.