Criar sua primeira consulta SOQL
Acompanhar com o Trail Together
Deseja acompanhar um especialista enquanto trabalha nesta etapa? Veja este vídeo que faz parte da série Trail Together.
(Este clipe começa na marca dos 02:33 minutos, caso você queira retroceder e ver o início da etapa novamente.)
Introdução
Nesta etapa, você vai criar um componente do Lightning e um controlador do Apex simples. Em seguida, você vai atualizar o componente para exibir dados e converter SQL básico em SOQL.
Criar um pacote de componentes do Lightning
Agora que você criou sua organização, instalou o pacote e importou os dados, é hora de criar um componente do Lightning que mostre dados simples de uma consulta SQL convertida.
- Abra o Developer Console.
- Feche as guias que estiverem abertas no Developer Console e clique em File (Arquivo) > New (Novo) > Lightning Component (Componente do Lightning).
- Dê ao componente do Lightning o nome de
Books4EveryoneHome
. - Na seção de configuração do componente, selecione Lightning Page (Página do Lightning) e clique em Submit (Enviar).
- Substitua o conteúdo do componente por este código.
<aura:component implements="flexipage:availableForAllPageTypes" access="global"> <aura:attribute name="Books" type="Book__c" /> <lightning:card title="Books4Everyone Books"> <aura:set attribute="body"> TODO: Update this to display data! </aura:set> </lightning:card> </aura:component>
O componente, até agora, é muito simples. Ele tem um atributo para armazenar informações sobre livros e exibe os dados em um cartão do Lightning. Você voltará a esse pacote em breve, mas primeiro precisará programar algum Apex para preenchê-lo com dados.
Criar uma classe do Apex
Nossa próxima etapa é criar um controlador do Apex para obter os dados solicitados de Books4Everyone.
- No Developer Console, clique em File (Arquivo) > New (Novo) > Apex Class (Classe do Apex).
- Dê à nova classe do Apex o nome de
Books4EveryoneHomeController
. - Substitua o corpo da classe do Apex pelo código a seguir.
public with sharing class Books4EveryoneHomeController { @AuraEnabled public static List<Book__c> getBooks() { return; //Your query here } }
- Vamos detalhar rapidamente o código que acabamos de criar. Nossa primeira linha é
@AuraEnabled
, que nos permite chamar essa função do nosso componente do Lightning. Em seguida, temos nossa definição de função. Ela especifica que vamos retornar uma lista de objetos Book__c. Isso é importante porque as consultas em SOQL sempre retornam listas de sObjects. Esse código ainda não vai ser salvo, já que você precisa primeiro criar a consulta SOQL. Books4Everyone quer exibir todos os títulos de livros e suas descrições. Esta é a consulta SQL que faz isso:SELECT b.ID, b.Name, b.Description FROM Book b
Você pode tentar colocar isso no nosso código, mas não vai funcionar. Vamos ver o que já sabemos até agora: Book (Livro) é um objeto personalizado no Salesforce que era parte de um pacote não gerenciado instalado, com o nome de API Book__c. Como ID e Name (Nome) são campos padrão, seus nomes de API são ID e Name (Nome), respectivamente. Mas Description (Descrição) é um campo personalizado, ou seja, seu nome de API é Description__c. - Agora sabemos o suficiente para atualizar a classe do Apex com nossa nova consulta SOQL. Substitua
return; //Your query here
por:return [SELECT Id,Name,Description__c FROM Book__c];
- Agora salve seu arquivo. Você criou sua primeira consulta SOQL!
SQL não é SOQL
Agora que convertemos nossa primeira consulta, veja uma tabela que fala de algumas dúvidas comuns sobre as diferenças entre SQL e SOQL
Maioria das variantes de SQL |
SOQL |
---|---|
Compatível com instruções para DML, controle de transações e instruções SELECT |
Compatível somente com instruções SELECT |
Compatível com SELECT * (inclui todas as colunas) |
Não compatível com SELECT * (especifique os campos a serem incluídos OU use FIELDS(ALL), FIELDS(STANDARD) ou FIELDS(CUSTOM) nas instruções SELECT) |
Compatível com joins, que são codificados com sintaxe “left,” “right,” "inner," "outer" |
Compatível com "consultas de relacionamento", que são codificadas usando a sintaxe de pai-filho |
Incompatível com sintaxe de notação de ponto para percorrer relacionamentos de tabela |
Compatível com sintaxe de notação de ponto para percorrer relacionamentos de tabela |
Não são restringidas por limites |
É restringido por limites (por exemplo, linhas retornadas, heap, etc.) |
Atualizar seu componente do Lightning para exibir dados
Agora que criamos uma consulta para obter nossos dados, também queremos garantir que eles serão exibidos. Vamos atualizar nosso componente para fazer isso agora.
- No Developer Console, volte ao componente do Lightning Books4EveryoneHome.
- Atualize seu componente para ficar assim:
<aura:component implements="flexipage:availableForAllPageTypes" access="global" controller="Books4EveryoneHomeController"> <aura:attribute name="Books" type="Book__c" /> <aura:handler name="init" action="{!c.doInit}" value="{!this}"/> <lightning:card title="Books4Everyone Books"> <aura:set attribute="body"> <table class="slds-table slds-table_bordered slds-table_cell-buffer"> <thead> <tr class="slds-text-title_caps"> <th scope="col">Book Titles</th> <th scope="col">Book Descriptions</th> </tr> </thead> <tbody> <aura:iteration items="{!v.Books}" var="books"> <tr scope="row"> <td> {!books.Name}</td> <td> {!books.Description__c}</td> </tr> </aura:iteration> </tbody> </table> </aura:set> </lightning:card> </aura:component>
Isso está um pouco mais complicado do que antes. Nossa primeira grande mudança foi adicionar um controlador ao nosso componente comcontroller=”Books4EveryoneHomeController”
. Isso liga nosso componente à nossa classe do Apex. Adicionamos a seguir uma tabela para exibir nossos dados. Usamos duas colunas, Book Titles (Títulos de livros) e Book Descriptions (Descrições de livros) e usamos um componenteaura:iteration
para exibir dados sobre os livros. Esse atributo, no momento, está vazio, ou seja, precisamos atualizar nosso controlador JavaScript para colocar dados da classe do Apex no atributo aura. - Clique em Controller (Controlador) no lado direito da página a fim de criar um controlador para seu componente do Lightning.
- Atualize o JavaScript do controlador para o seguinte:
({ doInit: function(component, event, helper) { var action = component.get("c.getBooks"); action.setCallback(this, function(data) { component.set("v.Books", data.getReturnValue()); console.log(data.getReturnValue()); }); $A.enqueueAction(action); } })
Agora você terá dados no seu atributo aura! Essa ação chama a função do ApexgetBooks
para preencher o atributoBooks
no componenteBooks4EveryoneHome
. - Salve todas as suas guias abertas.
Vejamos como esse componente funciona na prática!
Nossa etapa final para garantir que a consulta funcionou como esperado é adicionar nosso componente à página inicial. Vamos fazer isso agora.
- Na sua organização, navegue até o aplicativo Books4Everyone.
- Clique em Home (Início).
- No canto superior direito, clique em e selecione Edit Page (Editar página).
- No lado esquerdo do criador de aplicativo Lightning, encontre Books4EveryoneHome na lista de componentes personalizados.
- Arraste o componente até o lado esquerdo da página.
- Clique em Save (Salvar), ative a página clicando em Activate (Ativar) e selecione Assign as Org Default (Atribuir como padrão da organização); em seguida, clique em Save (Salvar).
- Clique em para retornar à página inicial.
- A etapa final é verificar os dados na sua página inicial. Ela deverá ficar mais ou menos assim: