Écriture de votre première requête SOQL
Vidéo de démonstration Trail Together
Vous souhaitez être guidé pas à pas par un expert pendant que vous travaillez sur cette étape ? Regardez cette vidéo qui fait partie de la série Trail Together.
(Ce clip commence à 2 min 33 s, au cas où vous voudriez revenir en arrière et regarder à nouveau le début de l’étape.)
Introduction
Lors de cette étape, vous allez créer un composant Lightning simple et un contrôleur Apex. Ensuite, vous mettrez à jour le composant pour qu’il affiche les données et convertirez le code SQL de base en SOQL.
Création d’un paquet de composants Lightning
Maintenant que vous avez créé votre organisation, installé le package et importé les données, il est temps de créer un composant Lightning qui affiche des données simples à partir d’une requête SQL convertie.
- Ouvrez la Developer Console.
- Fermez tous les onglets ouverts dans Developer Console, puis cliquez sur File (Fichier) > New (Nouveau) > Lightning Component (Composant Lightning).
- Nommez le composant Lightning
Books4EveryoneHome
(AccueilBooks4Everyone). - Dans la section de configuration du composant, sélectionnez Lightning Page (Page Lightning) et cliquez sur Submit (Soumettre).
- Remplacez le contenu du composant par ce code.
<aura:component implements="flexipage:availableForAllPageTypes" access="global"> <aura:attribute name="Books" type="Book__c" /> <lightning:card title="Books4Everyone Books"> <aura:set attribute="body"> TODO: Update this to display data! </aura:set> </lightning:card> </aura:component>
Le composant est assez simple jusqu’à présent. Il comporte un attribut permettant de stocker des informations sur les livres et affiche les données dans une carte Lightning. Vous reviendrez bientôt sur ce paquet, mais vous devez d’abord écrire du code Apex pour le remplir de données.
Création d’une classe Apex
La prochaine étape consiste à créer un contrôleur Apex permettant d’obtenir les données demandées par Books4Everyone.
- Dans la Developer Console, cliquez sur File (Fichier) > New (Nouveau) > Apex Class (Classe Apex).
- Nommez la nouvelle classe Apex
Books4EveryoneHomeController
(ContrôleurAccueilBooks4Everyone). - Remplacez le corps de la classe Apex par le code suivant :
public with sharing class Books4EveryoneHomeController { @AuraEnabled public static List<Book__c> getBooks() { return; //Your query here } }
- Analysons rapidement le code que nous venons d’écrire. La première ligne est
@AuraEnabled
, ce qui nous permet d’appeler cette fonction depuis le composant Lightning. Ensuite, il y a la définition de fonction. Elle précise que nous renverrons une liste d’objets Book__c. Elle est importante, car les requêtes SOQL renvoient toujours des listes sObjects. Ce code ne sera pas encore enregistré, car vous devez encore écrire la requête SOQL. Books4Everyone souhaite afficher tous les titres de livres et leur description. Voici la requête SQL permettant d’y parvenir :SELECT b.ID, b.Name, b.Description FROM Book b
Vous pouvez essayer de l’intégrer dans le code, mais cela ne fonctionnera pas. Passons en revue ce que nous savons actuellement : Book (Livre) est un objet personnalisé de Salesforce qui faisait partie du package non géré que nous avons installé, avec le nom d’API Book__c. Étant donné que Id (Identifiant) et Name (Nom) sont des champs standard, les noms d’API sont respectivement Id et Name. Cependant, la description est un champ personnalisé. Son nom d’API est donc Description__c. - Nous en savons suffisamment pour mettre à jour la classe Apex à l’aide de la nouvelle requête SOQL. Remplacez
return; //Your query here
(return; //Votre requête) par ce qui suit :return [SELECT Id,Name,Description__c FROM Book__c];
- Enregistrez votre fichier. Vous avez écrit votre première requête SOQL !
Différences entre SQL et SOQL
Maintenant que nous avons converti notre première requête, voici un tableau avec quelques questions courantes concernant les différences entre SQL et SOQL.
La plupart des variantes SQL |
SOQL |
---|---|
Prend en charge des instructions pour DML, du contrôle de transaction et des instructions SELECT |
Prend uniquement en charge des instructions SELECT |
Prend en charge SELECT * (inclure toutes les colonnes) |
Ne prend pas en charge SELECT * (indiquer les champs à inclure OU utiliser FIELDS(ALL), FIELDS(STANDARD) ou FIELDS(CUSTOM) dans les instructions SELECT) |
Prend en charge les jointures écrites à l’aide de la syntaxe « left » (gauche), « right » (droite), « inner » (interne) et « outer » (externe) |
Prend en charge les « requêtes de relation » écrites à l’aide de la syntaxe parent-enfant |
Ne prend pas en charge la syntaxe de notation par points pour traverser les relations entre tables |
Prend en charge la syntaxe de notation par points pour traverser les relations entre tables |
N’est pas régie par des limites |
Est régi par des limites (par exemple, nombre de lignes renvoyées, mémoire, etc.) |
Mise à jour de votre composant Lightning pour afficher des données
Maintenant que nous avons écrit une requête pour obtenir des données, nous devons également nous assurer que ces données s’affichent. Nous allons donc mettre à jour le composant approprié.
- Dans la Developer Console, revenez au composant Lightning Books4EveryoneHome.
- Mettez à jour le composant pour qu’il ressemble à ceci :
<aura:component implements="flexipage:availableForAllPageTypes" access="global" controller="Books4EveryoneHomeController"> <aura:attribute name="Books" type="Book__c" /> <aura:handler name="init" action="{!c.doInit}" value="{!this}"/> <lightning:card title="Books4Everyone Books"> <aura:set attribute="body"> <table class="slds-table slds-table_bordered slds-table_cell-buffer"> <thead> <tr class="slds-text-title_caps"> <th scope="col">Book Titles</th> <th scope="col">Book Descriptions</th> </tr> </thead> <tbody> <aura:iteration items="{!v.Books}" var="books"> <tr scope="row"> <td> {!books.Name}</td> <td> {!books.Description__c}</td> </tr> </aura:iteration> </tbody> </table> </aura:set> </lightning:card> </aura:component>
C’est un peu plus complexe que la dernière fois. Le premier grand changement a été d’ajouter un contrôleur au composant aveccontroller=”Books4EveryoneHomeController”
. Cela relie le composant à la classe Apex. Ensuite, nous avons ajouté un tableau pour afficher les données. Il a deux colonnes : Book Titles (Titres de livres) et Book Descriptions (Descriptions de livres). Nous utilisons un composantaura:iteration
pour afficher les données issues de Books. Pour le moment, cet attribut est vide. Nous devons donc mettre à jour le contrôleur JavaScript pour placer les données de la classe Apex dans l’attribut « aura ». - Cliquez sur Controller (Contrôleur) sur le côté droit de la page afin de créer un contrôleur pour votre composant Lightning.
- Modifiez le code JavaScript du contrôleur comme suit :
({ doInit: function(component, event, helper) { var action = component.get("c.getBooks"); action.setCallback(this, function(data) { component.set("v.Books", data.getReturnValue()); console.log(data.getReturnValue()); }); $A.enqueueAction(action); } })
Les données se trouvent désormais dans l’attribut « aura ». Cette action appelle la fonction ApexgetBooks
pour renseigner l’attributBooks
sur le composantBooks4EveryoneHome
(AccueilBooks4Everyone). - Enregistrez tous les onglets ouverts.
Résultat généré par le composant
La dernière étape pour s’assurer que la requête a fonctionné comme prévu consiste à ajouter le composant à la page d’accueil. Faisons-le maintenant.
- Dans votre organisation, accédez à l’application Books4Everyone.
- Cliquez sur Home (Accueil).
- Dans le coin supérieur droit, cliquez sur et sélectionnez Edit Page (Modifier la page).
- Sur le côté gauche du générateur d’application Lightning, recherchez Books4EveryoneHome (RecommandationBooks4Everyone) dans la liste des composants personnalisés.
- Faites glisser le composant vers la gauche de la page.
- Cliquez sur Save (Enregistrer), activez la page en cliquant sur Activate (Activer), sélectionnez Assign as Org Default (Attribuer par défaut pour l’organisation), puis cliquez sur Save (Enregistrer).
- Cliquez sur pour revenir à la page d’accueil.
- La dernière étape consiste à vérifier les données sur la page d’accueil. La page doit se présenter comme suit :