Skip to main content

Usar dados do Salesforce no código do Apex

Nota

Nota

Deseja aprender em português (Brasil)? Comece o desafio em um Trailhead Playground de português (Brasil) e use as traduções fornecidas entre parênteses para navegar. Copie e cole somente os valores em inglês porque as validações dos desafios dependem de dados em inglês. Se você não passar no desafio em sua organização de português (Brasil), recomendamos que (1) mude o local para os Estados Unidos, (2) mude o idioma para inglês, seguindo as instruções aqui, e (3) clique novamente no botão “Validar o desafio”.

Consulte o emblema Trailhead no seu idioma para saber mais sobre como aproveitar a experiência de Trailhead em outros idiomas.

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 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.

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 comentário //TO DO 3.2, cole este código:
    insert newBouquets;
  2. Abaixo do comentário //TO DO 2.4, 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 comentário//TO DO 3.3, 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

Compartilhe seu feedback do Trailhead usando a Ajuda do Salesforce.

Queremos saber sobre sua experiência com o Trailhead. Agora você pode acessar o novo formulário de feedback, a qualquer momento, no site Ajuda do Salesforce.

Saiba mais Continue compartilhando feedback