Utilisation des données Salesforce dans le code Apex
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.
Ajout de SOQL pour obtenir des données de Salesforce
- 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
.
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.
- Dans votre classe, sous le commentaire
//TO DO 3.2
, collez ce code :insert newBouquets;
- Sous le commentaire
//TO DO 2.4
, supprimez les caractères de commentaire (//
) de la ligne suivante ://PricebookEntryId = entry.id,
- 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
- 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