You are on page 1of 34

Develop Lightning Components faster with

Lightning Data Service


Fabien Taillon – Salesforce MVP – CTO @
@FabienTaillon

Madrid 1st June 2017


Fabien Taillon
Salesforce MVP

CTO @TEXEÏ

Paris Developer Group co-leader

French Touch Dreamin co-organizer

@FabienTaillon

www.fabientaillon.com
Lightning Page made of several Components
Lightning Page made of several Components
Before Lightning Data Service
Component 1

Markup JS Controller

Component 2

Markup JS Controller Apex Controller

Component 3

Markup JS Controller
Or worse…
Component 1

Markup JS Controller Apex Controller 1

Component 2

Markup JS Controller Apex Controller 2

Component 3

Markup JS Controller Apex Controller 3


3 queries to get almost the same fields
Component 1
Name, Phone, Address, MyField__c Apex Controller 1
Markup JS Controller

Component 2

Markup Name, Phone, Email


JS Controller Apex Controller 2

Component 3
Name, Address, MySecondField__c Apex Controller 3
Markup JS Controller
3 queries to get almost the same fields
Component 1
Name, Phone, Address, MyField__c Apex Controller 1
Markup JS Controller

Component 2

Markup Name, Phone, Email


JS Controller Apex Controller 2

Component 3
Name, Address, MySecondField__c Apex Controller 3
Markup JS Controller
With Lightning Data Service
Component 1

Markup

Component 2
LDS
Controller
Markup Record Cache

Component 3

Markup
Only 1 query with all the fields !
Component 1
Name, Phone,
Markup
Address, MyField__c

Component 2 Name, Phone, Address,


LDS
Name, Phone, Email Email, MyField__c,
Controller
Markup RecordMySecondField__c
Cache

Component 3
Name, Address,
MySecondField__c
Markup
No server call if data already in the cache
Component 1
Name, Phone,
Markup
Address, MyField__c

Component 2
Name, Phone, Email LDS
Markup Controller
Record Cache
Component 3
Name, Address, Name, Phone,
Markup
MySecondField__c Address, Email,
MyField__c,
MySecondField__c
Component 4

Markup
From a code point of view: from this…
Component 1

Markup JS Controller Apex Controller 1

Component 2

Markup JS Controller Apex Controller 2

Component 3

Markup JS Controller Apex Controller 3


To this !
Component 1

Markup JS Controller Apex Controller 1

Component 2

Markup JS Controller Apex Controller 2

Component 3

Markup JS Controller Apex Controller 3


To this !
Component 1

Markup JS Controller Apex Controller 1

Component 2

Markup JS Controller Apex Controller 2

Component 3

Markup JS Controller Apex Controller 3


To this !
Component 1

Markup JS Controller Apex Controller 1

Component 2

Markup JS Controller Apex Controller 2

Component 3

Markup JS Controller Apex Controller 3


To this !
Component 1

Markup JS Controller Apex Controller 1

Component 2

Markup JS Controller Apex Controller 2

Component 3

Markup JS Controller Apex Controller 3


Code before: Markup
Code before: Markup
Code before: Markup
Code before: JS
Code before: JS
Code before: JS
Code before: JS
Code before: Apex Class

+ TEST CLASS !
Code after: Only markup !
Code after: Only markup !
Better performances, less code !
Markup JS Apex
Without Lightning Data Service

TEST
CLASS

With Lightning Data Service


Better performances, less code !
Methods: Save, Delete
Methods: Save, Delete
Benefits
No Apex !

Security

• CRUD

• Field Level Security

Shared cache

• Less server calls → Better performances

• Record values updated across components → Coherent values displayed

• Component notified only if the field updated is used by the cmp → Less code executed

Id is used, not sObject Type → Same Component can be used for different objects
Where it’s (supposed to be) going
Out of Beta

More objects supported (ex: Opportunity isn’t supported)

List Support

Support outside of LEX/SF1 (ex: Lightning Out)


Madrid 1st June 2017

Q&A

You might also like