CRUD no Salesforce!10 Dicas essenciais para operações de CRUD no Salesforce!

Insert, Update, Delete, Undelete, Upsert
Essas são as operações básicas de CRUD (Create, Read, Update, Delete) no Salesforce. Você pode criar, atualizar, excluir e recuperar registros usando essas operações.

1️⃣ Inserir um único registro

Se você deseja inserir um único registro, pode fazer da seguinte forma:

Account acc = new Account();
acc.Name = 'Luis';
insert acc;

2️⃣ Inserir vários registros

Se você deseja inserir vários registros de uma vez, pode usar uma lista:

List<Account> accList = new List<Account>();
Account acc1 = new Account();
acc1.Name = 'Luis';
accList.add(acc1);

Account acc2 = new Account();
acc2.Name = 'Maria';
accList.add(acc2);

insert accList;

3️⃣ Atualizar um registro

Para atualizar um registro existente, você precisa primeiro recuperá-lo usando uma consulta e, em seguida, realizar as alterações necessárias:

Account[] acct = [SELECT Id, BillingCity FROM Account WHERE Name ='Luis' LIMIT 1];
acct.BillingCity = 'São Paulo';
update acct;

4️⃣ Excluir um registro

Para excluir um registro, você pode usar a seguinte sintaxe:

Account[] acct = [SELECT Id FROM Account WHERE Name ='Luis' LIMIT 1];
delete acct;

5️⃣ Recuperar registros excluídos

Se você precisar recuperar registros excluídos recentemente, pode usar o seguinte:

Account[] savedAccts = [SELECT Id FROM Account WHERE Name ='Luis' ALL ROWS];
undelete savedAccts;

6️⃣ Upsert – Inserir ou atualizar

O upsert é uma operação útil quando você quer inserir um registro se ele não existir ou atualizá-lo se já existir. Veja um exemplo:

List<Account> accList = new List<Account>();
// Adicione dados à lista accList
upsert accList ExtIDField__c;

7️⃣ Atualizar registros relacionados

Se você precisar atualizar registros relacionados (como contatos de uma conta), lembre-se de que você precisa realizar a atualização separadamente. Veja um exemplo:

List<Account> accList = [SELECT Name, (SELECT LastName FROM Contacts) FROM Account WHERE Name LIKE '%Luis%']; 
for (Account acc : accList) {
   acc.Name = acc.Name + '-Brasil'; 
   for (Contact cnt : acc.Contacts) {
      cnt.LastName = cnt.LastName + '--Bahia';
   }
}
update accList;

List<Contact> cntList = new List<Contact>();
for (Account acc : accList) {
   for (Contact cnt : acc.Contacts) {
      cntList.add(cnt);
   }
}
update cntList;

8️⃣ Tratamento de exceções

É sempre uma boa prática implementar tratamento de exceções ao realizar operações de CRUD. Isso ajuda a identificar e lidar com possíveis erros. Veja um exemplo de tratamento de exceção:

Account acct = [SELECT Id, BillingCity FROM Account WHERE Name ='Luis' LIMIT 1];
acct.BillingCity = 'São Paulo';
try {
   update acct;
} catch (Exception e) {
   System.debug(e.getLineNumber());
   System.debug(e.getMessages());
}

9️⃣ Manipulação em lote e tratamento de erros

Quando estiver trabalhando com operações em lote, é importante considerar o tratamento de erros e o controle de sucesso ou falha de cada operação. Veja um exemplo de inserção em lote com tratamento de erros:

List<Account> accList = new List<Account>();
Account acc1 = new Account();
acc1.Name = 'Luis';
accList.add(acc1); 

Account acc2 = new Account();
acc2.Name = 'Maria';
accList.add(acc2); 

Database.SaveResult[] resList = Database.insert(accList, false); 
// false indica que operações parciais são permitidas
Database.SaveResult[] resList= Database.insert(accList, true); 
// true indica que deve ser tudo ou nada

// Iterar pelos resultados de inserção
for (Database.SaveResult res: resList) {
   if (res.isSuccess()) {
      System.debug('Registro inserido com sucesso. ID do registro: ' + res.getId());
   } else {
      for (Database.Error err : res.getErrors()) {
         System.debug('O seguinte erro ocorreu.');
         System.debug(err.getStatusCode() + ': ' + err.getMessage());
         System.debug('Campos do contato afetados por este erro: ' + err.getFields());
      }
   }
}

🔟 Atualizar registros em lote e limite de exceção DML

Ao atualizar registros em lote, é importante considerar o limite de exceção DML no Salesforce. Normalmente, se o número de comandos de atualização for menor que 150, não haverá problemas. No entanto, quando esse limite for ultrapassado, ocorrerá um erro de limite de exceção DML. Isso ocorre porque o comando de atualização está dentro de um loop.

Vamos dar uma olhada no exemplo abaixo:

List<Account> accList = [SELECT Name, (SELECT LastName FROM Contacts) FROM Account WHERE Name LIKE '%Luis%']; 
for (Account acc : accList) {
   acc.Name = acc.Name + '-Brasil'; 
   for (Contact cnt : acc.Contacts) {
      cnt.LastName = cnt.LastName + '--Bahia';
   }
   update acc.Contacts;
}

update accList;

Nesse exemplo, estamos atualizando uma lista de contas e seus contatos relacionados. No entanto, o comando de atualização update accList está dentro do loop for, o que pode resultar em um número excessivo de comandos de atualização.

Ao realizar o loop para atualizar os contatos, não execute o comando de atualização dentro do loop. Em vez disso, faça todas as alterações necessárias nos contatos e, em seguida, execute o comando de atualização update accList para atualizar todas as contas de uma vez. Isso ajudará a evitar o erro de limite de exceção DML e otimizará o desempenho da atualização em lote.

Lembre-se de sempre considerar os limites do Salesforce ao realizar operações em lote e evite ultrapassar os limites de exceção DML para uma execução bem-sucedida de suas operações de atualização.

Operações DML com o parâmetro “allOrNone”

No Salesforce, ao realizar operações de inserção, atualização, exclusão e upsert (atualização ou inserção condicional) de registros, você tem a opção de usar o parâmetro allOrNone. Esse parâmetro determina o comportamento da operação quando ocorrem erros nos registros.

Vamos entender como funciona cada uma dessas operações com o parâmetro allOrNone:

  1. Database.insert(sObject records, Boolean allOrNone):
    Essa operação é usada para inserir registros em massa no Salesforce. O parâmetro allOrNone determina se a operação deve ser considerada um sucesso somente se todos os registros forem inseridos com êxito (true), ou se alguns registros falharem, a operação ainda será considerada um sucesso e os registros inseridos com sucesso serão salvos (false). Ao definir allOrNone como false, você pode inserir um conjunto de registros em lote, mesmo que alguns deles falhem.
  2. Database.upsert(sObject records, Boolean allOrNone): Essa operação é usada para atualizar ou inserir registros com base em um campo externo definido como chave. O parâmetro allOrNone funciona da mesma maneira que na operação de inserção em massa. Se allOrNone for definido como true, todos os registros devem ser atualizados ou inseridos com sucesso para que a operação seja considerada um sucesso. Se allOrNone for definido como false, alguns registros podem falhar, mas a operação ainda será considerada um sucesso se pelo menos um registro for atualizado ou inserido com sucesso.
  3. Database.update(sObject records, Boolean allOrNone):
    Essa operação é usada para atualizar registros em massa no Salesforce. O parâmetro allOrNone controla se a operação será considerada um sucesso somente se todas as atualizações forem realizadas com êxito (true), ou se alguns registros falharem, a operação ainda será considerada um sucesso e os registros atualizados com sucesso serão salvos (false). Usar allOrNone como false permite que você atualize um conjunto de registros em lote, mesmo que alguns deles falhem.
  4. Database.delete(sObject records, Boolean allOrNone):
    Essa operação é usada para excluir registros em massa no Salesforce. O parâmetro allOrNone funciona de maneira semelhante às operações anteriores. Se allOrNone for definido como true, todos os registros devem ser excluídos com sucesso para que a operação seja considerada um sucesso. Se allOrNone for definido como false, alguns registros podem falhar, mas a operação ainda será considerada um sucesso se pelo menos um registro for excluído com sucesso.

O uso do parâmetro allOrNone permite que você controle o comportamento das operações DML em caso de erros nos registros. Ao considerar suas necessidades de negócios e os requisitos de integridade dos dados, você pode decidir se deseja que as operações sejam bem-sucedidas apenas se todos os registros forem processados com êxito ou se alguns erros podem ser tolerados.


🔥 Conclusão 🔥

No mundo do Salesforce, as operações DML (Data Manipulation Language) desempenham um papel fundamental na manipulação de registros. Este artigo aborda 10 exemplos de operações DML e oferece uma explicação elegante de cada uma delas. Aqui está um resumo dos principais pontos abordados:

  1. Inserção, atualização, exclusão, undelete e upsert são exemplos de operações básicas de DML. Cada uma delas tem um propósito específico na criação, modificação e remoção de registros.
  2. O uso de parâmetros como allOrNone nas operações DML permite controlar o comportamento das operações quando ocorrem erros nos registros. Você pode optar por considerar uma operação bem-sucedida apenas se todos os registros forem processados com êxito, ou permitir que alguns registros falhem e ainda assim considerar a operação um sucesso.
  3. Exemplos de consultas SOQL (Salesforce Object Query Language) e SOSL (Salesforce Object Search Language) foram fornecidos, mostrando como recuperar dados de objetos no Salesforce com base em critérios específicos.
  4. O uso de cláusulas como WHERE, LIMIT, ORDER BY e LIKE permite refinar consultas e obter resultados mais específicos.
  5. Demonstrou-se a manipulação de registros em lote por meio de loops for e operações DML em massa, como inserção e atualização de listas de registros.

Com essas informações, você está mais preparado para entender e realizar operações DML no Salesforce. Lembre-se de considerar as melhores práticas e requisitos específicos do seu negócio ao implementar essas operações. Aproveite o poder do Salesforce para gerenciar seus dados de forma eficiente e impulsionar o sucesso dos seus negócios.

Com essas dicas, você está pronto para realizar operações de CRUD no Salesforce de forma eficiente e segura. Lembre-se de considerar o tratamento de exceções e o controle de erros para uma melhor experiência de desenvolvimento. Experimente essas técnicas e aproveite ao máximo o Salesforce!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *