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