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.
Você sabia que pode aprender com um especialista? Assista a este vídeo para saber mais sobre os tópicos deste módulo:

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. 

Quadrado sObject com quatro caixas dentro chamadas Id, Name, Type e Custom_Field__c

Novas contas

Nome
Número da conta
Telefone
The Tea Factory
356281
555-0158
Tina’s Teas
623956
555-0129

Olhe as informações nesta tabela. Se você usou o Data Loader, você já conhece este formato de conta. Os campos da conta são Name, Account Number e Phone. 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 tem um tipo de dados. Por exemplo, uma vez que o campo Name 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.

Account myAcct = new Account(); myAcct.Name = 'The Tea Factory'; myAcct.AccountNumber = '356281'; O nome do sObject é myAcct e as propriedades do sObject são Id, Name, Phone e AccountNumber

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 Account 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 (criar um registro), Update (editar um registro) e Delete (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

  1. No Developer Console, clique em File (Arquivo)| New (Novo)| Apex Class (Classe do Apex).
  2. Insira NewAccounts no nome da classe.
  3. Clique em OK.
  4. 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;
        }
    }
  5. 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

  1. Clique em Debug (Depurar) | Open Execute Anonymous Window (Abrir janela Executar no modo anônimo).
  2. Na janela Enter Apex Code (Inserir código do Apex), cole este código:
    NewAccounts.sObjectsInsert();
  3. Clique na caixa de seleção Open Log (Abrir registro) e clique em Execute (Executar).
  4. No Iniciador de aplicativos, encontre e abra Contas. A Tea Factory aparece na lista Accounts. (Se The Tea Factory não estiver lá, atualize a página.)
    Na página Accounts (Contas), The Tea Factory é exibido em Recently Viewed Accounts (Contas exibidas recentemente).
  5. Clique em The Tea Factory.
  6. Clique em Details (Detalhes). Observe que os campos Account Name, Phone e Account Number 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 insere em um banco de dados.

Escrever o método

  1. Retorne à classe NewAccounts no Developer Console.
  2. 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;
        }
    }
  3. Clique em File (Arquivo) | Save (Salvar).

Execute o método.

  1. Clique em Debug (Depurar) | Open Execute Anonymous Window (Abrir janela Executar no modo anônimo).
  2. Na janela Enter Apex Code (Inserir código do Apex), cole este código:
    NewAccounts.sObjectsInsert(3);
  3. Selecione Open log (Abrir registro) e clique em Execute (Executar). A janela de log é aberta.
  4. 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:

Um espaço subdividido em três slots com uma conta em cada slot. Slot 1: Name = The Tea Factory 1, AccountNumber = 356291. Slot 2: Name = The Tea Factory 2, AccountNumber = 356292. Slot 3: Name = The Tea Factory 3, AccountNumber = 356293.

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.

Nota

Nota

Não se esqueça de aumentar o contador no loop while. Se o nosso código de exemplo não adicionar continuamente 1 a counter, a condição nunca será alcançada. O loop while continuará adicionando registros até ser alcançado o limite de tempo definido pelo Salesforce.

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