salesforce1 platform elevate la workshop dec 18, 2013
DESCRIPTION
Presentation from the Salesforce1 Platform ELEVATE workshop on December 18, 2013. The event took place at USC's Davidson Continuing Education Conference Center. Developer Evangelists Samantha Ready and Pat Patterson were on hand to present and lead attendees through various hands-on exercises.TRANSCRIPT
Developer Workshop
Pat PattersonDeveloper Evangelist Architect@[email protected]
Samantha ReadyDeveloper Evangelist@[email protected]
Internet Username / PasswordSF13 / SF13
http://bit.ly/dfc_beg_workbook
Login and Get Ready
Be Interactive
Free Developer
Environment
http://developer.force.com/join
Online
Workbook
http://bit.ly/dfc_beg_workbook
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.
Introduction to the Salesforce1 Platform
Salesforce1 Platform
Core Services
Chatter
Multi-langua
ge
Translation
Workbench
Email Services
Analytics
CloudDatabase
Schema
Builder
Search
Visualforce1
Monitoring
Multi-tenant
Apex
Data-level
Security
Workflows
APIs
Mobile Service
s
Social
APIs
Analytics
APIs
Bulk APIs
REST APIs
Metadata
APIs
SOAP APIs
Private App
Exchange
Custom
Actions
Identity
Mobile Notificat
ions
Tooling
APIs
Mobile Packs
Mobile SDK
Offline Support
Streaming APIs
Geolocation
ET 1:1 ET Fuel
Heroku1
Heroku Add-Ons
Sharing
Model
ET API
Build Employee Apps Fast with the Salesforce1 App
All your past investments...
Flexible UI
Notifications Platform
Publisher Actions
...are now in the future
Download the Salesforce1 App today.
All Your Customization
s
All Your Devices
All Your CRM
All Your Apps
Salesforce1 Platform
Salesforce is a Platform Company. Period.-Alex Williams, TechCrunch
500MAPI Calls Per Day6BLines of
Apex4M+Apps Built on the Platform
72BRecords Stored
1.4 Million
Data Modeling
Spreadsheet Versus ApplicationRelational DataValidated dataProcess driven workflowsApproval SystemField AuditingUsers, Profiles and PermissionsEnterprise Collaboration
OR
With the same amount of programming…
Let’s Build an App
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
ChatterSocial framework for the enterprise
Tutorial 100Optional: Tutorial 110
DECLARATIVE LOGIC
Declarative AppsCreating business applications with clicks not code
Spreadsheet Versus Application
Formula FieldsOperations 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) )
Validation RulesFormulas which block data entry if evaluated as true
WHEN THENIF
Record isbeing
inserted or updated
Formula evaluates to
true
Return error message
Roll-Up FieldsField type calculating on rows of child data
Child of Master-Detail
Count or Aggregate
WorkflowsEvent based business logic
When this happens
Meets this Criteria?
Perform These Actions
TaskOutbound Message
Update Field
ApprovalsSystem to route approvals through an organization
Track Approval History
Define Criteria
Define Actions
Single/Multi/Skip step processes
Route based on roles, or queues
Approval via emails or Chatter
SecurityIdentity, data security and user services
User Profiles
Groups, Queues and Hierarchies
Permission Sets
SSO, SAML, OAuth 2.0
Connected Apps
TUTORIAL 120OPTIONAL: TUTORIAL 150
LUNCH:
Downstairs
APEX
ApexCloud 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/OutboundEmail Services
Custom API andHTTP Callouts
TriggersScheduled and Batched Tasks
Common Use Cases
trigger MerchandiseTrigger on Merchandise__c (before insert, before update) {
Merchandise__c[] merch = Trigger.new; if(Trigger.isInsert) {
MerchandiseUtil.checkMerchandise(merch); } // Do more stuff...}
Object Definition
Event Definition
Trigger.old and new
Bulkify code
Trigger Anatomy
@isTeststatic public void testRequiredFields() { Merchandise__c m = new Merchandise__c(Name = 'Test'); try { insert m; System.assert(false, 'Shouldn\'t be able to insert Merchandise without’ + ' quantity & price!'); } catch (DMLException e) { // Expect to see an exception here – all is good } m.Quantity__c = 0; m.Price__c = 9.99; insert m;}
Unit Testing
public WarehouseCSVController() {Boolean dummy =
ApexPages.currentPage().getParameters().get(’dummy') != null;if (dummy) {
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 ControllerApplication design paradigm to divide data, logic and UI
VisualforceCloud based component framework for interfaces
Standard ControllersCustom ControllersCustom Extensions
Data bound components
Controller Callbacks
Visualforce Anatomy
<apex:page StandardController="Contact" extensions="duplicateUtility" 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:page>
@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
$(".updateBtn").click(function() { var id = j$(this).attr('data-id'); var inventory = parseInt(j$("#inventory"+id).val()); $.mobile.showPageLoadingMsg();
MobileInventoryExtension.updateMerchandiseItem(id, inventory,handleUpdate);});
Apex
JavaScript in
Visualforce
<apex:component controller="GeoComponentController">
<apex:attribute name="lat" type="Decimal" description="Latitude for geolocation query" assignTo="{!lat}” />
<apex:attribute name="lon" type="Decimal" description="Longitude for geolocation query" assignTo="{!lon}” />
<c:GeoComponent lat=”8.9991" lon=”10.0019" />
Custom Components
<apex:page > <apex:insert name="detail" /> <div style="position:relative; clear:all;"> <apex:insert name="footer" /> </div></apex:page>
<apex:page StandardController="Invoice__c" > <apex:composition template="WarehouseTemplate"> <apex:define name="detail"> <apex:detail subject="{!Invoice__c.Id}" /> </apex:define>
Page Templates
<chatter:follow/>
<chatter:newsfeed/>
<chatter:feed/>
<chatter:followers/>
<chatter:feedAndFollowers/>
Chatter Components
Email Templates Generate PDFsEmbed in Page Layouts
Mobile Interfaces Page Overrides
Common Use Cases
TUTORIAL 330
INTEGRATION
OAuthIndustry standard method of user authentication
RemoteApplication
SalesforcePlatform
Invoke OAuth
User logs in,Tokens sent to callback
Call API
Return Data
Maintain session withrefresh token
OAuth2 Flow
WORKBENCH
REST APIAPI leveraging industry standard HTTP
MobileApplication
SalesforcePlatform
login.salesforce.com
REST API
1. Authenticate
/services/data/query?q=SELECT+Id,+Name+FROM+Account
2. Access API
{ “Id” : “001E0000002Jv2bIAC”, “Name” : “GenePoint”}
3. Get JSON or XML
WORKBENCH
SOAP APIXML messaging and WSDL based API
Java WebServer
SalesforcePlatform
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 APIAsynchronous API for handling large datasets
ETLTool
SalesforcePlatform
Bulk API
2. Push Updates
TITLE: AppCoSTREET: 1 Market Street
REF:0001
1. Pull Recent RecordsLegacy
Database
Streaming API
Bayeux implementation for real-time delivery of data
JavaWeb Server
SalesforcePlatform
Streaming API
1. Handshake
2. Subscribe to Topic
3. Get Updates
WORKBENCH PUSH TOPICS
TUTORIAL 370
Salesforce1 Customization
Double-click to enter title
Double-click to enter text
The Wrap Up
check inbox http://bit.ly/seattledevworkshp328
Double-click to enter title
Double-click to enter text
@forcedotcom@metadaddy
@samantha_ready
#forcedotcom#askforce
Double-click to enter title
Double-click to enter text
Join A Developer User Group
http://bit.ly/fdc-dugs
Double-click to enter title
Double-click to enter text
Become A Developer User Group Leader
Email:April Nassi
Double-click to enter title
Double-click to enter texthttp://developer.force.com
THANK YOU
Fundamentals for the Enterprise
Mobile Social Identity Data Marketplace
Mobile SDKiOS and Android SDK for developing with Force.com
Mobile SDK: Accelerate App Development
API WrappersInteract with Salesforce REST APIs with popular mobile platform languages
Secure Offline StorageStore business data on a device with enterprise-class encryption
Push NotificationsDispatch real-time alerts directly to mobile devices
Tools for building native, hybrid, and HTML5 apps on iOS and Android
OAuth2Secure authentication and refresh token management
App ContainerEmbed HTML5 apps inside a container to access powerful native device functionality
http://developer.force.com/mobilesdk
CanvasFramework for using third party apps within Salesforce
Any Language, Any Platform
• Only has to be accessible from the user’s browser• Authentication via OAuth or Signed Response• JavaScript based SDK can be associated with any language• Within Canvas, the App can make API calls as the current user• apex:CanvasApp allows embedding via Visualforce
Canvas Anatomy
Polyglot FrameworkPaaS allowing for the deployment of multiple languages
$ git push heroku masterCounting 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 / PushDevelopment Changes
Push DeploymentsMonitor Application
HEROKU
AppExchange
Application Market for the Salesforce Platform
1,700+ Apps 20k+ Reviews 1.4m+ Installs
http://appexchange.com