Usar sObjects e DML
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Definir sObject.
- Explicar a diferença entre sObjects e outros tipos de dados do Apex.
- Usar o DML para inserir registros no banco de dados.
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 no Trailhead Live.
(Este clipe começa na marca dos 21:39 minutos, caso você queira retroceder e ver o início da etapa novamente.)
O que é um sObject?
Um sObject é um tipo de dados do Apex que corresponde a um objeto do Salesforce (sObject) em uma organização. sObjects são tipos de dados complexos que retêm vários valores em uma variável. Eles retêm um registro de dados de um objeto do Salesforce, como uma conta, um contato ou uma oportunidade. Lembre-se das Noções básicas do Apex para administradores, onde aprendemos que variáveis são como contêineres. A maioria das variáveis retêm um pedaço de informação. sObjects são como contêineres que retêm outros contêineres. Os contêineres dentro do contêiner sObject podem ser de tipos de dados diferentes, como sequência de caracteres, data, número inteiro ou booleano.
Novas contas
Name (Nome) |
Account Number (Número da conta) |
Phone (Telefone) |
---|---|---|
The Tea Factory |
356281 |
555-0158 |
Tina’s Teas |
623956 |
555-0129 |
Olhe as informações nesta tabela. Se você já usou o Data Loader, você já conhece este formato de conta. Os campos da conta são Name (Nome), Account Number (Número da conta) e Phone (Telefone). Os dados são o que você vê se recuperou as informações de um relatório ou modo de exibição de lista.
Campos de um objeto em uma organização são chamados de propriedades do sObject no código do Apex. Como cada campo em um objeto da organização tem um tipo de dados, cada propriedade do sObject tem um tipo de dados. Por exemplo, uma vez que o campo Name (Nome) de um objeto Account tem o tipo de dados string, a propriedade Name
do sObject myAcct
também tem o tipo de dados string: myAcct.Name = 'The Tea Factory'
.
Independentemente se você criou uma conta manualmente (na interface de usuário do Salesforce) ou programaticamente (usando o código do Apex), você define os mesmos valores, com os mesmos tipos de dados. Por exemplo, na interface de usuário do Salesforce, você pode criar uma conta com os valores de campo na primeira linha da tabela New Accounts (Novas contas) acima. Para criar a mesma conta programaticamente, use um sObject de Conta no código do Apex, conforme o seguinte:
Account myAcct = new Account(); myAcct.Name = 'The Tea Factory'; myAcct.Phone= '555-0129'; myAcct.AccountNumber = '356281';
Use o sObjectName, notação de ponto e os mesmos campos padrão (Name, Phone e AccountNumber) que você já conhece em sua organização.
Neste exemplo, as propriedades myAcct
(Name
, Phone
e AccountNumber
) têm tipos de dados que você já conhece: string e integer.
Definir valores de campo
Use notação de ponto para atribuir um valor a um sObject. No exemplo de código anterior, olhe as linhas 2 a 4. Se pensarmos no sObject como um contêiner de contêineres, essas linhas abrem o maior contêiner, myAcct
, encontram os contêineres Name
, Phone
e AccountNumber
e adicionam valores a eles.
Obter valores de campo
De modo semelhante, use notação de ponto para obter (recuperar) um valor de um sObject.
Exemplo: String accountName = myAcct.Name;
Esta amostra de código abre o contêiner myAcct
, olha dentro do contêiner, encontra o contêiner Name
e obtém seu valor. Neste exemplo, o valor retornado é The Tea Factory.
Declarar um sObject é como adicionar uma linha em uma planilha. Quando você estiver pronto para criar outra conta, dê ao objeto de conta um novo nome. Por exemplo:
Account myAcct2 = new Account(); myAcct2.Name = 'Tina\'s Teas'; myAcct2.AccountNumber = '623956'; myAcct2.Phone = '555-0129';
Adicionar dados a uma organização do Salesforce
Está pronto para escrever código do Apex para adicionar dados à sua organização do Salesforce? Você já sabe como criar classes, criar métodos e declarar um sObject. Mas como adicionamos um sObject ao seu banco de dados do Salesforce? Para enviar novos registros à sua organização do Salesforce, use um recurso chamado data manipulation language (DML, linguagem de manipulação de dados).
Como administrador, você já conhece a DML. Você conhece isso como sendo as instruções Insert (Inserir) (criar um registro), Update (Atualizar) (editar um registro) e Delete (Excluir) (excluir um registro) que você usa com ferramentas de manipulação de dados como o Data Loader. Em vez de usar arquivos .csv e o Data Loader para adicionar linhas ou inserir ou atualizar registros, podemos escrever código do Apex para fazer o trabalho. Use o código do Apex e as instruções DML Insert
, Update
e Delete
. Muito legal! Nesta unidade, vamos nos concentrar na instrução Insert
.
Definir a classe
- No Developer Console, clique em File (Arquivo)| New (Novo)| Apex Class (Classe do Apex).
- Insira
NewAccounts
no nome da classe.
- Clique em OK.
- Substitua o código padrão por este:
public class NewAccounts { public static void sObjectsInsert(){ Account store = new Account(); store.Name = 'The Tea Factory'; store.AccountNumber = '356281'; store.Phone = '555-0158'; insert store; } }
- Clique em File (Arquivo) | Save (Salvar).
Agora você tem uma classe NewAccounts
que cria um novo registro e define suas propriedades. A classe usa também a instrução insert
para adicionar o novo registro de conta ao banco de dados. Chegou a hora de executar seu código!
Executar o código
- Clique em Debug (Depurar) | Open Execute Anonymous Window (Abrir janela Executar no modo anônimo).
- Na janela Enter Apex Code (Inserir código do Apex), cole este código:
NewAccounts.sObjectsInsert();
- Clique na caixa de seleção Open Log (Abrir registro) e clique em Execute (Executar).
- No Iniciador de aplicativos, encontre e abra Contas. A Tea Factory aparece na lista Accounts. (Se a Tea Factory não estiver lá, atualize a página.)
- Clique em The Tea Factory.
- Clique em Details (Detalhes). Observe que os campos Account Name (Nome da conta), Phone (Telefone) e Account Number (Número da conta) mostram os valores que você definiu como propriedades do sObject na classe
NewAccounts
.
Usar um loop para criar vários registros
Adicionar uma conta de cada vez não é muito prático. Geralmente, precisamos criar muitas contas de cada vez, importando ou atualizando registros.
Você poderia adicionar vários registros da mesma maneira que adicionamos um registro no exemplo anterior, mas seria necessário repetir o código para cada registro, conforme o seguinte:
Account store1 = new Account(); Account store2 = new Account(); store1.Name = 'The Tea Factory 1'; store1.AccountNumber = '356281'; store1.Phone = '555-0158'; store2.Name = 'The Tea Factory 2'; store2.AccountNumber = '356282'; store2.Phone = '555-4012'; insert store1; insert store2;
Nas Noções básicas do Apex para administradores, você aprendeu sobre listas e loops. Esta é a oportunidade de usar esses conceitos. Com um loop while
e uma lista, você pode criar muitos registros de cada vez e adicionar todos os registros ao seu banco de dados. É como usar o Data Loader para carregar um arquivo .csv que inclui três registros e os inserir em um banco de dados.
Escrever o método
- Retorne à classe NewAccounts no Developer Console.
- Substitua o código existente por este:
public class NewAccounts { public static void sObjectsInsert(Integer value){ Integer counter = 1; //create a list to add our accounts List<Account> teaFactoryAccounts = new List<Account>(); while(counter <= value){ //display the current counter value System.debug('Counter Value before Incrementing ' + counter); //create a new account Account store = new Account(); store.Name = 'The Tea Factory ' + counter; store.AccountNumber = '35629' + counter; teaFactoryAccounts.add(store); System.debug(teaFactoryAccounts); //increment the counter counter = counter + 1; System.debug('Counter Value after incrementing ' + counter); } System.debug('Size of Account List: ' + teaFactoryAccounts.size() ); System.debug('Elements in Account List: ' + teaFactoryAccounts); //insert all of the accounts in the list insert teaFactoryAccounts; } }
- Clique em File (Arquivo) | Save (Salvar).
Execute o método.
- Clique em Debug (Depurar) | Open Execute Anonymous Window (Abrir janela Executar no modo anônimo).
- Na janela Enter Apex Code (Inserir código do Apex), cole este código:
NewAccounts.sObjectsInsert(3);
- Selecione Open log (Abrir registro) e depois clique em Execute (Executar). A janela de log é aberta.
- Selecione Debug Only (Depurar somente).
A última entrada no log mostra que o código criou três contas com um nome e um número da conta para cada uma:
The Tea Factory 1, 356291
The Tea Factory 2, 356292
The Tea Factory 3, 356293
A lista teaFactoryAccounts
criada na linha 5 tem o seguinte aspecto:
Cada vez que o valor da variável counter é aumentada, um sObject é criado no próximo index (posição) aberto na lista.
Retorne à lista Accounts em sua organização do Trailhead Playground e clique em Contas. Os três restaurantes que você inseriu estão incluídos na lista Accounts.
Revisar o código de loop
Analise o código de loop while
. Ele estabelece um novo sObject Account chamado store
. Em seguida, o loop define o nome 'The Tea Factory'. Para diferenciar os registros de conta, ela adiciona o valor counter atual no fim da sequência de caracteres store.Name
durante cada iteração do loop.
Depois de definir as propriedades, teaFactoryAccounts.add
adiciona um sObject store
à lista teaFactoryAccounts
durante cada iteração do loop while
, até que a condição de loop seja correspondida quando o valor é maior ou igual a counter.
Quando a condição é correspondida, o loop while
termina e a última linha insere a lista teaFactoryAccounts
no banco de dados toda de uma vez.
Por que toda de uma vez? Já que os recursos são limitados, você pode usar a instrução insert em seu código somente 150 vezes. Um registro de cada vez, você pode inserir um total de 150 registros. Mas se cada instrução insere 10 registros, o total aumenta para 1.500 registros. Inserir vários objetos de uma vez ajuda na massificação (combinando tarefas repetitivas ao escrever código eficiente). No início, você pode inserir somente 10 registros de uma vez. Mas conforme seu aplicativo cresce, você pode começar a inserir 200 registros de cada vez. Usar a massificação desde o início prepara seu aplicativo para o crescimento.
Recursos
- Apex Developer Guide: Working with sObjects
- Trailhead Module: Apex Basics & Database