Skip to main content

Utilisation des données Salesforce dans le code Apex

Remarque

Remarque

Vous souhaitez apprendre en français ? Commencez le défi dans un Trailhead Playground en français et utilisez les traductions fournies entre crochets pour naviguer. Copiez et collez uniquement les valeurs en anglais, car les validations de défi reposent sur les données en anglais. Si vous ne réussissez pas le défi dans votre organisation en français, nous vous recommandons (1) de définir le paramètre régional sur les États-Unis, (2) de définir la langue sur l’anglais en suivant les instructions ici, puis (3) de cliquer à nouveau sur le bouton « Vérifier le défi ».

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, sous le commentaire //TO DO 3.1 (près de la ligne 5), collez ce code :
    // 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, sous le commentaire //TO DO 3.2, collez ce code :
    insert newBouquets;
  2. Sous le commentaire //TO DO 2.4, 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, sous le commentaire //TO DO 3.3, collez ce code :
    } //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

Partagez vos commentaires sur Trailhead dans l'aide Salesforce.

Nous aimerions connaître votre expérience avec Trailhead. Vous pouvez désormais accéder au nouveau formulaire de commentaires à tout moment depuis le site d'aide Salesforce.

En savoir plus Continuer à partager vos commentaires