Lightning allows developers to customize their apps to a degree not previously possible - especially when using the Lightning App Builder and the new Lightning Utility Bar. In this webinar, we will introduce you to best practices for designing component-based architecture when building advanced apps that make the most out of new Lightning Experience features.
2. Forward-Looking Statement
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 any litigation, risks associated with completed and any 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 year and in our quarterly report on Form 10-Q for the most
recent fiscal quarter. These 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.
3. Go Social!
Salesforce Developers
Salesforce Developers
Salesforce Developers
The video will be posted to YouTube & the
webinar recap page (same URL as registration).This webinar is being recorded!
@salesforcedevs / #forcewebinar
4. ▪ Don’t wait until the end to ask your question!
– Technical support will answer questions starting now.
▪ Respect Q&A etiquette
– Please don’t repeat questions. The support team is working their way
down the queue.
▪ Stick around for live Q&A at the end
– Speakers will tackle more questions at the end, time-allowing.
▪ Head to Developer Forums
– More questions? Visit developer.salesforce.com/forums
Have Questions?
5. Agenda
1. Advanced Apps for Lightning Experience
2. Lightning Component Architecture
3. Lightning Utility Bar
4. Designing for Performance
8. Let’s define the scope…
Native, built from the ground-up for Lightning Experience
Some functionality exposed in Salesforce1
Combines declarative and programmatic elements
Does not conform to 80% declarative / 20% programmatic
UX driven mostly by custom Lightning Components
Customised using declarative tools (e.g. App Builder, Metadata, Utility Bar)
Examples:
Significant customisation of Sales Cloud
Horizontal apps such as HR, Accounting
Vertical apps such as Insurance, Retail, Public Sector
9. What is an Advanced Lightning App?
Designed from the ground-up for Lightning Experience
- Some functionality exposed in Salesforce1
Combines declarative and programmatic elements
- Does not conform to 80% declarative / 20% programmatic
- UX driven mostly by custom Lightning Components
- Customised using declarative tools (e.g. App Builder, Metadata, Utility Bar)
Examples:
- Significant customisation of Sales Cloud
- Horizontal apps such as HR, Accounting
- Vertical apps such as Real Estate, Insurance, Retail, Public Sector
13. Lightning Component Architecture
Purpose Markup Comments
Service Components
Extended/used by other
components
Handle server calls
Shared code base
Minimal Extensible = true
Helper Components
Event interaction
Metadata caching
Minimal When applicable
Building Block
Components
Implement UX
functionality at different
levels of granularity
Base Lightning Components
Lightning Design System
Building Block
Components/Content
Majority of code
Experience
Components
Available in App Builder /
AppExchange for
Components
Building Block
Components/Content
Simple:
Lightning Data Service
Advanced:
Dynamic if applicable
Potentially metadata-driven
14. Lightning Components – Release Roadmap
Release Theme Components
Spring ‘17 Adding depth to single
record foundational
components
Eg: avatar,
inputSearch,
inputSelect, picklist,
inputRichText, tile, pill,
modal and notification
Summer ‘17 Introducing experience
and databound
components
Eg: inputField,
outputField, list, lookup
15. Service Component: Example
<aura:component description=”ServiceComponent" extensible="true">
<div>{!v.body}</div>
</aura:component>
callToServer function:
Parameters:
Name of Apex @AuraEnabled Method
Method Parameters
Action properties:
setAbortable()
setStorable() + ignoreExisting
setBackground()
Fires $A.enqueueAction(), defines callback function
Component Markup
Client-side Helper
19. Dynamic, metadata-driven Components
Support your own use cases
When possible support any SObject
Maximise code reusability
Simplify component logic
Providing admins with a greater degree of
flexibility…
... while simplifying App Builder experience Field to filter on
Standard actions available
Lightning actions available
Columns to display
SOQL query
Card List View title
Number of rows
Enable pagination
Reference to metadata record
Metadata:
App Builder attributes:
20. Component Tree: custom Card List View
<c:CardListView/>
<c:Header/> <c:Table/> <c:Footer/>
<c:GenericListView/>
<c:TableData/>
<c:OutputField/>
<c:OutputField/>
<c:OutputField/>
<lightning:buttonMenu/>
<lightning:buttonMenu/>
<lightning:buttonMenu/>
<lightning:(…)/><ui:(…)/> <c:Action/>
<lightning:buttonGroup/> <c:Pagination/>
App Builder
Attributes (incl.
Metadata reference)
Which type of list
view?
Handle UI events
What data to render?
Which actions?
Renders data and
actions
Record selection
Render filters?
Which mass actions?
Display and fire mass
actions
Display and fire
record-level actions
Links e.g.
Visualforce, Record
Home Page
Render pagination?
Or link to list view?
Display and fire
pagination events
Component event
bubbles up, handled,
pagination attributes
updated
22. Firing Platform Actions
Which actions to display?
Metadata – pre-selected actions
Display all available actions for SObject in specific context
Query PlatformAction object to obtain action type e.g.:
Action Type Examples Implementation
Standard Action View, Edit Fire createRecord, editRecord event
Visualforce Action E-mail PDF CV Fire force:navigateToURL event
Lightning Action Reject Candidate
Display Modal, inject Lightning Component, pass
appropriate parameters
24. Utility Bar Overview
Always available
Unique per app
Flexipage containing a number of Lightning
Components – Standard or custom
Customisable via UI (Spring ‘17)
Component Properties:
Height + Width
Icon + Label
Background Load
25. Dynamic Content in the Utility Bar
<c:UtilityBarMenu/> UtilityBarController
UtilityBarConfig__c
Menu
Metadata
Handles c:PageChanged events
<c:CardListView/>
<c:PageChanged/>
Application Event
On click
Containing e.g. help
button
27. SOQL Queries Limit
Typical of chatty custom Experience Components
Cause:
Calls to server on init are aggregated into same Apex transaction
Mitigation:
Use Lightning Data Service when possible
Use cached data (for static data/metadata)
Leverage Custom Metadata Types
Do not count against SOQL Limits
Use setBackground() on calls to server
Calls processed separately, designed for lower priority calls but generally processed quickly
Chain component loading by groups
Last component to load in a group fires application event to load 2nd group – and so on
28. Performance Best Practices
Enable Secure Cache and LockerService
Disable Lightning Components debugging
Use Lightning Data Service when possible
Lazy load when appropriate
Load data upon user intervention (e.g. click)
Pre-load when possible
Load data in background (especially static data)
Use setStorable() on calls to server
Local cache provides recent copy of data. Separate call to server takes place to obtain refreshed
copy
Implement data store for metadata/data that remains static