Skip to main content

Utilisation des données Salesforce dans le code Apex

Remarque

Remarque

Vous souhaitez apprendre en français ? Dans ce badge, les validations de défi pratique Trailhead se font en anglais. Les traductions sont fournies entre parenthèses à titre de référence. Veillez à copier/coller les valeurs en anglais, puis à définir la langue de votre Trailhead Playground sur Anglais et les paramètres régionaux sur États-Unis. Suivez les instructions ici.

Consultez le badge Trailhead dans votre langue pour découvrir comment profiter de l’expérience Trailhead traduite.

Nous utilisons SOQL pour interroger une organisation Salesforce et utilisons ses données avec notre code. Dans cette étape, nous utilisons SOQL pour obtenir des informations sur le produit que nous voulons ajouter en tant qu’élément de commande bonus.

Une icône représentant l’objet Salesforce Orders avec une flèche libellée SOQL pointant vers un tableau de données correspondant à votre requête.

Ajout de SOQL pour obtenir des données de Salesforce

  1. Dans votre classe, collez ce code sous l’en-tête //TO DO 3.1 (près de la ligne 7) :
    // Use SOQL to get the ID of the bonus bouquet and store it in an sObject variable called bonusProduct
    List<Product2> bonusProductList = [SELECT Id, ProductCode FROM Product2 WHERE ProductCode = 'BOT-BB-12'];
    Product2 bonusProduct = new Product2();
    if(bonusProductList.size() > 0) {
        bonusProduct = bonusProductList[0];
      
        // Use SOQL to get the price book entry ID associated with the bonusProduct and store it in an sObject variable called entry
        // Every Product has an assosiated PricebookEntry
        List<PricebookEntry> entryList = [SELECT Id, Product2Id FROM PricebookEntry WHERE Product2Id = :bonusProduct.Id];
        PricebookEntry entry = new PricebookEntry();
        if(entryList.size() > 0) {
            entry = entryList[0];
        }

Que faisons-nous ici ?

Nous utilisons tout d’abord SOQL pour obtenir l’ID et le code produit (BOT-BB-12) du bouquet, et nous stockons l’ID dans une liste appelée bonusProductList. Nous vérifions ensuite le nombre d’éléments dans bonusProductList. Si la liste contient au moins une valeur, nous définissons un nouveau sObject Product2, appelé bonusProduct, et nous l’associons au premier sObject dans la liste bonusProductList.

Remarque

La numérotation des éléments d’une liste commence toujours par 0, donc bonusProductList[0] fait référence au premier élément de la liste.

Nous utilisons ensuite une autre requête SOQL pour obtenir l’ID de l’élément PricebookEntry pour l’élément bonusProduct. Nous stockons l’ID PricebookEntry dans une liste PricebookEntry appelée entryList.

Enfin, nous vérifions le nombre d’éléments dans entryList. Si la liste contient au moins une valeur, nous définissons un nouveau sObject PricebookEntry, appelé entry, et nous l’associons au premier sObject dans la liste entryList.

Utilisation de DML pour envoyer des données à Salesforce

Si vous avez suivi le module Programmation orientée objet pour les administrateurs, vous vous souvenez probablement que DML est le langage de manipulation de données que nous utilisons pour envoyer des données à une organisation Salesforce. En tant qu’administrateur ou administratrice, vous connaissez DML pour les instructions Insert (créer un enregistrement), Update (modifier un enregistrement) et Delete (supprimer un enregistrement) que vous utilisez avec des outils de manipulation de données, tels que Data Loader.

Nous avons créé un ou plusieurs bouquets gratuits et les avons ajoutés à une liste. Cependant, ils n’existent que dans le code Apex. Nous n’avons rien enregistré dans l’organisation Salesforce. Nous utilisons DML pour cela.

Un bouquet de fleurs marqué OrderItem sObject avec une flèche marquée DML pointant vers une icône OrderItem dans un nuage marqué Enregistrement enregistré dans l’objet Salesforce OrderItem.

  1. Dans votre classe, collez ce code sous l’en-tête //TO DO 3.2 (près de la ligne 50) :
    insert newBouquets;
  2. Sous l’en-tête //TO DO 2.4 (près de la ligne 34), supprimez les caractères de commentaire ( // ) de la ligne suivante : //PricebookEntryId = entry.id,
  3. Enfin, nous devons mettre fin à l’instruction if (le code qui est exécuté si nous déterminons que nous avons un bouquet bonus).

    Dans votre classe, collez ce code sous l’en-tête //TO DO 3.3 (près de la ligne 53) :

    } //end if
  4. Enregistrez votre classe.

Votre classe doit se présenter comme suit :

//Create the class
  public class OrderItemUtility {
  
      //Create the method that will add free bonus bouquet when order is activated
      public static void addBonusBouquet(List<Order> ordersFromTrigger) {
      
          //TO DO 3.1: Determine if we have a bonus product and get its ID to add to the order
          // Use SOQL to get the ID of the bonus bouquet and store it in an sObject variable called bonusProduct
          List<Product2> bonusProductList = [SELECT Id, ProductCode FROM Product2 WHERE ProductCode = 'BOT-BB-12'];
          Product2 bonusProduct = new Product2();
          if(bonusProductList.size() > 0) {
              bonusProduct = bonusProductList[0];
  
              // Use SOQL to get the price book entry ID associated with the bonusProduct and store it in an sObject variable called entry
              // Every Product has an assosiated PricebookEntry
              List<PricebookEntry> entryList = [SELECT Id, Product2Id FROM PricebookEntry WHERE Product2Id = :bonusProduct.Id];
              PricebookEntry entry = new PricebookEntry();
              if(entryList.size() > 0) {
                  entry = entryList[0];
              }
      
              //TO DO 2.1: Create a list to store any new bouquets we'll insert later
              List<OrderItem> newBouquets = new List<OrderItem>();
          
              //TO DO 2.2: Loop over orders in ordersFromTrigger, for each order (called currentOrder) do something
              for(Order currentOrder : ordersFromTrigger) {
              
                  //TO DO 2.3: Verify the order status is 'Activated'
                  if(currentOrder.Status == 'Activated') {
                  
                      //TO DO 2.4: Create a new bouquet and set values
                      OrderItem freeBouquet = new OrderItem(
                          OrderId = currentOrder.id, //this is the order we're linking the bouquet to
                          PricebookEntryId = entry.id,
                          numberOfFlowers__c = 3,
                          description = 'FREE Bouquet',
                          Quantity = 1,
                          colorTheme__c = 'Spectacular Sunset',
                          percentOfOpening__c = 0,
                          UnitPrice = 0.00
                      );
                      
                      //TO DO 2.5: Add the freeBouquet sObject to your list
                      newBouquets.add(freeBouquet);
                      
                  //TO DO 2.6: Close the "if" and "for loop" sections
                  } //end if
              } //end for loop
              
              //TO DO 3.2: Use DML to add the new bouquet to the Order
              insert newBouquets;
              
          //TO DO 3.3: Close the if section
          } //end if
      } //end method
  } //end class
Formez-vous gratuitement !
Créez un compte pour continuer.
Qu’est-ce que vous y gagnez ?
  • Obtenez des recommandations personnalisées pour vos objectifs de carrière
  • Mettez en pratique vos compétences grâce à des défis pratiques et à des questionnaires
  • Suivez et partagez vos progrès avec des employeurs
  • Découvrez des opportunités de mentorat et de carrière