Transcript
Page 1: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Developer Workshop

Pat PattersonDeveloper Evangelist Architect@[email protected]

Samantha ReadyDeveloper Evangelist@[email protected]

Page 2: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Internet Username / PasswordSF13 / SF13

http://bit.ly/dfc_beg_workbook

Login and Get Ready

Page 3: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Be Interactive

Page 4: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Free Developer

Environment

http://developer.force.com/join

Page 5: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Online

Workbook

http://bit.ly/dfc_beg_workbook

Page 6: Salesforce1 Platform ELEVATE LA workshop Dec 18, 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.

Page 7: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Introduction to the Salesforce1 Platform

Page 8: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 9: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 10: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Salesforce1 Platform

Salesforce is a Platform Company. Period.-Alex Williams, TechCrunch

500MAPI Calls Per Day6BLines of

Apex4M+Apps Built on the Platform

72BRecords Stored

Page 11: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

1.4 Million

Page 12: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Data Modeling

Page 13: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Spreadsheet Versus ApplicationRelational DataValidated dataProcess driven workflowsApproval SystemField AuditingUsers, Profiles and PermissionsEnterprise Collaboration

OR

With the same amount of programming…

Page 14: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Let’s Build an App

Page 15: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 16: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 17: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 18: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 19: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

ChatterSocial framework for the enterprise

Page 20: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Tutorial 100Optional: Tutorial 110

Page 21: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

DECLARATIVE LOGIC

Page 22: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Declarative AppsCreating business applications with clicks not code

Page 23: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Spreadsheet Versus Application

Page 24: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Formula FieldsOperations for performing common logic

Page 25: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 26: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Validation RulesFormulas which block data entry if evaluated as true

Page 27: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

WHEN THENIF

Record isbeing

inserted or updated

Formula evaluates to

true

Return error message

Page 28: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Roll-Up FieldsField type calculating on rows of child data

Page 29: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Child of Master-Detail

Count or Aggregate

Page 30: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

WorkflowsEvent based business logic

Page 31: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

When this happens

Meets this Criteria?

Perform These Actions

Page 32: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

TaskOutbound Message

Update Field

Email

Page 33: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

ApprovalsSystem to route approvals through an organization

Page 34: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Track Approval History

Define Criteria

Define Actions

Page 35: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Single/Multi/Skip step processes

Route based on roles, or queues

Approval via emails or Chatter

Page 36: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

SecurityIdentity, data security and user services

Page 37: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

User Profiles

Groups, Queues and Hierarchies

Permission Sets

SSO, SAML, OAuth 2.0

Connected Apps

Page 38: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

TUTORIAL 120OPTIONAL: TUTORIAL 150

Page 39: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

LUNCH:

Downstairs

Page 40: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

APEX

Page 41: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

ApexCloud based programming language

Page 42: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 43: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

DEVELOPER CONSOLE

Page 44: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Controllers Inbound/OutboundEmail Services

Custom API andHTTP Callouts

TriggersScheduled and Batched Tasks

Common Use Cases

Page 45: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 46: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

@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

Page 47: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 48: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

TUTORIAL 300

Page 49: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

VISUALFORCE

Page 50: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Model View ControllerApplication design paradigm to divide data, logic and UI

Page 51: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

VisualforceCloud based component framework for interfaces

Page 52: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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>

Page 53: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

@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

Page 54: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

<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

Page 55: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

<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

Page 56: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

<chatter:follow/>

<chatter:newsfeed/>

<chatter:feed/>

<chatter:followers/>

<chatter:feedAndFollowers/>

Chatter Components

Page 57: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Email Templates Generate PDFsEmbed in Page Layouts

Mobile Interfaces Page Overrides

Common Use Cases

Page 58: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

TUTORIAL 330

Page 59: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

INTEGRATION

Page 60: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

OAuthIndustry standard method of user authentication

Page 61: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

RemoteApplication

SalesforcePlatform

Invoke OAuth

User logs in,Tokens sent to callback

Call API

Return Data

Maintain session withrefresh token

OAuth2 Flow

Page 62: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

WORKBENCH

Page 63: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

REST APIAPI leveraging industry standard HTTP

Page 64: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 65: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

WORKBENCH

Page 66: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

SOAP APIXML messaging and WSDL based API

Page 67: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 68: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Bulk APIAsynchronous API for handling large datasets

Page 69: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

ETLTool

SalesforcePlatform

Bulk API

2. Push Updates

TITLE: AppCoSTREET: 1 Market Street

REF:0001

1. Pull Recent RecordsLegacy

Database

Page 70: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Streaming API

Bayeux implementation for real-time delivery of data

Page 71: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

JavaWeb Server

SalesforcePlatform

Streaming API

1. Handshake

2. Subscribe to Topic

3. Get Updates

Page 72: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

WORKBENCH PUSH TOPICS

Page 73: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

TUTORIAL 370

Page 74: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Salesforce1 Customization

Page 75: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Double-click to enter title

Double-click to enter text

The Wrap Up

Page 76: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

check inbox http://bit.ly/seattledevworkshp328

Page 77: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Double-click to enter title

Double-click to enter text

@forcedotcom@metadaddy

@samantha_ready

#forcedotcom#askforce

Page 78: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Double-click to enter title

Double-click to enter text

Join A Developer User Group

http://bit.ly/fdc-dugs

Page 79: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013
Page 80: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Double-click to enter title

Double-click to enter text

Become A Developer User Group Leader

Email:April Nassi

<[email protected]>

Page 81: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Double-click to enter title

Double-click to enter texthttp://developer.force.com

Page 82: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

THANK YOU

Page 83: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013
Page 84: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Fundamentals for the Enterprise

Mobile Social Identity Data Marketplace

Page 85: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Mobile SDKiOS and Android SDK for developing with Force.com

Page 86: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 87: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

CanvasFramework for using third party apps within Salesforce

Page 88: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013
Page 89: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

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

Page 90: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013
Page 91: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

Polyglot FrameworkPaaS allowing for the deployment of multiple languages

Page 92: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013
Page 93: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

$ 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

Page 94: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

HEROKU

Page 95: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

AppExchange

Application Market for the Salesforce Platform

Page 96: Salesforce1 Platform ELEVATE LA workshop Dec 18, 2013

1,700+ Apps 20k+ Reviews 1.4m+ Installs

http://appexchange.com