Usar dados do Salesforce no código do Apex
Usamos SOQL para consultar uma organização do Salesforce e usamos esses dados em nosso código. Nesta etapa, usamos SOQL para obter informações sobre o produto que queremos adicionar como orderItem de brinde.
Adicionar SOQL para obter dados do Salesforce
- Na sua classe, abaixo do comentário
//TO DO 3.1
(perto da linha 5), cole este código:// 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]; }
O que estamos fazendo aqui?
Primeiro, usamos SOQL para obter a ID e o ProductCode para o produto do buquê que tem o código de produto BOT-BB-12
e armazenamos a ID em uma lista chamada bonusProductList
. Em seguida, verificamos o número de itens em bonusProductList
. Se houver pelo menos um valor na lista, definimos um novo sObject Product2, chamado bonusProduct
, e atribuímos o primeiro sObject na lista bonusProductList
a ele.
Em seguida, usamos outra consulta SOQL para obter a ID de PricebookEntry para o bonusProduct
. Armazenamos a ID de PricebookEntry em uma lista PricebookEntry chamada entryList
.
Por fim, verificamos o número de itens em entryList
. Se houver pelo menos um valor na lista, definimos um novo sObject PricebookEntry, chamado entry
, e atribuímos o primeiro sObject na lista entryList
a ele.
Usar DML para enviar dados ao Salesforce
Se você concluiu o módulo Programação orientada a objetos para administradores, talvez se lembre que DML é a linguagem de manipulação de dados que usamos para enviar dados a uma organização do Salesforce. Como administrador, você conhece DML como sendo as instruções Insert (Inserir) (criar um registro), Update (Atualizar) (editar um registro) e Delete (Excluir) (excluir um registro) usadas com ferramentas de manipulação de dados, como o Data Loader.
Criamos um ou mais buquês gratuitos e adicionamos a uma lista. Mas eles só existem em código do Apex. Não salvamos nada na organização do Salesforce. Usamos DML para isso.
- Na sua classe, abaixo do comentário
//TO DO 3.2
, cole este código:insert newBouquets;
- Abaixo do comentário
//TO DO 2.4
, remova os caracteres de comentário (//
) da linha com o texto://PricebookEntryId = entry.id,
- Por fim, precisamos fechar a instrução
if
(o código que é executado quando determinamos que temos um buquê de brinde).
Na sua classe, abaixo do comentário//TO DO 3.3
, cole este código:} //end if
- Salve sua classe.
Agora sua classe deve ficar assim:
//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