SlideShare une entreprise Scribd logo
Toulouse-Salesforce-
Developer-Group
Bienvenue
Lightning Component
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 Website.
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.
Sommaire
• Les outils
• Cas métier
• Le composant lightning
• Le bouton
Les outils
Les outils
• Console du développeur
• Eclipse
– https://www.eclipse.org/downloads/
• Sublime Text
– https://www.sublimetext.com/
• Visual Studio Code
– https://code.visualstudio.com/
*Chacun des outils nécessite un plug-in additionnel
Cas métier
Cas métier
• Dans ma société, j’ai besoin que les utilisateurs
puissent désactiver un contact rapidement.
• Attention, cette désactivation n’est possible que si je
dispose d’au moins un contact actif sur le compte.
Cas métier
Compte
Contact
Un compte peut avoir de 1 à plusieurs contacts.
Je dois avoir au moins 1 contact actif sur le compte.
Le contrôleur
ContactDesactivateCtrl.cls
 Le contrôleur APEX contiendra 3 fonctions.
 getContact
 me retourne l’enregistrement de contact sur lequel mon bouton se
trouve
 getHasContact
 me retourne le nombre de contacts actifs sur le
compte
 saveContact
 enregistre les modifications sur le contact
ContactDesactivateCtrl.cls
public class PXS_ContactDesactivateCtrl {
@AuraEnabled
public static Contact getContact(String contactId){
return [select Id,
Name,
Actif__c,
RecordTypeId,
OwnerId,
AccountId
from Contact
where Id =:contactId
limit 1];
}
}
A RETENIR :
- l’attribut « @AuraEnabled » est obligatoire
pour un appel depuis un composant lightning
- La méthode doit être « static »
ContactDesactivateCtrl.cls
@AuraEnabled
public static Integer getHasContact(String contactId){
Contact Cnt = [Select Id, AccountId from Contact where Id=:contactId];
list<Contact> ExistingContacts = [select Id,
Name
from Contact
where AccountId =: Cnt.AccountId
and Actif__c=:true
return (ExistingContacts.size());
}
ContactDesactivateCtrl.cls
@AuraEnabled
public static Contact saveContact(String jsonContact){
Contact cnt = (Contact) JSON.deserialize(jsonContact, Contact.class);
cnt.Actif__c = false;
cnt.OwnerId = userInfo.getUserId();
database.update(cnt);
return cnt;
}
Le composant
Le composant
Le composant devra :
 Disposer d’un bouton retour
 Disposer d’un bouton sauvegarder
 Nous fournir un message différent en cas de succès
ou d’erreur lors de l’enregistrement
Le composant
Le composant est découpé en sous composants
- Le fichier cmp
- Il contient le balisage (HTML)
- Le fichier controller
- Fichier JS : les fonctions de base utilisées dans notre composant
- Le fichier helper
- Fichier JS : les fonctions avancées utilisées dans le contrôleur
- Le fichier css
- Il contient les css utilisées dans le composant
Le composant :
La partie front du composant
ContactDesactivate.cmp
<aura:component controller="ContactDesactivateCtrl" implements="force:LightningQuickActionWithoutHeader,force:hasRecordId">
<aura:attribute name="Contact" type="Contact" default="{'sobjectType':'Contact'}" />
<aura:attribute name="hasContact" type="Integer" default="1" />
<aura:attribute name="recordId" type="String" />
<aura:handler name="init" action="{!c.doInit}" value="{!this}"/>
<aura:if istrue="{!v.hasContact == 1}">
{!$Label.c.ContactDesactivate_Block}
<ui:button label="{!$Label.c.BtnBack}" press="{!c.BtnBack}"/>
<aura:set attribute="else">
{!$Label.c.ContactDesactivate_Confirm}<br/>
<ui:button label="{!$Label.c.BtnBack}" press="{!c.BtnBack}"/>
<ui:button class="slds-button slds-button_brand" label="{!$Label.c.BtnSubmit}" press="{!c.BtnSubmit}" />
</aura:set>
</aura:if>
</aura:component>
A RETENIR:
Attention au « V » & au « C »
 "{!v.hasContact}" fait appel à une variable du composant
 "{!c.BtnBack} " fait appel à une fonction javascript
Le composant :
Le contrôleur javascript
Fonction type (Javascript)
NomDeLaFonction : function(component, event, helper) {
//Récuperation de la méthode APEX
var action = component.get("c.saveContact");
//Affectation des paramètres
action.setParams({
"jsonContact":JSON.stringify(component.get("v.Contact"))
});
// la fonction de call Back
action.setCallback(this, function(a) {
var state = a.getState();
if (state === "SUCCESS") {
}else if (state === "ERROR"){
btn.set("v.disabled",false);
var errors = response.getError();
}
});
// Execute la fonction
$A.enqueueAction(action);
},
A RETENIR
var action = component.get("c.saveContact");
=> Le « c » permet d’indiquer que je vais rechercher la fonction sur le contrôlleur
"jsonContact":JSON.stringify(component.get("v.Contact"))
=> « JSON.stringify » permet de convertir en « String » ma variable
action.setCallback(this, function(a) {…})
=> La fonction de « callback » correspond au retour lors de l’appel de la fonction APEX
$A.enqueueAction(action);
=> Permet de faire l’appel de la fonction précédemment initiée
Javascript est sensible à la casse : « A » est différent de « a »
ContactDesactivateController.js
({
doInit : function(component, event, helper) {
helper.retrieveContact(component);
helper.hHasContact(component);
},
BtnBack : function(component, event, helper) {
helper.backFunction();
},
BtnSubmit: function(component, event, helper) {
helper.btnSaveContact(component, event);
}
}
A RETENIR
helper.backFunction();
=> Fait appel à la fonction nommée « backFunction » se trouvant
dans le helper JS
Le composant :
Le helper
PXS_ContactDesactivateHelper.js
({
retrieveContact : function(component) {
var action = component.get("c.getContact");
action.setParams({
"contactId":component.get("v.recordId")
});
action.setCallback(this, function(a) {
var state = a.getState();
if (state === "SUCCESS") {
component.set("v.Contact", a.getReturnValue());
}else if (state === "ERROR"){
var errors = response.getError();
}
});
$A.enqueueAction(action);
},
A RETENIR
- Les noms de fonction du contrôleur JS,
du helper et du contrôleur APEX doivent
être différents.
PXS_ContactDesactivateHelper.js
hHasContact : function(component) {
var action = component.get("c.getHasContact");
action.setParams({
"contactId":component.get("v.recordId")
});
action.setCallback(this, function(a) {
var state = a.getState();
if (state === "SUCCESS") {
component.set("v.hasContact", a.getReturnValue());
//this.createComponent(component, a.getReturnValue());
}else if (state === "ERROR"){
var errors = response.getError();
}
});
$A.enqueueAction(action);
},
backFunction : function() {
// Close the action panel
var dismissActionPanel = $A.get("e.force:closeQuickAction");
dismissActionPanel.fire();
},
PXS_ContactDesactivateHelper.js
btnSaveContact : function(component, event) {
//inactive Btn
var btn = event.getSource();
btn.set("v.disabled",true);
var action = component.get("c.saveContact");
action.setParams({
"jsonContact":JSON.stringify(component.get("v.Contact"))
});
action.setCallback(this, function(a) {
var state = a.getState();
if (state === "SUCCESS") {
component.set("v.Contact", a.getReturnValue());
//inform user
var resultsToast = $A.get("e.force:showToast");
resultsToast.setParams({
"title": "Success",
"type":"success",
"message": "Contact désactivé avec succès..."
});
resultsToast.fire();
var urlEvent = $A.get("e.force:navigateToURL");
urlEvent.setParams({
"url": "/" + component.get("v.Contact.AccountId")
});
urlEvent.fire();
}else if (state === "ERROR"){
btn.set("v.disabled",false);
var errors = response.getError();
console.log("Error message : ", errors);
}
});
$A.enqueueAction(action);
},
Le bouton
Lightning action button
Pour cela, je clique sur le menu
« Buttons, Links and Actions »
puis sur le bouton « New Action ».
Afin d’ouvrir notre composant, je vais créer
une action lightning.
Le rendu final
Le rendu final
Le bouton permettant de désactiver un contact est disponible.
Le rendu final
La fenêtre s’ouvre, nous pouvons « valider » ou « annuler »
Le rendu final
Le message de succès apparait après la modification
Ligthning Component
Ligthning Component

Contenu connexe

Tendances

Service Cloud : offrez un service client d’excellence
Service Cloud : offrez un service client d’excellenceService Cloud : offrez un service client d’excellence
Service Cloud : offrez un service client d’excellenceSalesforce France
 
*French Webinar* Intro to building mobile apps - no code required
*French Webinar* Intro to building mobile apps - no code required*French Webinar* Intro to building mobile apps - no code required
*French Webinar* Intro to building mobile apps - no code requiredSalesforce Developers
 
Sales Cloud : décuplez vos ventes
Sales Cloud : décuplez vos ventesSales Cloud : décuplez vos ventes
Sales Cloud : décuplez vos ventesSalesforce France
 
Marketing Cloud : personnalisez votre marketing
Marketing Cloud : personnalisez votre marketingMarketing Cloud : personnalisez votre marketing
Marketing Cloud : personnalisez votre marketingSalesforce France
 
Analytics Cloud : boostez l’analyse de vos données
Analytics Cloud : boostez l’analyse de vos donnéesAnalytics Cloud : boostez l’analyse de vos données
Analytics Cloud : boostez l’analyse de vos donnéesSalesforce France
 
Salesforce Summer Release '20
Salesforce Summer Release '20Salesforce Summer Release '20
Salesforce Summer Release '20Salesforce France
 
Success cloud : allez plus loin avec Salesforce
Success cloud : allez plus loin avec SalesforceSuccess cloud : allez plus loin avec Salesforce
Success cloud : allez plus loin avec SalesforceSalesforce France
 
Comment Salesforce utilise Salesforce
Comment Salesforce utilise SalesforceComment Salesforce utilise Salesforce
Comment Salesforce utilise SalesforceSalesforce France
 
Vos applications en deux temps trois clics avec App Cloud
Vos applications en deux temps trois clics avec App CloudVos applications en deux temps trois clics avec App Cloud
Vos applications en deux temps trois clics avec App CloudSalesforce France
 
pour votre CRM: osez la data quality!
pour votre CRM: osez la data quality!pour votre CRM: osez la data quality!
pour votre CRM: osez la data quality!Uniserv
 
"Ça va signer" avec Sales Cloud !
"Ça va signer" avec Sales Cloud !"Ça va signer" avec Sales Cloud !
"Ça va signer" avec Sales Cloud !Salesforce France
 
Les données changent la donne avec Wave Analytics
Les données changent la donne avec Wave AnalyticsLes données changent la donne avec Wave Analytics
Les données changent la donne avec Wave AnalyticsSalesforce France
 
Start-up et PME : les secrets de la relation client - Salesforce World Tour P...
Start-up et PME : les secrets de la relation client - Salesforce World Tour P...Start-up et PME : les secrets de la relation client - Salesforce World Tour P...
Start-up et PME : les secrets de la relation client - Salesforce World Tour P...Salesforce France
 
Salesforce Winter Release 2021
Salesforce Winter Release 2021Salesforce Winter Release 2021
Salesforce Winter Release 2021Salesforce France
 
Commerce et distribution : devenez #1 dans le cœur de vos clients
Commerce et distribution : devenez #1 dans le cœur de vos clientsCommerce et distribution : devenez #1 dans le cœur de vos clients
Commerce et distribution : devenez #1 dans le cœur de vos clientsSalesforce France
 
Connectez vos agents au terrain en alliant Field Service aux objets connectés
Connectez vos agents au terrain en alliant Field Service aux objets connectésConnectez vos agents au terrain en alliant Field Service aux objets connectés
Connectez vos agents au terrain en alliant Field Service aux objets connectésSalesforce France
 

Tendances (19)

Service Cloud : offrez un service client d’excellence
Service Cloud : offrez un service client d’excellenceService Cloud : offrez un service client d’excellence
Service Cloud : offrez un service client d’excellence
 
Salesforce pour la banque
Salesforce pour la banqueSalesforce pour la banque
Salesforce pour la banque
 
*French Webinar* Intro to building mobile apps - no code required
*French Webinar* Intro to building mobile apps - no code required*French Webinar* Intro to building mobile apps - no code required
*French Webinar* Intro to building mobile apps - no code required
 
Sales Cloud : décuplez vos ventes
Sales Cloud : décuplez vos ventesSales Cloud : décuplez vos ventes
Sales Cloud : décuplez vos ventes
 
Marketing Cloud : personnalisez votre marketing
Marketing Cloud : personnalisez votre marketingMarketing Cloud : personnalisez votre marketing
Marketing Cloud : personnalisez votre marketing
 
Analytics Cloud : boostez l’analyse de vos données
Analytics Cloud : boostez l’analyse de vos donnéesAnalytics Cloud : boostez l’analyse de vos données
Analytics Cloud : boostez l’analyse de vos données
 
Salesforce pour l'assurance
Salesforce pour l'assuranceSalesforce pour l'assurance
Salesforce pour l'assurance
 
Salesforce Summer Release '20
Salesforce Summer Release '20Salesforce Summer Release '20
Salesforce Summer Release '20
 
Success cloud : allez plus loin avec Salesforce
Success cloud : allez plus loin avec SalesforceSuccess cloud : allez plus loin avec Salesforce
Success cloud : allez plus loin avec Salesforce
 
Comment Salesforce utilise Salesforce
Comment Salesforce utilise SalesforceComment Salesforce utilise Salesforce
Comment Salesforce utilise Salesforce
 
Vos applications en deux temps trois clics avec App Cloud
Vos applications en deux temps trois clics avec App CloudVos applications en deux temps trois clics avec App Cloud
Vos applications en deux temps trois clics avec App Cloud
 
pour votre CRM: osez la data quality!
pour votre CRM: osez la data quality!pour votre CRM: osez la data quality!
pour votre CRM: osez la data quality!
 
Salesforce pour le retail
Salesforce pour le retailSalesforce pour le retail
Salesforce pour le retail
 
"Ça va signer" avec Sales Cloud !
"Ça va signer" avec Sales Cloud !"Ça va signer" avec Sales Cloud !
"Ça va signer" avec Sales Cloud !
 
Les données changent la donne avec Wave Analytics
Les données changent la donne avec Wave AnalyticsLes données changent la donne avec Wave Analytics
Les données changent la donne avec Wave Analytics
 
Start-up et PME : les secrets de la relation client - Salesforce World Tour P...
Start-up et PME : les secrets de la relation client - Salesforce World Tour P...Start-up et PME : les secrets de la relation client - Salesforce World Tour P...
Start-up et PME : les secrets de la relation client - Salesforce World Tour P...
 
Salesforce Winter Release 2021
Salesforce Winter Release 2021Salesforce Winter Release 2021
Salesforce Winter Release 2021
 
Commerce et distribution : devenez #1 dans le cœur de vos clients
Commerce et distribution : devenez #1 dans le cœur de vos clientsCommerce et distribution : devenez #1 dans le cœur de vos clients
Commerce et distribution : devenez #1 dans le cœur de vos clients
 
Connectez vos agents au terrain en alliant Field Service aux objets connectés
Connectez vos agents au terrain en alliant Field Service aux objets connectésConnectez vos agents au terrain en alliant Field Service aux objets connectés
Connectez vos agents au terrain en alliant Field Service aux objets connectés
 

Similaire à Ligthning Component

Comment exploiter facilement une API avec les Flows
Comment exploiter facilement une API avec les FlowsComment exploiter facilement une API avec les Flows
Comment exploiter facilement une API avec les FlowsThierry TROUIN ☁
 
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  la validation.pdflaravel.sillo.org-Cours Laravel 10  les bases  la validation.pdf
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdfHeartKing10
 
9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...
9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...
9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...François Perret
 
Cocoheads react native + redux par Nicolas Fontaine
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas FontaineIdean France
 
Bluetooth Low Energy dans les applications Windows
Bluetooth Low Energy dans les applications WindowsBluetooth Low Energy dans les applications Windows
Bluetooth Low Energy dans les applications WindowsMicrosoft
 
Projet base de donnée
Projet base de donnée Projet base de donnée
Projet base de donnée MakremArfaoui2
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Tarik Zakaria Benmerar
 
Community Cloud : réinventez votre engagement client
Community Cloud : réinventez votre engagement clientCommunity Cloud : réinventez votre engagement client
Community Cloud : réinventez votre engagement clientSalesforce France
 
Field service : orchestrez et connectez vos interventions terrain - Salesforc...
Field service : orchestrez et connectez vos interventions terrain - Salesforc...Field service : orchestrez et connectez vos interventions terrain - Salesforc...
Field service : orchestrez et connectez vos interventions terrain - Salesforc...Salesforce France
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...
Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...
Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...Club Alliances
 
Visual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@NoumeaVisual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@NoumeaJulien Chable
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorArthurMaroulier
 
diagramme des cas d'utilisation
diagramme des cas d'utilisationdiagramme des cas d'utilisation
diagramme des cas d'utilisationAmir Souissi
 
Mode Emploi Méthode Marketing FR WEB
Mode Emploi Méthode Marketing FR WEBMode Emploi Méthode Marketing FR WEB
Mode Emploi Méthode Marketing FR WEBElise Macé
 
Plan cahier-des-charges
Plan cahier-des-chargesPlan cahier-des-charges
Plan cahier-des-chargeswalouziz
 
Comment Challenger les ApexDebugLog et comment améliorer leur analyse
Comment Challenger les ApexDebugLog et comment améliorer leur analyseComment Challenger les ApexDebugLog et comment améliorer leur analyse
Comment Challenger les ApexDebugLog et comment améliorer leur analyseThierry TROUIN ☁
 
MuleSoft - Women in Tech Groupe - FR.pdf
MuleSoft - Women in Tech Groupe - FR.pdfMuleSoft - Women in Tech Groupe - FR.pdf
MuleSoft - Women in Tech Groupe - FR.pdfyosra Saidani
 
Service gagnant : jeu, CSAT et match !
Service gagnant : jeu, CSAT et match !Service gagnant : jeu, CSAT et match !
Service gagnant : jeu, CSAT et match !Salesforce France
 

Similaire à Ligthning Component (20)

Comment exploiter facilement une API avec les Flows
Comment exploiter facilement une API avec les FlowsComment exploiter facilement une API avec les Flows
Comment exploiter facilement une API avec les Flows
 
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  la validation.pdflaravel.sillo.org-Cours Laravel 10  les bases  la validation.pdf
laravel.sillo.org-Cours Laravel 10 les bases la validation.pdf
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...
9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...
9 Hacks pour Booster votre Account Engagement (fka Pardot) - Wébinaire - 2023...
 
Cocoheads react native + redux par Nicolas Fontaine
Cocoheads   react native + redux par Nicolas FontaineCocoheads   react native + redux par Nicolas Fontaine
Cocoheads react native + redux par Nicolas Fontaine
 
Bluetooth Low Energy dans les applications Windows
Bluetooth Low Energy dans les applications WindowsBluetooth Low Energy dans les applications Windows
Bluetooth Low Energy dans les applications Windows
 
Projet base de donnée
Projet base de donnée Projet base de donnée
Projet base de donnée
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
 
Community Cloud : réinventez votre engagement client
Community Cloud : réinventez votre engagement clientCommunity Cloud : réinventez votre engagement client
Community Cloud : réinventez votre engagement client
 
Field service : orchestrez et connectez vos interventions terrain - Salesforc...
Field service : orchestrez et connectez vos interventions terrain - Salesforc...Field service : orchestrez et connectez vos interventions terrain - Salesforc...
Field service : orchestrez et connectez vos interventions terrain - Salesforc...
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...
Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...
Hébergement SaaS ASP - Forum Solutions-as-a-Service du Club Alliances IBM - 2...
 
Visual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@NoumeaVisual studio 2017 Launch keynote - Afterworks@Noumea
Visual studio 2017 Launch keynote - Afterworks@Noumea
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme Meteor
 
diagramme des cas d'utilisation
diagramme des cas d'utilisationdiagramme des cas d'utilisation
diagramme des cas d'utilisation
 
Mode Emploi Méthode Marketing FR WEB
Mode Emploi Méthode Marketing FR WEBMode Emploi Méthode Marketing FR WEB
Mode Emploi Méthode Marketing FR WEB
 
Plan cahier-des-charges
Plan cahier-des-chargesPlan cahier-des-charges
Plan cahier-des-charges
 
Comment Challenger les ApexDebugLog et comment améliorer leur analyse
Comment Challenger les ApexDebugLog et comment améliorer leur analyseComment Challenger les ApexDebugLog et comment améliorer leur analyse
Comment Challenger les ApexDebugLog et comment améliorer leur analyse
 
MuleSoft - Women in Tech Groupe - FR.pdf
MuleSoft - Women in Tech Groupe - FR.pdfMuleSoft - Women in Tech Groupe - FR.pdf
MuleSoft - Women in Tech Groupe - FR.pdf
 
Service gagnant : jeu, CSAT et match !
Service gagnant : jeu, CSAT et match !Service gagnant : jeu, CSAT et match !
Service gagnant : jeu, CSAT et match !
 

Plus de Thierry TROUIN ☁

AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsThierry TROUIN ☁
 
TunisUserGroup - Ecosysteme salesforce.pptx
TunisUserGroup -  Ecosysteme salesforce.pptxTunisUserGroup -  Ecosysteme salesforce.pptx
TunisUserGroup - Ecosysteme salesforce.pptxThierry TROUIN ☁
 
Controle de configuration ou fuite de donnees, comment mieux securiser SFDC
Controle de configuration ou fuite de donnees, comment mieux securiser SFDCControle de configuration ou fuite de donnees, comment mieux securiser SFDC
Controle de configuration ou fuite de donnees, comment mieux securiser SFDCThierry TROUIN ☁
 
Monia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
Monia, l’IAssistante qui aide vos equipes a closer leurs OpportunitesMonia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
Monia, l’IAssistante qui aide vos equipes a closer leurs OpportunitesThierry TROUIN ☁
 
Sales enablement, e-signature, closing & automations dans Salesforce
Sales enablement, e-signature, closing & automations dans SalesforceSales enablement, e-signature, closing & automations dans Salesforce
Sales enablement, e-signature, closing & automations dans SalesforceThierry TROUIN ☁
 
Les formulaires web dans salesforce
Les formulaires web dans salesforceLes formulaires web dans salesforce
Les formulaires web dans salesforceThierry TROUIN ☁
 
Découvrez les enquêtes de satisfaction dans Salesforce
Découvrez les enquêtes de satisfaction dans SalesforceDécouvrez les enquêtes de satisfaction dans Salesforce
Découvrez les enquêtes de satisfaction dans SalesforceThierry TROUIN ☁
 
Winter-23-French-Gathering+Dreamforce
Winter-23-French-Gathering+DreamforceWinter-23-French-Gathering+Dreamforce
Winter-23-French-Gathering+DreamforceThierry TROUIN ☁
 
Meetup Cameroun - Presentation SFDC
Meetup Cameroun - Presentation SFDCMeetup Cameroun - Presentation SFDC
Meetup Cameroun - Presentation SFDCThierry TROUIN ☁
 
Construire sa strategie de gestion des donnees Salesforce avec Odaseva
Construire sa strategie de gestion des donnees Salesforce avec OdasevaConstruire sa strategie de gestion des donnees Salesforce avec Odaseva
Construire sa strategie de gestion des donnees Salesforce avec OdasevaThierry TROUIN ☁
 
Data Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV EllisphereData Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV EllisphereThierry TROUIN ☁
 
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-source
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-sourceSimplifiez vos journées avec sfdx-hardis et l’écosystème open-source
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-sourceThierry TROUIN ☁
 
Ameliorez vos parcours omnicanaux avec Marketing Cloud
Ameliorez vos parcours omnicanaux avec Marketing CloudAmeliorez vos parcours omnicanaux avec Marketing Cloud
Ameliorez vos parcours omnicanaux avec Marketing CloudThierry TROUIN ☁
 
Bien Démarrer avec Pardot: Comment délivrer un engagement client connecté
Bien Démarrer avec Pardot: Comment délivrer un engagement client connectéBien Démarrer avec Pardot: Comment délivrer un engagement client connecté
Bien Démarrer avec Pardot: Comment délivrer un engagement client connectéThierry TROUIN ☁
 
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et PardotAmeliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et PardotThierry TROUIN ☁
 
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheck
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheckDebarrassez-vous de la dette technique dans votre organisation avec OrgCheck
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheckThierry TROUIN ☁
 
How to build a Salesforce DevOps process with Gearset
How to build a Salesforce DevOps process with GearsetHow to build a Salesforce DevOps process with Gearset
How to build a Salesforce DevOps process with GearsetThierry TROUIN ☁
 
OwnBackup, la plateforme #1 de Data Gouvernance pour Salesforce
OwnBackup, la plateforme #1 de Data Gouvernance pour SalesforceOwnBackup, la plateforme #1 de Data Gouvernance pour Salesforce
OwnBackup, la plateforme #1 de Data Gouvernance pour SalesforceThierry TROUIN ☁
 

Plus de Thierry TROUIN ☁ (20)

AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
TunisUserGroup - Ecosysteme salesforce.pptx
TunisUserGroup -  Ecosysteme salesforce.pptxTunisUserGroup -  Ecosysteme salesforce.pptx
TunisUserGroup - Ecosysteme salesforce.pptx
 
Controle de configuration ou fuite de donnees, comment mieux securiser SFDC
Controle de configuration ou fuite de donnees, comment mieux securiser SFDCControle de configuration ou fuite de donnees, comment mieux securiser SFDC
Controle de configuration ou fuite de donnees, comment mieux securiser SFDC
 
Monia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
Monia, l’IAssistante qui aide vos equipes a closer leurs OpportunitesMonia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
Monia, l’IAssistante qui aide vos equipes a closer leurs Opportunites
 
Sales enablement, e-signature, closing & automations dans Salesforce
Sales enablement, e-signature, closing & automations dans SalesforceSales enablement, e-signature, closing & automations dans Salesforce
Sales enablement, e-signature, closing & automations dans Salesforce
 
Les formulaires web dans salesforce
Les formulaires web dans salesforceLes formulaires web dans salesforce
Les formulaires web dans salesforce
 
Découvrez les enquêtes de satisfaction dans Salesforce
Découvrez les enquêtes de satisfaction dans SalesforceDécouvrez les enquêtes de satisfaction dans Salesforce
Découvrez les enquêtes de satisfaction dans Salesforce
 
Winter-23-French-Gathering+Dreamforce
Winter-23-French-Gathering+DreamforceWinter-23-French-Gathering+Dreamforce
Winter-23-French-Gathering+Dreamforce
 
Meetup Cameroun - Presentation SFDC
Meetup Cameroun - Presentation SFDCMeetup Cameroun - Presentation SFDC
Meetup Cameroun - Presentation SFDC
 
Construire sa strategie de gestion des donnees Salesforce avec Odaseva
Construire sa strategie de gestion des donnees Salesforce avec OdasevaConstruire sa strategie de gestion des donnees Salesforce avec Odaseva
Construire sa strategie de gestion des donnees Salesforce avec Odaseva
 
Summer-22-FG-Mai-2022
Summer-22-FG-Mai-2022Summer-22-FG-Mai-2022
Summer-22-FG-Mai-2022
 
Data Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV EllisphereData Quality : Presentation de ISV Ellisphere
Data Quality : Presentation de ISV Ellisphere
 
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-source
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-sourceSimplifiez vos journées avec sfdx-hardis et l’écosystème open-source
Simplifiez vos journées avec sfdx-hardis et l’écosystème open-source
 
Ameliorez vos parcours omnicanaux avec Marketing Cloud
Ameliorez vos parcours omnicanaux avec Marketing CloudAmeliorez vos parcours omnicanaux avec Marketing Cloud
Ameliorez vos parcours omnicanaux avec Marketing Cloud
 
Bien Démarrer avec Pardot: Comment délivrer un engagement client connecté
Bien Démarrer avec Pardot: Comment délivrer un engagement client connectéBien Démarrer avec Pardot: Comment délivrer un engagement client connecté
Bien Démarrer avec Pardot: Comment délivrer un engagement client connecté
 
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et PardotAmeliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
Ameliorez votre Marketing : Introduction aux solutions Marketing Cloud et Pardot
 
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheck
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheckDebarrassez-vous de la dette technique dans votre organisation avec OrgCheck
Debarrassez-vous de la dette technique dans votre organisation avec OrgCheck
 
Release Winter 22 FR
Release Winter 22 FRRelease Winter 22 FR
Release Winter 22 FR
 
How to build a Salesforce DevOps process with Gearset
How to build a Salesforce DevOps process with GearsetHow to build a Salesforce DevOps process with Gearset
How to build a Salesforce DevOps process with Gearset
 
OwnBackup, la plateforme #1 de Data Gouvernance pour Salesforce
OwnBackup, la plateforme #1 de Data Gouvernance pour SalesforceOwnBackup, la plateforme #1 de Data Gouvernance pour Salesforce
OwnBackup, la plateforme #1 de Data Gouvernance pour Salesforce
 

Ligthning Component

  • 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 Website. 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. Sommaire • Les outils • Cas métier • Le composant lightning • Le bouton
  • 5. Les outils • Console du développeur • Eclipse – https://www.eclipse.org/downloads/ • Sublime Text – https://www.sublimetext.com/ • Visual Studio Code – https://code.visualstudio.com/ *Chacun des outils nécessite un plug-in additionnel
  • 7. Cas métier • Dans ma société, j’ai besoin que les utilisateurs puissent désactiver un contact rapidement. • Attention, cette désactivation n’est possible que si je dispose d’au moins un contact actif sur le compte.
  • 8. Cas métier Compte Contact Un compte peut avoir de 1 à plusieurs contacts. Je dois avoir au moins 1 contact actif sur le compte.
  • 10. ContactDesactivateCtrl.cls  Le contrôleur APEX contiendra 3 fonctions.  getContact  me retourne l’enregistrement de contact sur lequel mon bouton se trouve  getHasContact  me retourne le nombre de contacts actifs sur le compte  saveContact  enregistre les modifications sur le contact
  • 11. ContactDesactivateCtrl.cls public class PXS_ContactDesactivateCtrl { @AuraEnabled public static Contact getContact(String contactId){ return [select Id, Name, Actif__c, RecordTypeId, OwnerId, AccountId from Contact where Id =:contactId limit 1]; } } A RETENIR : - l’attribut « @AuraEnabled » est obligatoire pour un appel depuis un composant lightning - La méthode doit être « static »
  • 12. ContactDesactivateCtrl.cls @AuraEnabled public static Integer getHasContact(String contactId){ Contact Cnt = [Select Id, AccountId from Contact where Id=:contactId]; list<Contact> ExistingContacts = [select Id, Name from Contact where AccountId =: Cnt.AccountId and Actif__c=:true return (ExistingContacts.size()); }
  • 13. ContactDesactivateCtrl.cls @AuraEnabled public static Contact saveContact(String jsonContact){ Contact cnt = (Contact) JSON.deserialize(jsonContact, Contact.class); cnt.Actif__c = false; cnt.OwnerId = userInfo.getUserId(); database.update(cnt); return cnt; }
  • 15. Le composant Le composant devra :  Disposer d’un bouton retour  Disposer d’un bouton sauvegarder  Nous fournir un message différent en cas de succès ou d’erreur lors de l’enregistrement
  • 16. Le composant Le composant est découpé en sous composants - Le fichier cmp - Il contient le balisage (HTML) - Le fichier controller - Fichier JS : les fonctions de base utilisées dans notre composant - Le fichier helper - Fichier JS : les fonctions avancées utilisées dans le contrôleur - Le fichier css - Il contient les css utilisées dans le composant
  • 17. Le composant : La partie front du composant
  • 18. ContactDesactivate.cmp <aura:component controller="ContactDesactivateCtrl" implements="force:LightningQuickActionWithoutHeader,force:hasRecordId"> <aura:attribute name="Contact" type="Contact" default="{'sobjectType':'Contact'}" /> <aura:attribute name="hasContact" type="Integer" default="1" /> <aura:attribute name="recordId" type="String" /> <aura:handler name="init" action="{!c.doInit}" value="{!this}"/> <aura:if istrue="{!v.hasContact == 1}"> {!$Label.c.ContactDesactivate_Block} <ui:button label="{!$Label.c.BtnBack}" press="{!c.BtnBack}"/> <aura:set attribute="else"> {!$Label.c.ContactDesactivate_Confirm}<br/> <ui:button label="{!$Label.c.BtnBack}" press="{!c.BtnBack}"/> <ui:button class="slds-button slds-button_brand" label="{!$Label.c.BtnSubmit}" press="{!c.BtnSubmit}" /> </aura:set> </aura:if> </aura:component> A RETENIR: Attention au « V » & au « C »  "{!v.hasContact}" fait appel à une variable du composant  "{!c.BtnBack} " fait appel à une fonction javascript
  • 19. Le composant : Le contrôleur javascript
  • 20. Fonction type (Javascript) NomDeLaFonction : function(component, event, helper) { //Récuperation de la méthode APEX var action = component.get("c.saveContact"); //Affectation des paramètres action.setParams({ "jsonContact":JSON.stringify(component.get("v.Contact")) }); // la fonction de call Back action.setCallback(this, function(a) { var state = a.getState(); if (state === "SUCCESS") { }else if (state === "ERROR"){ btn.set("v.disabled",false); var errors = response.getError(); } }); // Execute la fonction $A.enqueueAction(action); }, A RETENIR var action = component.get("c.saveContact"); => Le « c » permet d’indiquer que je vais rechercher la fonction sur le contrôlleur "jsonContact":JSON.stringify(component.get("v.Contact")) => « JSON.stringify » permet de convertir en « String » ma variable action.setCallback(this, function(a) {…}) => La fonction de « callback » correspond au retour lors de l’appel de la fonction APEX $A.enqueueAction(action); => Permet de faire l’appel de la fonction précédemment initiée Javascript est sensible à la casse : « A » est différent de « a »
  • 21. ContactDesactivateController.js ({ doInit : function(component, event, helper) { helper.retrieveContact(component); helper.hHasContact(component); }, BtnBack : function(component, event, helper) { helper.backFunction(); }, BtnSubmit: function(component, event, helper) { helper.btnSaveContact(component, event); } } A RETENIR helper.backFunction(); => Fait appel à la fonction nommée « backFunction » se trouvant dans le helper JS
  • 23. PXS_ContactDesactivateHelper.js ({ retrieveContact : function(component) { var action = component.get("c.getContact"); action.setParams({ "contactId":component.get("v.recordId") }); action.setCallback(this, function(a) { var state = a.getState(); if (state === "SUCCESS") { component.set("v.Contact", a.getReturnValue()); }else if (state === "ERROR"){ var errors = response.getError(); } }); $A.enqueueAction(action); }, A RETENIR - Les noms de fonction du contrôleur JS, du helper et du contrôleur APEX doivent être différents.
  • 24. PXS_ContactDesactivateHelper.js hHasContact : function(component) { var action = component.get("c.getHasContact"); action.setParams({ "contactId":component.get("v.recordId") }); action.setCallback(this, function(a) { var state = a.getState(); if (state === "SUCCESS") { component.set("v.hasContact", a.getReturnValue()); //this.createComponent(component, a.getReturnValue()); }else if (state === "ERROR"){ var errors = response.getError(); } }); $A.enqueueAction(action); }, backFunction : function() { // Close the action panel var dismissActionPanel = $A.get("e.force:closeQuickAction"); dismissActionPanel.fire(); },
  • 25. PXS_ContactDesactivateHelper.js btnSaveContact : function(component, event) { //inactive Btn var btn = event.getSource(); btn.set("v.disabled",true); var action = component.get("c.saveContact"); action.setParams({ "jsonContact":JSON.stringify(component.get("v.Contact")) }); action.setCallback(this, function(a) { var state = a.getState(); if (state === "SUCCESS") { component.set("v.Contact", a.getReturnValue()); //inform user var resultsToast = $A.get("e.force:showToast"); resultsToast.setParams({ "title": "Success", "type":"success", "message": "Contact désactivé avec succès..." }); resultsToast.fire(); var urlEvent = $A.get("e.force:navigateToURL"); urlEvent.setParams({ "url": "/" + component.get("v.Contact.AccountId") }); urlEvent.fire(); }else if (state === "ERROR"){ btn.set("v.disabled",false); var errors = response.getError(); console.log("Error message : ", errors); } }); $A.enqueueAction(action); },
  • 27. Lightning action button Pour cela, je clique sur le menu « Buttons, Links and Actions » puis sur le bouton « New Action ». Afin d’ouvrir notre composant, je vais créer une action lightning.
  • 29. Le rendu final Le bouton permettant de désactiver un contact est disponible.
  • 30. Le rendu final La fenêtre s’ouvre, nous pouvons « valider » ou « annuler »
  • 31. Le rendu final Le message de succès apparait après la modification

Notes de l'éditeur

  1. [Welcome Slide]
  2. Note to speaker: Please go over the Forward Looking Statement at your meeting. They might not be at Dreamforce, but this content is from Dreamforce and the Forward-Looking statement applies.
  3. [Emply Slide for you to customize]
  4. [Emply Slide for you to customize]
  5. [Emply Slide for you to customize]
  6. [Emply Slide for you to customize]
  7. [Emply Slide for you to customize]
  8. [Emply Slide for you to customize]
  9. [Emply Slide for you to customize]
  10. [Emply Slide for you to customize]
  11. [Emply Slide for you to customize]
  12. [Emply Slide for you to customize]
  13. [Emply Slide for you to customize]
  14. [Emply Slide for you to customize]
  15. [Emply Slide for you to customize]
  16. [Emply Slide for you to customize]
  17. [Emply Slide for you to customize]
  18. [Emply Slide for you to customize]
  19. [Emply Slide for you to customize]
  20. [Emply Slide for you to customize]
  21. [Emply Slide for you to customize]
  22. [Emply Slide for you to customize]
  23. [Emply Slide for you to customize]
  24. [Emply Slide for you to customize]
  25. [Emply Slide for you to customize]
  26. [Emply Slide for you to customize]
  27. [Emply Slide for you to customize]
  28. [Emply Slide for you to customize]
  29. [Emply Slide for you to customize]
  30. [Emply Slide for you to customize]
  31. [Emply Slide for you to customize]
  32. Q&A Slide
  33. Thank you Slide