beginner elevate hands-on developer workshop
Post on 11-May-2015
337 Views
Preview:
DESCRIPTION
TRANSCRIPT
Beginner Developer Workshop
Sandeep Bhanot Developer Evangelist @cloudysan sbhanot@salesforce.com
Prithpal Bhogill Solution Architect @pbhogill pbhogill@salesforce.com
Interactive Questions? Current projects? Feedback?
http://developer.force.com/join
Check Your Developer Edition Environment
http://developer.force.com/join
Online Workbook
h"p://bit.ly/fdc-‐jan-‐2013
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 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, 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, 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-K for the most recent fiscal quarter ended July 31, 2011. This document and others 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 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.
Steve Sasson Engineered the first digital camera prototype
Eastman Kodak Filed for bankruptcy in 2012
Steve Sasson Worked for Eastman Kodak in 1975
We are witnessing the Post PC Revolution in the Enterprise
456 Million Tablets at Work
782 Million Smartphones at Work
2009 2010 2011 2012 2013(E) 2014(E) 2015(E) 2016(E)
iPhone Revenue – Q1 ’12 $24.42 billion
TOTAL Microsoft Revenue – Q2 ’12 $20.89 billion
>
And this change is happening TODAY….
“By 2015, one of every seven dollars spent on packaged software, server, and storage offerings will
be through the public cloud model.”
http://www.idc.com/prodserv/idc_cloud.jsp
Salesforce Platform Cloud based, multi-tenant, enterprise class PaaS
The Salesforce Platform
Infrastructure Services
Network Storage
Operating System Database
App Server Web Server Data Center
Disaster Recovery
Operations Services
Authentication Availability Monitoring
Patch Management Upgrades Backup NOC
Troubleshooting
Your Innovative
App Application Services
Security/Sharing Integration
Customization Web Services
Multi-Language Workflow
Built-in Services Touch
Services
Native iOS SDK Native Android SDK
HTML5 Xcode wizards
PIN code support Custom APEX REST Geo-location Mobile
APIs
Social Services
Feeds Profiles
Status updates Groups
File sharing Approvals Messenger Presence
Platform Services
Globalization APIs
Security Analytics Search Identity
Mobile Social Identity Data Marketplace
The Salesforce Platform
800,000 Salesforce Platform developers
9 Billion API calls last month
2.5x Increased demand for Force.com developers
YOU are the makers
Now it’s your turn Building a cloud based application
Data Modeling
Warehouse Application Requirements
• Track price and inventory on hand for all merchandise
• Create invoices containing one or more merchandise items as a line items
• Present total invoice amount and current shipping status
Warehouse Application Requirements
• Track price and inventory on hand for all merchandise
• Create invoices containing one or more merchandise items as a line items
• Present total invoice amount and current shipping status
Warehouse Application Requirements
• Track price and inventory on hand for all merchandise
• Create invoices containing one or more merchandise items as a line items
• Present total invoice amount and current shipping status
Warehouse Data Model
Merchandise
Name Price Inventory
Pinot $20 15
Cabernet $30 10
Malbec $20 20
Zinfandel $10 50
Invoice
Number Status Count Total
INV-01 Shipped 16 $370
INV-02 New 20 $200
Invoice Line Items
Invoice Line Merchandise Units Sold
Unit Price Value
INV-01 1 Pinot 1 15 $20
INV-01 2 Cabernet 5 10 $150
INV-01 3 Malbec 10 20 $200
INV-02 1 Pinot 20 50 $200
Validation Rules Formulas which block data entry if evaluated as true
WHEN THEN IF
Record is inserted or updated
Formula evaluates to
true
Return error message
Tutorial 100 Optional: Tutorial 110
DECLARATIVE LOGIC
Declarative Apps Creating business applications with clicks not code
Spreadsheet Versus Application
Formula Fields Operations for performing common logic
Excel style formulas Support for commons functions
Math Text Date & Time Logical
Can chain functions together: AND ( OR (
ISPICKVAL(StageName, "Closed Won"), ISPICKVAL(StageName, "Negotiation/Review")), ISBLANK(Delivery_Date__c) )
Roll-Up Fields Field type calculating on rows of child data
Child of Master-Detail
Count or Aggregate
Workflows Event based business logic
When this happens
Meets this Criteria?
Perform These Actions
Task Outbound Message
Update Field Email
Approvals System to route approvals through an organization
Track Approval History
Define Criteria
Single/Multi/Skip step processes
Route based on roles, or queues
Approval via emails or Chatter
Security Identity, data security and user services
User Profiles
Groups, Queues and Hierarchies
Permission Sets
OAuth 2.0
Connected Apps
TUTORIAL 120 OPTIONAL: TUTORIAL 150
LUNCH: Down the hall to the right, Same room as breakfast
APEX
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 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, 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, 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-K for the most recent fiscal quarter ended July 31, 2011. This document and others 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 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.
Apex Cloud based programming language
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
þ þ
þ þ
Apex Anatomy
DEVELOPER CONSOLE
Controllers Inbound/Outbound Email Services
Custom API and HTTP Callouts
Triggers Scheduled and Batched Tasks
Common Use Cases
trigger HelloWorldTrigger on Book__c (before insert) { Book__c[] books = Trigger.new; BooksUtil.applyProcessing(books); }
Object Definition Event Definition Trigger.old and new Bulkify code
þ þ
þ þ
Trigger Anatomy
if(feed_text == ‘promote’) { rec.status__c = “Approved”
addToEmailPromotion(rec); FeedItem post = new FeedItem(); post.ParentId = rec.Id; post.Body = ‘Record added to promotion’;
feedsToInsert.addITem(post); }
Chatter Triggers
APEX TRIGGERS
@isTest static public void testRequiredFields() {
Merchandise__c m = new Merchandise__c(Name = 'Test'); //assertion: Merchandise requires Price and Quantity try { insert m; } catch (DMLException e) { System.assert(e.getMessage().length() > 0); } m.Quantity__c = 0; m.Price__c = 9.99; //assertion: Merchandise requires Price and Quantity try { insert m; System.assert(String.valueOf(m.Id).length() > 0); } catch (DMLException e) { System.debug(e.getMessage()); }
Unit Testing
public WarehouseCSVController() { Boolean beRandom =
ApexPages.currentPage().getParameters().get('random') != null; if(beRandom) { allMerchandise = new List<Merchandise__c>(); for(Integer x = 0; x < 1500; x++) { Merchandise__c m = new
Merchandise__c(Name='Widget '+String.valueOf(x), Quantity__c=100, Price__c=49.99);
allMerchandise.add(m); } } else { allMerchandise =
WarehouseDataQuery.getAllMerchandise(); }
}
Unit Testing
TUTORIAL 300
VISUALFORCE
Model View Controller Application design paradigm to divide data, logic and UI
Visualforce Cloud based component framework for interfaces
<apex:page StandardController=“Contact” extensions=“duplicateUtilty” action=“{!checkPhone}”>
<apex:form>
<apex:outputField var=“{!Contact.FirstName}” > <apex:outputField var=“{!Contact.LastName}” />
<apex:inputField var=“{!Contact.Phone}” /> <apex:commandButton value=“Update” action=“{!quicksave}” />
<apex:form>
</apex>
Standard Controllers Custom Controllers Custom Extensions Data bound components Controller Callbacks
þ
þ
þ
Visualforce Anatomy
STANDARD CONTROLLER
@RemoteAction public static String updateMerchandiseItem(String productId, Integer newInventory) { List<Merchandise__c> m = [SELECT Id, Total_Inventory__c from Merchandise__c WHERE Id =: productId LIMIT 1]; if(m.size() > 0) { m[0].Total_Inventory__c = newInventory; try { update m[0]; return 'Item Updated'; } catch (Exception e) { return e.getMessage(); } } else { return 'No item found with that ID'; } } }
JavaScript Remoting Access Apex from JavaScript Asynchronous Responses
þ þ
j$(".updateBtn").click(function() { var id = j$(this).attr('data-id'); var inventory = parseInt(j$("#inventory"+id).val()); j$.mobile.showPageLoadingMsg(); MobileInventoryExtension.updateMerchandiseItem(id,inventory,handleUpdate); });
Apex
Visualforce
<apex:page StandardController=“Contact” extension=“duplicateUtilty” action=“checkPhone”>
<apex:form>
<apex:outputField var=“{!Contact.FirstName}” > <apex:outputField var=“{!Contact.LastName}” />
<apex:inputField var=“{!Contact.Phone}” /> <apex:commandButton value=“Update” action=“{!quicksave}” />
<apex:form>
</apex>
Custom Controllers Custom components Page Templates
þ
þ
þ
Component Anatomy
Email Templates Generate PDFs Embed in Page Layouts
Mobile Interfaces Page Overrides
Common Use Cases
chatter:follow
chatter:newsfeed
chatter:feed
chatter:followers
chatter:feedAndFollowers
Chatter Components
TUTORIAL 330
MOBILE VF
@metadaddy
INTEGRATION
INTEGRATION
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 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, 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, 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-K for the most recent fiscal quarter ended July 31, 2011. This document and others 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 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.
OAuth Industry standard method of user authentication
Remote Application
Salesforce Platform
Sends App Credentials
User logs in, Token sent to callback
Confirms token
Send access token
Maintain session with refresh token
OAuth2 Flow
WORKBENCH
REST API API leveraging industry standard HTTP
Mobile Application
Salesforce Platform
login.salesforce.com
REST API
1. Authenticate
/services/data/query? SELECT ID FROM ACCOUNT
2. Access API
{“sObject”: “Account”, “id” : “oax02fdr756aFdad”}
3. Get JSON or XML
WORKBENCH
SOAP API XML messaging and WSDL based API
Java Web Server
Salesforce Platform
login.salesforce.com
SOAP API
1. Authenticate
<QUERY><SOQL> SELECT Id from Account </SOQL></QUERY>
2. Access API
<RECORDS> <RECORD type=“Account”>
<id>oax02fdr756aFdad</id> </RECORD>
</RECORDS>
3. Get XML
Bulk API Asynchronous API for handling large datasets
ETL Tool
Salesforce Platform
BULK API
2. Push Updates
TITLE: AppCo STREET: 1 Market Street
REF:0001
1. Pull Recent Records Legacy
Database
NAME: AppCo MailingStreet: 1 Market Street
ExternalID:0001
Streaming API Bayeux implementation for real-time delivery of data
Java Web Server
Salesforce Platform
STREAMING API
1. Handshake
2. Subscribe to Topic
3. Get Updates
Comparison of Force.com APIs Apex REST Apex SOAP REST API SOAP API Bulk API Streaming API
Protocol REST SOAP/WSDL REST SOAP/ WSDL REST CometD
Data Format JSON/XML XML JSON/XML XML CSV/XML JSON
Client libraries/ tools
HTTP client (lightweight)
SOAP/WSDL library
HTTP client (lightweight)
SOAP/WSDL library
HTTP client (lightweight)
CometD JQuery
Data Volume Medium Medium Medium Large Very Large Small-Large
Sync/Async Sync Sync Sync Sync Async Stream
WORKBENCH PUSH TOPICS
TUTORIAL 370
Fundamentals for the Enterprise
Mobile Social Identity Data Marketplace
Mobile SDK iOS and Android SDK for developing with Force.com
Mobile SDK: Accelerate App Development
API Wrappers Interact with Salesforce REST APIs with popular mobile platform languages
Secure Offline Storage Store business data on a device with enterprise-class encryption
Push Notifications Dispatch real-time alerts directly to mobile devices
Tools for building native, hybrid, and HTML5 apps on iOS and Android
OAuth2 Secure authentication and refresh token management
App Container Embed HTML5 apps inside a container to access powerful native device functionality
Polyglot Framework PaaS allowing for the deployment of multiple languages
$ git push heroku master Counting objects: 67, done. Delta compression using up to 4 threads. Compressing objects: 100% (53/53), done. Writing objects: 100% (67/67), 26.33 KiB, done. Total 67 (delta 5), reused 0 (delta 0)
Github Repo Heroku
Local Repo
Pull / Push Development Changes
Push Deployments Monitor Application
HEROKU
AppExchange Application Market for the Salesforce Platform
1,700+ Apps
20k+ Reviews
1.4m+ Installs
http://appexchange.com
Double-click to enter title Double-click to enter text The Wrap Up
http://bit.ly/elevatela13
Double-click to enter title Double-click to enter text
@forcedotcom @cloudysan @pbhogill
#forcedotcom
#askforce
Double-click to enter title Double-click to enter text
Join A Developer User Group
http://bit.ly/fdc-dugs
LA DUG: http://www.meetup.com/Los-Angeles-
Force-com-Developer-Group/
Leader: Nathan Pepper
Double-click to enter title Double-click to enter text
Become A Developer User Group Leader
Email:
April Nassi <anassi@salesforce.com>
Double-click to enter title Double-click to enter text
http://developer.force.com
THANK YOU
top related