SlideShare a Scribd company logo
1 of 72
Download to read offline
Show Flow 
Dreamforce 2104 Breakout Session Show Flow Template 
Notes 
Introduction to Development on Force.com 
for Developers 
2hr 30min 
Presentation Device: 
Customer Speaker: 
Demo Device 
Deck Owner/Filename: 
0:00 Doors open 
0:00 Start 
4 min 0:04 Welcome and Intros 
6 min 0:10 Agenda/Workbook/Conference App 
Call out “We might not have time to get to Extra Credit” but we’ll try! If we don’t you can 
optionally do it as homework  
5 min 0:13 Hands-On: Sign up for DE & Install PKG 
Please encourage all attendees to sign up for a new DE so they don’t run into any issues with 
disabled features or API naming issues 
22 min 0:35 Using JS in VF Pages 
15 min 0:50 Hands-On: JS in VF 
Here we only have slides, but feel free to show your own use case or demo if you have 
one 
15 min 1:05 Using the Salesforce1 Platform APIs 
15 min 1:20 Hands-On: Salesforce1 Platform APIs 
10 min 1:30 Using Static Resources 
5 min 1:35 Hands-On: Static Resources 
10min 1:45 Using Canvas Applications 
25 min 2:10 Hands-On: Force.com Canvas 
20 min 2:30 Q&A 
Use this as necessary. If you finish way early, you can do the extra credit 
exercises (there are slides for unit testing and batch) or if you take the whole 
time, feel free to let the students out.
Intermediate Development on 
Heroku and Force.com 
For Developers Samantha Ready, salesforce.com 
Senior Developer Evangelist 
@samantha_ready
Samantha Ready 
Senior Developer Evangelist 
@samantha_ready
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 product or service availability, 
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, new 
products and services, 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, the outcome of intellectual property and other litigation, 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-Q for the most recent fiscal quarter ended July 31, 2012. This documents and others containing important disclosures 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 presentations, 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.
Go Social! 
@salesforcedevs 
Salesforce Developers 
Salesforce Developers 
Salesforce Developers 
+Salesforce Developers
Agenda 
• Using JavaScript in VF Pages 
• Using the Salesforce1 Platform APIs 
• Using Static Resources 
• Using Canvas Applications 
Extra Credit: 
• Unit Testing 
• Batching and Scheduling
bit.ly/df14-intermediate-dev-workshop
Salesforce Platform is the Fastest Path from Idea to App 
Idea 
buy & 
setup 
hardware 
Idea Build App 
install 
complex 
software 
define user 
access 
build & test 
security 
make it 
mobile & 
social 
setup 
reporting & 
analytics 
build 
app 
Traditional Platforms 
6-12 Months? 
App 
App
Marketing 
Cloud 
AppExchange 
Salesforce1 App 
Salesforce1 Platform APIs 
Salesforce1 Platform Services 
Salesforce1 Platform 
Sales 
Cloud 
Service 
Cloud 
Custom 
Apps 
Partner 
Apps 
Force.com Heroku Exact Target
The Conference App 
What we’ll build… 
• First install schema for a Force.com event management app for sessions and 
speakers 
• Build a Google Maps integration (JS) to show conference hotels 
• Create a companion app (JS + REST) for conference attendees 
• Deploy companion app in Visualforce with Static Resources 
• Create and deploy a Node.js app on Heroku and integrate with Force.com Canvas
Free Developer Environment 
http://developer.salesforce.com/signup
Lab 1 & 2: Setup Your Developer Org & Install PKG 
http://developer.salesforce.com/signup
Using JavaScript in 
Visualforce Pages
Why Use JavaScript? 
• Build Engaging User Experiences 
• Leverage JavaScript Libraries 
• Build Custom Applications
JavaScript in Visualforce Pages 
Visualforce Page 
JavaScript Remoting 
Remote Objects 
(REST)
Demo Examples
JavaScript Remoting 
• Asynchronous page responses 
• Most responsive and fastest way to grab data and perform DML 
• All static data 
• Decouples the page from the controller 
• Lets you perform tasks on the page without reloading the entire page 
• Can help alleviate View State issues 
• Code still executes in the context of the user viewing the page 
3 Parts: 
1. In Apex Class: static @RemoteAction in Apex 
2. On Visualforce Page: calls Remote Action in JavaScript 
3. On Visualforce Page: response handler for result in JavaScript
JavaScript Remoting - Server-Side 
global with sharing class HotelRemoter { 
@RemoteAction 
global static List<Hotel__c> findAll() { 
return [SELECT Id, 
Name, 
Location__Latitude__s, 
Location__Longitude__s 
FROM Hotel__c]; 
} 
}
"global with sharing"? 
• global 
– Available from outside of the application 
• with sharing 
– Run code with current user permissions. (Apex code runs in system context by default -- with 
access to all objects and fields)
JavaScript Remoting - Visualforce Page 
<script> 
Visualforce.remoting.Manager.invokeAction( 
'{!$RemoteAction.HotelRemoter.findAll}', 
function (result, event) { 
if (event.status) { 
for (var i = 0; i < result.length; i++) { 
var lat = result[i].Location__Latitude__s; 
var lng = result[i].Location__Longitude__s; 
addMarker(lat, lng); 
} 
} else { 
alert(event.message); 
} 
} 
); 
</script>
Using JavaScript and CSS Libraries 
• Hosted elsewhere 
<script src="https://maps.googleapis.com/maps/api/js"></script> 
• Hosted in Salesforce 
– Upload individual file or Zip file as Static Resource 
– Reference asset using special tags 
– Covered in Static Resources Exercise later
Lab 3: Using JavaScript in Visualforce Pages 
• Write the HotelMap Visualforce Page
Using the REST APIs
When? 
Get access to Salesforce data from outside Salesforce: 
• Integrate Salesforce in existing apps 
• Build consumer apps 
• Device integration (Internet of Things)
Mobile SDK Example 
OAuth 
REST APIs
Browser Cross-Origin Restrictions 
OAuth 
REST APIs 
app.js 
index.html 
HTTP Server 
Cross Origin Policy
Using a Proxy 
OAuth 
REST APIs 
app.js 
index.html 
Proxy 
HTTP Server
http://bit.ly/trysoql
https://contact-force.herokuapp.com
Connected App
Salesforce REST Toolkit 
https://github.com/developerforce/Force.com-JavaScript-REST-Toolkit
Lab 10: Using the REST APIs 
• Create a consumer app hosted outside Salesforce
Windows Users 
After installing Node.js: 
1. Add c:Program FilesNodejs to your path 
or 
Run "C:Program FilesNodejsnpm" install 
2. Create an "npm" directory in 
C:Users[yourname]AppdataRoaming
Using Static Resources
What are Static Resources? 
• Files uploaded to Salesforce instance for use in Visualforce pages 
– .js 
– .css 
– .jpg, .png, .gif, etc. 
• Can be uploaded individually or as archive (.zip or .jar)
Static Resources
Visualforce and HTML Page Generation 
• By default, Visualforce generates HTML page elements: 
– <html> 
– <head> 
– <body> 
• <apex:> tags ensure corresponding HTML elements are inserted at the right place 
– <apex:stylesheet> 
– <apex:includeScript>
Referencing Static Resources 
// Single file 
<apex:stylesheet value="{!$Resource.bootstrap}"/> 
<apex:includeScript value="{!$Resource.jquery}"/> 
<apex:image url="{!$Resource.logo}"/> 
// ZIP file 
<apex:stylesheet value="{!URLFOR($Resource.assets, 'css/main.css')}"/> 
<apex:image url="{!URLFOR($Resource.assets, 'img/logo.png')}"/> 
<apex:includeScript value="{!URLFOR($Resource.assets, 'js/app.js')}"/>
Controlling HTML Page Generation 
• You can also take full control over HTML elements generation and position: 
<apex:page docType="html-5.0” applyHtmlTag="false” applyBodyTag="false"> 
• Add arbitrary components to Visualforce components that will be “passed through” to 
rendered HTML 
• prefix the attribute with "html-” 
• used to improve usability with HTML5 features such as placeholder “ghost” text, 
pattern client-side validation, and title help text attributes. 
• … and use standard HTML tags 
• <link rel="stylesheet" href="…"> 
• <script src="…">
Referencing Static Resources 
// Single file 
<link href="{!$Resource.bootstrap}" rel="stylesheet"/> 
<img src="{!$Resource.logo}"/> 
<script src="{!$Resource.jquery}"></script> 
// ZIP file 
<link href="{!URLFOR($Resource.assets, 'css/main.css')}" rel="stylesheet"/> 
<img src="{!URLFOR($Resource.assets, 'img/logo.png')}"/> 
<script src="{!URLFOR($Resource.assets, 'js/app.js')}"></script>
Lab 11: Static Resources 
• Host single page application in Visualforce page
Using Canvas 
Applications
What is a Canvas App? 
• A web app integrated in your Salesforce environment 
• Can be written in any language 
– Java, .NET, PHP, Ruby on Rails, Node.js, etc. 
• Transparently authenticated 
• Context aware (logged in user, current object, etc.)
Use Cases 
• Internal App 
• Third-Party / Partner App 
• External systems with web facade
Where Can It Be Integrated? 
• Publisher 
• Page Layouts 
• Visualforce Pages 
• Tabs 
• Mobile Cards
Defining a Canvas App
Transparent Authentication 
• When loading Canvas app, Salesforce instance posts Base64 encoded data to app 
endpoint including: 
– Authenticated token 
– Context (logged in user, current object, etc) 
• App decodes data using client secret 
• Can use authenticated token to make REST API calls
Node.js example 
var decode = require('salesforce-signed-request'); 
var secret = process.env.CONSUMER_SECRET; 
app.post('/signedrequest', function(req, res) { 
var signedRequest = req.body.signed_request; 
var decodedRequest = decode(signedRequest, secret); 
var oauthToken = decodedRequest.client.oauthToken; 
var instanceUrl = decodedRequest.client.instanceUrl; 
var context = decodedRequest.context; 
});
Lab 12: Canvas 
• Deploy Node.js web app to Heroku 
• Integrate app in Contact page layout
Writing Unit Tests
Unit Testing 
• Code to test code 
• Increases quality and predictability 
• Unit test coverage is required to move code to production 
– Must have at least 75% of code covered 
– Coverage = lines of code exercised by tests / total line of code
Anatomy of a Test Class 
@isTest 
private class myClass { 
static testMethod void myTest() { 
// 1. Prepare temporary data 
// 2. Start Test 
// 3. Execute some code 
// 4. Stop Test 
// 5. Assert 
} 
}
Create Temporary Data 
Datetime now = System.now(); 
// Create speaker 
Speaker__c sp = new Speaker__c(First_Name__c='Al', Last_Name__c='Smith'); 
insert sp; 
// Create two sessions starting at the same time 
Session__c s1 = new Session__c(Name='Session1', Session_Date__c=now); 
insert s1; 
Session__c s2 = new Session__c(Name='Session2', Session_Date__c=now); 
insert s2; 
// Book speaker for session1 
Session_Speaker__c booking1 = new Session_Speaker__c(Session__c=s1.Id, Speaker__c=sp.Id); 
insert booking1;
Test and Assert 
Test.startTest(); 
// Try to book speaker for session2 
Session_Speaker__c booking2= 
new Session_Speaker__c(Session__c=s2.Id, Speaker__c=sp.Id); 
Database.SaveResult result = Database.insert(booking2, false); 
Test.stopTest(); 
// Insert should fail: can't book same speaker for 2 sessions happening 
// at same time 
System.assert(!result.isSuccess());
Running Tests
Lab 13: Unit Testing 
• Write the TestDoubleBooking class 
• Run the test
Batch and Schedule
What's a Batch? 
• Long-running process that runs without manual intervention 
• Started programmatically
Defining a Batch Job 
global class SendReminderEmail implements Database.Batchable { 
global SendReminderEmail(String query, String subject, String body) { 
// Constructor: accept parameters 
} 
global Database.QueryLocator start(Database.BatchableContext bc) { 
// Select scope (records to process) 
} 
global void execute(Database.BatchableContext bc, List<Speaker__c> scope) { 
// Process data 
} 
global void finish(Database.BatchableContext bc) { 
// Post processing operations 
} 
}
Running the Batch Job 
String q = 'SELECT First_Name__c, Last_Name__c, Email__c ' + 
'FROM Speaker__c WHERE Email__c != null'; 
SendReminderEmail batch = new SendReminderEmail(q, 
'Final Reminder', 'The conference starts next Monday'); 
Database.executeBatch(batch);
What's Scheduled Job? 
• Unattended background program execution 
• Occurs at a specified time 
• Optionally repeated at a specified interval
Defining a Scheduled Job 
global class ScheduledEmail implements Schedulable { 
global void execute(SchedulableContext sc) { 
String q = 'SELECT First_Name__c, Last_Name__c, Email__c ' +'FROM Speaker__c 
WHERE Email__c != null'; 
SendReminderEmail batch = new SendReminderEmail(q, 
'Final Reminder', 'The conference starts next Monday'); 
Database.executeBatch(batch); 
} 
}
Scheduling the Job (using Code) 
ScheduledEmail job = new ScheduledEmail(); 
// Run at 8AM on February 10th 
// (Seconds Minutes Hours Day_of_month Month Day_of_week Years) 
// Can use wildcards 
String schedule = '0 0 8 10 2 ?'; 
String jobId = System.schedule('Final reminder', schedule, job);
Scheduling the Job (using Clicks)
Monitoring Scheduled Jobs
Lab 14: Batching and Scheduling 
• Write the SendReminderEmail class 
• Run the batch
Samantha Ready 
Senior Developer Evangelist 
@samantha_ready 
Survey 
bit.ly/df-how-intermediate
Certification Logos for “Speaker Intro Slides” 
For salesforce.com 
use only 
Guides for logo placement
Example of a Table 
Table subtitle 
Column title Column title Column title Column title 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00
Example of a Table 
Table style and coloring 
Column title Column title Column title Column title 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00
Device Family Without Screens

More Related Content

What's hot

Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...
Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...
Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...Edureka!
 
Drive Productivity with Salesforce and Microsoft Exchange and Outlook
Drive Productivity with Salesforce and Microsoft Exchange and OutlookDrive Productivity with Salesforce and Microsoft Exchange and Outlook
Drive Productivity with Salesforce and Microsoft Exchange and OutlookDreamforce
 
Practical Headless Flow Examples
Practical Headless Flow ExamplesPractical Headless Flow Examples
Practical Headless Flow ExamplesSalesforce Admins
 
Rits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce LightningRits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce LightningRight IT Services
 
Salesforce Presentation
Salesforce PresentationSalesforce Presentation
Salesforce PresentationChetna Purohit
 
Summer '16 Release Preview Webinar
Summer '16 Release Preview WebinarSummer '16 Release Preview Webinar
Summer '16 Release Preview WebinarSalesforce Admins
 
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...Edureka!
 
Increase Adoption By Building Lightning Pages
Increase Adoption By Building Lightning PagesIncrease Adoption By Building Lightning Pages
Increase Adoption By Building Lightning PagesSalesforce Admins
 
Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1Amit Sharma
 
Keeping it Simple with Permission Sets
Keeping it Simple with Permission SetsKeeping it Simple with Permission Sets
Keeping it Simple with Permission SetsConfigero
 
Salesforce for Beginners
Salesforce for BeginnersSalesforce for Beginners
Salesforce for BeginnersEdureka!
 
Interview questions and answers for salesforce developer
Interview questions and answers for salesforce developerInterview questions and answers for salesforce developer
Interview questions and answers for salesforce developerPmp15780
 
How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi...
 How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi... How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi...
How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi...Aimore Technologies
 

What's hot (18)

Ponakaladinne reddy
Ponakaladinne reddyPonakaladinne reddy
Ponakaladinne reddy
 
Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...
Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...
Salesforce Certification | Salesforce Careers | Salesforce Training For Begin...
 
Drive Productivity with Salesforce and Microsoft Exchange and Outlook
Drive Productivity with Salesforce and Microsoft Exchange and OutlookDrive Productivity with Salesforce and Microsoft Exchange and Outlook
Drive Productivity with Salesforce and Microsoft Exchange and Outlook
 
Practical Headless Flow Examples
Practical Headless Flow ExamplesPractical Headless Flow Examples
Practical Headless Flow Examples
 
Cloud flow designer: Salesforce.com
Cloud flow designer: Salesforce.comCloud flow designer: Salesforce.com
Cloud flow designer: Salesforce.com
 
Rits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce LightningRits Brown Bag - Salesforce Lightning
Rits Brown Bag - Salesforce Lightning
 
Salesforce Winter Release
Salesforce Winter ReleaseSalesforce Winter Release
Salesforce Winter Release
 
Salesforce Presentation
Salesforce PresentationSalesforce Presentation
Salesforce Presentation
 
Summer '16 Release Preview Webinar
Summer '16 Release Preview WebinarSummer '16 Release Preview Webinar
Summer '16 Release Preview Webinar
 
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...
Salesforce Interview Questions And Answers | Salesforce Tutorial | Salesforce...
 
Increase Adoption By Building Lightning Pages
Increase Adoption By Building Lightning PagesIncrease Adoption By Building Lightning Pages
Increase Adoption By Building Lightning Pages
 
Vf ppt (1)
Vf ppt (1)Vf ppt (1)
Vf ppt (1)
 
Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1Oracle apex-hands-on-guide lab#1
Oracle apex-hands-on-guide lab#1
 
Keeping it Simple with Permission Sets
Keeping it Simple with Permission SetsKeeping it Simple with Permission Sets
Keeping it Simple with Permission Sets
 
Salesforce for Beginners
Salesforce for BeginnersSalesforce for Beginners
Salesforce for Beginners
 
Interview questions and answers for salesforce developer
Interview questions and answers for salesforce developerInterview questions and answers for salesforce developer
Interview questions and answers for salesforce developer
 
Intro to power apps
Intro to power appsIntro to power apps
Intro to power apps
 
How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi...
 How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi... How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi...
How DotNet, SharePoint, and Azure helps to build a Custom Web Application wi...
 

Similar to Hands-on Workshop: Intermediate Development with Heroku and Force.com

AngularJS App In Two Weeks
AngularJS App In Two WeeksAngularJS App In Two Weeks
AngularJS App In Two WeeksPeter Chittum
 
Spring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview WebinarSpring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview WebinarSalesforce Developers
 
Salesforce Campus Tour - Developer Advanced
Salesforce Campus Tour - Developer AdvancedSalesforce Campus Tour - Developer Advanced
Salesforce Campus Tour - Developer AdvancedJames Ward
 
Lightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René WinkelmeyerLightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René WinkelmeyerCzechDreamin
 
Building JavaScript Applications on the Salesforce1 Platform
Building JavaScript Applications on the Salesforce1 PlatformBuilding JavaScript Applications on the Salesforce1 Platform
Building JavaScript Applications on the Salesforce1 PlatformSalesforce Developers
 
Lightning Workshop London
Lightning Workshop LondonLightning Workshop London
Lightning Workshop LondonKeir Bowden
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsSalesforce Developers
 
[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter Chittum[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter ChittumBeMyApp
 
How Force.com developers do more in less time
How Force.com developers do more in less timeHow Force.com developers do more in less time
How Force.com developers do more in less timeAbhinav Gupta
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionSalesforce Developers
 
Suisse Romande SF DG - Lightning workshop
Suisse Romande SF DG - Lightning workshopSuisse Romande SF DG - Lightning workshop
Suisse Romande SF DG - Lightning workshopGnanasekaran Thoppae
 
Trailhead live - Overview of Salesforce App Cloud
Trailhead live - Overview of Salesforce App CloudTrailhead live - Overview of Salesforce App Cloud
Trailhead live - Overview of Salesforce App CloudJohn Stevenson
 
Look Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDK
Look Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDKLook Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDK
Look Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDKSalesforce Developers
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and TestingSalesforce Developers
 
Connect Your Clouds with Force.com
Connect Your Clouds with Force.comConnect Your Clouds with Force.com
Connect Your Clouds with Force.comJeff Douglas
 
Sandboxes: The Future of App Development by Evan Barnet & Pam Barnet
Sandboxes: The Future of App Development by Evan Barnet & Pam BarnetSandboxes: The Future of App Development by Evan Barnet & Pam Barnet
Sandboxes: The Future of App Development by Evan Barnet & Pam BarnetSalesforce Admins
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsSalesforce Developers
 
Building einstein analytics apps uk-compressed
Building einstein analytics apps   uk-compressedBuilding einstein analytics apps   uk-compressed
Building einstein analytics apps uk-compressedrikkehovgaard
 
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on HerokuIgor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on HerokuIgor Androsov
 

Similar to Hands-on Workshop: Intermediate Development with Heroku and Force.com (20)

AngularJS App In Two Weeks
AngularJS App In Two WeeksAngularJS App In Two Weeks
AngularJS App In Two Weeks
 
Spring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview WebinarSpring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview Webinar
 
Salesforce Campus Tour - Developer Advanced
Salesforce Campus Tour - Developer AdvancedSalesforce Campus Tour - Developer Advanced
Salesforce Campus Tour - Developer Advanced
 
Lightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René WinkelmeyerLightning Web Components - A new era, René Winkelmeyer
Lightning Web Components - A new era, René Winkelmeyer
 
Building JavaScript Applications on the Salesforce1 Platform
Building JavaScript Applications on the Salesforce1 PlatformBuilding JavaScript Applications on the Salesforce1 Platform
Building JavaScript Applications on the Salesforce1 Platform
 
Lightning Workshop London
Lightning Workshop LondonLightning Workshop London
Lightning Workshop London
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web Components
 
[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter Chittum[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter Chittum
 
How Force.com developers do more in less time
How Force.com developers do more in less timeHow Force.com developers do more in less time
How Force.com developers do more in less time
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An Introduction
 
Suisse Romande SF DG - Lightning workshop
Suisse Romande SF DG - Lightning workshopSuisse Romande SF DG - Lightning workshop
Suisse Romande SF DG - Lightning workshop
 
Lightning week - Paris DUG
Lightning week - Paris DUGLightning week - Paris DUG
Lightning week - Paris DUG
 
Trailhead live - Overview of Salesforce App Cloud
Trailhead live - Overview of Salesforce App CloudTrailhead live - Overview of Salesforce App Cloud
Trailhead live - Overview of Salesforce App Cloud
 
Look Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDK
Look Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDKLook Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDK
Look Ma, No Apex: Mobile Apps with RemoteObject and Mobile SDK
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and Testing
 
Connect Your Clouds with Force.com
Connect Your Clouds with Force.comConnect Your Clouds with Force.com
Connect Your Clouds with Force.com
 
Sandboxes: The Future of App Development by Evan Barnet & Pam Barnet
Sandboxes: The Future of App Development by Evan Barnet & Pam BarnetSandboxes: The Future of App Development by Evan Barnet & Pam Barnet
Sandboxes: The Future of App Development by Evan Barnet & Pam Barnet
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer Highlights
 
Building einstein analytics apps uk-compressed
Building einstein analytics apps   uk-compressedBuilding einstein analytics apps   uk-compressed
Building einstein analytics apps uk-compressed
 
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on HerokuIgor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
 

More from Salesforce Developers

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSalesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceSalesforce Developers
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base ComponentsSalesforce Developers
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsSalesforce Developers
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaSalesforce Developers
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentSalesforce Developers
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsSalesforce Developers
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilitySalesforce Developers
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce dataSalesforce Developers
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPSalesforce Developers
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceSalesforce Developers
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureSalesforce Developers
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DXSalesforce Developers
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectSalesforce Developers
 
Modern App Dev: Modular Development Strategies
Modern App Dev: Modular Development StrategiesModern App Dev: Modular Development Strategies
Modern App Dev: Modular Development StrategiesSalesforce Developers
 

More from Salesforce Developers (20)

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component Performance
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base Components
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer Highlights
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX India
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web Components
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura Interoperability
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce data
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCP
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in Salesforce
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data Capture
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DX
 
Get Into Lightning Flow Development
Get Into Lightning Flow DevelopmentGet Into Lightning Flow Development
Get Into Lightning Flow Development
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS Connect
 
Introduction to MuleSoft
Introduction to MuleSoftIntroduction to MuleSoft
Introduction to MuleSoft
 
Modern App Dev: Modular Development Strategies
Modern App Dev: Modular Development StrategiesModern App Dev: Modular Development Strategies
Modern App Dev: Modular Development Strategies
 
Dreamforce Developer Recap
Dreamforce Developer RecapDreamforce Developer Recap
Dreamforce Developer Recap
 
Vs Code for Salesforce Developers
Vs Code for Salesforce DevelopersVs Code for Salesforce Developers
Vs Code for Salesforce Developers
 

Recently uploaded

Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 

Recently uploaded (20)

Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 

Hands-on Workshop: Intermediate Development with Heroku and Force.com

  • 1. Show Flow Dreamforce 2104 Breakout Session Show Flow Template Notes Introduction to Development on Force.com for Developers 2hr 30min Presentation Device: Customer Speaker: Demo Device Deck Owner/Filename: 0:00 Doors open 0:00 Start 4 min 0:04 Welcome and Intros 6 min 0:10 Agenda/Workbook/Conference App Call out “We might not have time to get to Extra Credit” but we’ll try! If we don’t you can optionally do it as homework  5 min 0:13 Hands-On: Sign up for DE & Install PKG Please encourage all attendees to sign up for a new DE so they don’t run into any issues with disabled features or API naming issues 22 min 0:35 Using JS in VF Pages 15 min 0:50 Hands-On: JS in VF Here we only have slides, but feel free to show your own use case or demo if you have one 15 min 1:05 Using the Salesforce1 Platform APIs 15 min 1:20 Hands-On: Salesforce1 Platform APIs 10 min 1:30 Using Static Resources 5 min 1:35 Hands-On: Static Resources 10min 1:45 Using Canvas Applications 25 min 2:10 Hands-On: Force.com Canvas 20 min 2:30 Q&A Use this as necessary. If you finish way early, you can do the extra credit exercises (there are slides for unit testing and batch) or if you take the whole time, feel free to let the students out.
  • 2. Intermediate Development on Heroku and Force.com For Developers Samantha Ready, salesforce.com Senior Developer Evangelist @samantha_ready
  • 3. Samantha Ready Senior Developer Evangelist @samantha_ready
  • 4. 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 product or service availability, 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, new products and services, 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, the outcome of intellectual property and other litigation, 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-Q for the most recent fiscal quarter ended July 31, 2012. This documents and others containing important disclosures 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 presentations, 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.
  • 5. Go Social! @salesforcedevs Salesforce Developers Salesforce Developers Salesforce Developers +Salesforce Developers
  • 6. Agenda • Using JavaScript in VF Pages • Using the Salesforce1 Platform APIs • Using Static Resources • Using Canvas Applications Extra Credit: • Unit Testing • Batching and Scheduling
  • 8. Salesforce Platform is the Fastest Path from Idea to App Idea buy & setup hardware Idea Build App install complex software define user access build & test security make it mobile & social setup reporting & analytics build app Traditional Platforms 6-12 Months? App App
  • 9. Marketing Cloud AppExchange Salesforce1 App Salesforce1 Platform APIs Salesforce1 Platform Services Salesforce1 Platform Sales Cloud Service Cloud Custom Apps Partner Apps Force.com Heroku Exact Target
  • 10. The Conference App What we’ll build… • First install schema for a Force.com event management app for sessions and speakers • Build a Google Maps integration (JS) to show conference hotels • Create a companion app (JS + REST) for conference attendees • Deploy companion app in Visualforce with Static Resources • Create and deploy a Node.js app on Heroku and integrate with Force.com Canvas
  • 11. Free Developer Environment http://developer.salesforce.com/signup
  • 12. Lab 1 & 2: Setup Your Developer Org & Install PKG http://developer.salesforce.com/signup
  • 13. Using JavaScript in Visualforce Pages
  • 14. Why Use JavaScript? • Build Engaging User Experiences • Leverage JavaScript Libraries • Build Custom Applications
  • 15. JavaScript in Visualforce Pages Visualforce Page JavaScript Remoting Remote Objects (REST)
  • 17. JavaScript Remoting • Asynchronous page responses • Most responsive and fastest way to grab data and perform DML • All static data • Decouples the page from the controller • Lets you perform tasks on the page without reloading the entire page • Can help alleviate View State issues • Code still executes in the context of the user viewing the page 3 Parts: 1. In Apex Class: static @RemoteAction in Apex 2. On Visualforce Page: calls Remote Action in JavaScript 3. On Visualforce Page: response handler for result in JavaScript
  • 18. JavaScript Remoting - Server-Side global with sharing class HotelRemoter { @RemoteAction global static List<Hotel__c> findAll() { return [SELECT Id, Name, Location__Latitude__s, Location__Longitude__s FROM Hotel__c]; } }
  • 19. "global with sharing"? • global – Available from outside of the application • with sharing – Run code with current user permissions. (Apex code runs in system context by default -- with access to all objects and fields)
  • 20. JavaScript Remoting - Visualforce Page <script> Visualforce.remoting.Manager.invokeAction( '{!$RemoteAction.HotelRemoter.findAll}', function (result, event) { if (event.status) { for (var i = 0; i < result.length; i++) { var lat = result[i].Location__Latitude__s; var lng = result[i].Location__Longitude__s; addMarker(lat, lng); } } else { alert(event.message); } } ); </script>
  • 21. Using JavaScript and CSS Libraries • Hosted elsewhere <script src="https://maps.googleapis.com/maps/api/js"></script> • Hosted in Salesforce – Upload individual file or Zip file as Static Resource – Reference asset using special tags – Covered in Static Resources Exercise later
  • 22. Lab 3: Using JavaScript in Visualforce Pages • Write the HotelMap Visualforce Page
  • 24. When? Get access to Salesforce data from outside Salesforce: • Integrate Salesforce in existing apps • Build consumer apps • Device integration (Internet of Things)
  • 25. Mobile SDK Example OAuth REST APIs
  • 26. Browser Cross-Origin Restrictions OAuth REST APIs app.js index.html HTTP Server Cross Origin Policy
  • 27. Using a Proxy OAuth REST APIs app.js index.html Proxy HTTP Server
  • 31. Salesforce REST Toolkit https://github.com/developerforce/Force.com-JavaScript-REST-Toolkit
  • 32. Lab 10: Using the REST APIs • Create a consumer app hosted outside Salesforce
  • 33. Windows Users After installing Node.js: 1. Add c:Program FilesNodejs to your path or Run "C:Program FilesNodejsnpm" install 2. Create an "npm" directory in C:Users[yourname]AppdataRoaming
  • 35. What are Static Resources? • Files uploaded to Salesforce instance for use in Visualforce pages – .js – .css – .jpg, .png, .gif, etc. • Can be uploaded individually or as archive (.zip or .jar)
  • 37. Visualforce and HTML Page Generation • By default, Visualforce generates HTML page elements: – <html> – <head> – <body> • <apex:> tags ensure corresponding HTML elements are inserted at the right place – <apex:stylesheet> – <apex:includeScript>
  • 38. Referencing Static Resources // Single file <apex:stylesheet value="{!$Resource.bootstrap}"/> <apex:includeScript value="{!$Resource.jquery}"/> <apex:image url="{!$Resource.logo}"/> // ZIP file <apex:stylesheet value="{!URLFOR($Resource.assets, 'css/main.css')}"/> <apex:image url="{!URLFOR($Resource.assets, 'img/logo.png')}"/> <apex:includeScript value="{!URLFOR($Resource.assets, 'js/app.js')}"/>
  • 39. Controlling HTML Page Generation • You can also take full control over HTML elements generation and position: <apex:page docType="html-5.0” applyHtmlTag="false” applyBodyTag="false"> • Add arbitrary components to Visualforce components that will be “passed through” to rendered HTML • prefix the attribute with "html-” • used to improve usability with HTML5 features such as placeholder “ghost” text, pattern client-side validation, and title help text attributes. • … and use standard HTML tags • <link rel="stylesheet" href="…"> • <script src="…">
  • 40. Referencing Static Resources // Single file <link href="{!$Resource.bootstrap}" rel="stylesheet"/> <img src="{!$Resource.logo}"/> <script src="{!$Resource.jquery}"></script> // ZIP file <link href="{!URLFOR($Resource.assets, 'css/main.css')}" rel="stylesheet"/> <img src="{!URLFOR($Resource.assets, 'img/logo.png')}"/> <script src="{!URLFOR($Resource.assets, 'js/app.js')}"></script>
  • 41. Lab 11: Static Resources • Host single page application in Visualforce page
  • 43. What is a Canvas App? • A web app integrated in your Salesforce environment • Can be written in any language – Java, .NET, PHP, Ruby on Rails, Node.js, etc. • Transparently authenticated • Context aware (logged in user, current object, etc.)
  • 44. Use Cases • Internal App • Third-Party / Partner App • External systems with web facade
  • 45. Where Can It Be Integrated? • Publisher • Page Layouts • Visualforce Pages • Tabs • Mobile Cards
  • 47. Transparent Authentication • When loading Canvas app, Salesforce instance posts Base64 encoded data to app endpoint including: – Authenticated token – Context (logged in user, current object, etc) • App decodes data using client secret • Can use authenticated token to make REST API calls
  • 48. Node.js example var decode = require('salesforce-signed-request'); var secret = process.env.CONSUMER_SECRET; app.post('/signedrequest', function(req, res) { var signedRequest = req.body.signed_request; var decodedRequest = decode(signedRequest, secret); var oauthToken = decodedRequest.client.oauthToken; var instanceUrl = decodedRequest.client.instanceUrl; var context = decodedRequest.context; });
  • 49. Lab 12: Canvas • Deploy Node.js web app to Heroku • Integrate app in Contact page layout
  • 51. Unit Testing • Code to test code • Increases quality and predictability • Unit test coverage is required to move code to production – Must have at least 75% of code covered – Coverage = lines of code exercised by tests / total line of code
  • 52. Anatomy of a Test Class @isTest private class myClass { static testMethod void myTest() { // 1. Prepare temporary data // 2. Start Test // 3. Execute some code // 4. Stop Test // 5. Assert } }
  • 53. Create Temporary Data Datetime now = System.now(); // Create speaker Speaker__c sp = new Speaker__c(First_Name__c='Al', Last_Name__c='Smith'); insert sp; // Create two sessions starting at the same time Session__c s1 = new Session__c(Name='Session1', Session_Date__c=now); insert s1; Session__c s2 = new Session__c(Name='Session2', Session_Date__c=now); insert s2; // Book speaker for session1 Session_Speaker__c booking1 = new Session_Speaker__c(Session__c=s1.Id, Speaker__c=sp.Id); insert booking1;
  • 54. Test and Assert Test.startTest(); // Try to book speaker for session2 Session_Speaker__c booking2= new Session_Speaker__c(Session__c=s2.Id, Speaker__c=sp.Id); Database.SaveResult result = Database.insert(booking2, false); Test.stopTest(); // Insert should fail: can't book same speaker for 2 sessions happening // at same time System.assert(!result.isSuccess());
  • 56. Lab 13: Unit Testing • Write the TestDoubleBooking class • Run the test
  • 58. What's a Batch? • Long-running process that runs without manual intervention • Started programmatically
  • 59. Defining a Batch Job global class SendReminderEmail implements Database.Batchable { global SendReminderEmail(String query, String subject, String body) { // Constructor: accept parameters } global Database.QueryLocator start(Database.BatchableContext bc) { // Select scope (records to process) } global void execute(Database.BatchableContext bc, List<Speaker__c> scope) { // Process data } global void finish(Database.BatchableContext bc) { // Post processing operations } }
  • 60. Running the Batch Job String q = 'SELECT First_Name__c, Last_Name__c, Email__c ' + 'FROM Speaker__c WHERE Email__c != null'; SendReminderEmail batch = new SendReminderEmail(q, 'Final Reminder', 'The conference starts next Monday'); Database.executeBatch(batch);
  • 61. What's Scheduled Job? • Unattended background program execution • Occurs at a specified time • Optionally repeated at a specified interval
  • 62. Defining a Scheduled Job global class ScheduledEmail implements Schedulable { global void execute(SchedulableContext sc) { String q = 'SELECT First_Name__c, Last_Name__c, Email__c ' +'FROM Speaker__c WHERE Email__c != null'; SendReminderEmail batch = new SendReminderEmail(q, 'Final Reminder', 'The conference starts next Monday'); Database.executeBatch(batch); } }
  • 63. Scheduling the Job (using Code) ScheduledEmail job = new ScheduledEmail(); // Run at 8AM on February 10th // (Seconds Minutes Hours Day_of_month Month Day_of_week Years) // Can use wildcards String schedule = '0 0 8 10 2 ?'; String jobId = System.schedule('Final reminder', schedule, job);
  • 64. Scheduling the Job (using Clicks)
  • 66. Lab 14: Batching and Scheduling • Write the SendReminderEmail class • Run the batch
  • 67. Samantha Ready Senior Developer Evangelist @samantha_ready Survey bit.ly/df-how-intermediate
  • 68.
  • 69. Certification Logos for “Speaker Intro Slides” For salesforce.com use only Guides for logo placement
  • 70. Example of a Table Table subtitle Column title Column title Column title Column title 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  • 71. Example of a Table Table style and coloring Column title Column title Column title Column title 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Editor's Notes

  1. Our platform is not merely a cloud hosting service, it is a series of tools and features that enable developers to be successful. On our platform, as you building your data model – you are getting a lot more than just a relational database. You get a mobile app, right out of the gate.
  2. While Salesforce is often thought of as a CRM company, it is actually so much more than that. The platform encompasses our 3 core platform services: Force.com, for building web apps natively on top of Salesforce with a direct line of access into your data. Heroku for building public, consumer applications in any language. And Exact Target with a suite of advanced marketing and automation tools. On top of that we have all of our core platform APIs to extend and integrate your applications however you requirements demand, and the Salesforce1 mobile app that gives you an instant mobile solution for your internal organization.
  3. We’re going to go through adding in programmatic functionality to an installed schema for a conference management app. This demo app manages a conference in a similar way to how we run Dreamforce—objects for sessions, speakers, and automation for session management. In this advanced track we’ll create a Visualforce page to map conference hotels, create an app outside of Salesforce and access conference data for integrations, explore different deployment options using static resources, and deploy a Node.js app to Heroku and integrate it into the standard contact page layout.
  4. They should create a brand new DE org if they have not done so recently. They should not use a Trial, Sandbox or Production org. Emphasize our DE orgs are free and do not expire (they are not product trials)
  5. Design interactive sites Interacts with HTML source code, the DOM, asynchronous Friendlier UX Language for the web, computers, laptops, tablets, smart phones, and more
  6. Salesforce loads a VF page The VF page loads the HTML and resources Uses JS remoting (if using Apex otherwise you could use VF Remote objects or REST) to talk to the server and grab data >> VF Remote objects are kind of like a Standard Controller for JS The result set of records is returned from the remote action and a result handler then parses that result set. In this case, it would create pins pased off of those records and locations
  7. Google Maps
  8. RemoteAction annotated method Its global for Salesforce1 Queries all hotels
  9. Needs to be global in S1 because a VF page is ultimately a child of the parent window (S1 app container).
  10. Green highlights where the JS invokes the remote action method in Apex The function is the handler for the result set, which in this case will plot markers on a map if the result returns a success (otherwise it will display an error message)
  11. How
  12. Visualforce elements when rendered at a run time are a composition of HTML elements Use VF if you want validation on metadata and contents to be checked by Salesforce Use raw HTML if you want full control to put tags/resources wherever you want. Stylesheets/scripts will be placed in the header regardless of placement within a VF page if you use standard VF tags.
  13. Both show appropriate VF components per use case Above shows how to reference a single file static resource Bottom shows how to traverse a zipfile to get to an individual file within it