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
:
- Database.insert(sObject records, Boolean allOrNone):
Essa operação é usada para inserir registros em massa no Salesforce. O parâmetroallOrNone
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 definirallOrNone
comofalse
, você pode inserir um conjunto de registros em lote, mesmo que alguns deles falhem. - 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. SeallOrNone
for definido comotrue
, todos os registros devem ser atualizados ou inseridos com sucesso para que a operação seja considerada um sucesso. SeallOrNone
for definido comofalse
, alguns registros podem falhar, mas a operação ainda será considerada um sucesso se pelo menos um registro for atualizado ou inserido com sucesso. - Database.update(sObject records, Boolean allOrNone):
Essa operação é usada para atualizar registros em massa no Salesforce. O parâmetroallOrNone
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
). UsarallOrNone
comofalse
permite que você atualize um conjunto de registros em lote, mesmo que alguns deles falhem. - Database.delete(sObject records, Boolean allOrNone):
Essa operação é usada para excluir registros em massa no Salesforce. O parâmetroallOrNone
funciona de maneira semelhante às operações anteriores. SeallOrNone
for definido comotrue
, todos os registros devem ser excluídos com sucesso para que a operação seja considerada um sucesso. SeallOrNone
for definido comofalse
, 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:
- 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.
- 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. - 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.
- O uso de cláusulas como
WHERE
,LIMIT
,ORDER BY
eLIKE
permite refinar consultas e obter resultados mais específicos. - 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!