Skip to main content

Usar dados do Salesforce no código do Apex

Nota

Nota

Deseja aprender em português (Brasil)? Nesse emblema, as validações dos desafios práticos do Trailhead funcionam em inglês. As traduções são fornecidas entre parênteses como referência Copie e cole os valores em inglês e, em seguida, mude o idioma do Trailhead Playground para inglês e a localidade para Estados Unidos. Siga as instruções aqui.

Consulte o emblema Trailhead no seu idioma para saber como aproveitar a experiência traduzida do Trailhead.

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.

Um ícone representando o objeto de pedidos do Salesforce com uma seta com o rótulo SOQL apontando para uma tabela de dados que corresponde à sua consulta.

Adicionar SOQL para obter dados do Salesforce

  1. Na sua classe, abaixo do cabeçalho //TO DO 3.1 (perto da linha 7), 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.

Nota

A numeração de itens em uma lista sempre começa com 0, ou seja, bonusProductList[0] se refere ao primeiro item na lista.

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.

Um buquê de flores com o rótulo sObject OrderItem com uma seta com o rótulo DML apontando para um ícone OrderItem em uma nuvem chamada Registro salvo em objeto OrderItem do Salesforce.

  1. Na sua classe, abaixo do cabeçalho //TO DO 3.2 (perto da linha 50), cole este código:
    insert newBouquets;
  2. Abaixo do cabeçalho //TO DO 2.4 (perto da linha 34), remova os caracteres de comentário ( // ) da linha com o texto: //PricebookEntryId = entry.id,
  3. 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 cabeçalho //TO DO 3.3 (perto da linha 53), cole este código:

    } //end if
  4. 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
Continue a aprender de graça!
Inscreva-se em uma conta para continuar.
O que você ganha com isso?
  • Receba recomendações personalizadas para suas metas de carreira
  • Pratique suas habilidades com desafios práticos e testes
  • Monitore e compartilhe seu progresso com os empregadores
  • Conecte-se a orientação e oportunidades de carreira