Advertisement
airton-junior

Métodos Database

Mar 30th, 2023 (edited)
703
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.58 KB | None | 0 0
  1. System.debug(System.now());
  2. System.debug(System.now().format());
  3.  
  4. Integer x = 1;
  5. Integer y = 2;
  6. System.assert(y<x, 'A condição esperada não foi atingida');
  7.  
  8. List<Account> contas = [SELECT Name, phone FROM Account WHERE Name LIKE 'U%'];
  9. //System.assertEquals(5, contas.size());
  10. //System.assert(contas.size()==5, 'Não são iguais');
  11. //System.assertNotEquals(5, contas.size(), 'Mensagem');
  12. //System.debug(contas.size());
  13. List<Account> contas1 = [SELECT Name, phone FROM Account WHERE Name LIKE 'U%'];
  14. List<Account> contas2 = [SELECT Name, phone FROM Account WHERE Name LIKE 'E%'];
  15. System.debug(System.equals(contas1, contas2));
  16.  
  17.  
  18. Account a = new Account(Name='Burlington', billingstate='NY');
  19. Account b = new Account(Name='Burlington', billingstate='NA');
  20.  
  21. String msg = System.equals(a, b)?'São iguais':'Não são iguais';
  22. System.debug(msg);
  23.  
  24.  
  25. List<User> userDetails = [SELECT Id, Name, ProfileId, isActive FROM User];
  26. for(User u:userDetails){
  27.   System.debug(u);
  28. }
  29.  
  30. //COMO BUSCAR DADOS DE UM USUÁRIO, RESETAR A SENHA, GERAR NOVA E OBTER E ATRIBUIR SENHA MANUALMENTE
  31. List<User> userDetails = [SELECT Id, Name, ProfileId, isActive FROM User
  32.                          WHERE Name = 'Getulio Vargas'];
  33. Id idUser;
  34. for(User u:userDetails){
  35.   System.debug(u);
  36.     idUser = u.Id;
  37. }
  38. String novaSenha = System.resetPassword(idUser, true).getPassword();
  39. //o valor boolean de dentro de resetPassword, é para enviar (true) ou não (false) um email para o usuário redefinir a senha.
  40. System.debug(novaSenha);
  41. System.setPassword(idUser, 'a1aaaaaa');
  42.  
  43.  
  44. //DATABASE INSERT COM UM ÚNICO OBJETO
  45. try{
  46. Account a = new Account(Name='Tesla Motors', billingstate='NY', accountNumber = '12345678');
  47. Account b = new Account(Name='Chevrolet', billingstate='CA');
  48.  
  49. Database.SaveResult resultado = Database.insert(b, false);
  50. System.debug('Resultado: '+resultado.isSuccess());
  51. }catch(Exception e){
  52.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.insert é true. '+e.getMessage());
  53. }
  54.  
  55. //DATABASE INSERT COM LISTA
  56. try{
  57. Account a = new Account(Name='Tesla Motors', billingstate='NY', accountNumber = '12345678');
  58. Account b = new Account(Name='Chevrolet', billingstate='CA');
  59. Account c = new Account(Name='Fiat', billingstate='NE', accountNumber = '12345678');
  60. Account d = new Account(Name='Peugeot', billingstate='AZ');
  61.  
  62. List<Account> contas = new List<Account>{a, b, c, d};
  63.  
  64. Database.SaveResult[] resultados = Database.insert(contas, false);
  65. //System.debug('Resultado: '+resultado.isSuccess());
  66. for(Database.SaveResult dsr:resultados){
  67.   System.debug(dsr);
  68. }
  69. }catch(Exception e){
  70.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.insert é true. '+e.getMessage());
  71. }
  72.  
  73.  
  74. try{
  75. Account a = new Account(Name='Tesla Motors', billingstate='NY', accountNumber = '12345678');
  76. Account b = new Account(Name='Chevrolet', billingstate='CA');
  77. Account c = new Account(Name='Fiat', billingstate='NE', accountNumber = '12345678');
  78. Account d = new Account(Name='Peugeot', billingstate='AZ');
  79.  
  80. List<Account> contas = new List<Account>{a, b, c, d};
  81.  
  82. Database.SaveResult[] resultados = Database.insert(contas, false);
  83. //System.debug('Resultado: '+resultado.isSuccess());
  84. for(Database.SaveResult dsr:resultados){
  85.   if(dsr.isSuccess()){
  86.     System.debug('Conta inserida com sucesso: '+dsr.getId());
  87.   }else{
  88.     List<Database.Error> dbeList = dsr.getErrors();
  89.     for(Database.Error dbe:dbeList){
  90.       System.debug('Erro: ');
  91.       System.debug(dbe.getStatusCode()+' - '+dbe.getMessage());
  92.       System.debug('Campos do erro: ');
  93.       System.debug(dbe.getFields());
  94.     }
  95.   }
  96. }
  97. }catch(Exception e){
  98.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.insert é true. '+e.getMessage());
  99. }
  100.  
  101. //DATABASE UPDATE COM UM ÚNICO OBJETO
  102. String geraResposta(Boolean b){
  103.   return b?'Registro atualizado com sucesso':'Erro na atualização';
  104. }
  105. try{
  106. Account pop = [SELECT Name, billingState, accountNumber FROM Account LIMIT 1];
  107. System.debug(pop.Name+' - '+pop.accountNumber);
  108. pop.AccountNumber = 'ABCDEFGH';
  109. pop.Name = pop.Name+' Ltda';
  110. Database.SaveResult resultado = Database.update(pop, true);
  111. System.debug('Resultado: '+geraResposta(resultado.isSuccess()));
  112. pop = [SELECT Name, billingState, accountNumber FROM Account WHERE Id =  :resultado.getId()];
  113. System.debug(pop.Name+' - '+pop.AccountNumber);
  114. }catch(Exception e){
  115.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.update é true. '+e.getMessage());
  116. }
  117.  
  118. //DATABASE UPDATE COM LISTA
  119. List<Account> contasAtualizadas = new List<Account>();
  120. try{
  121.   List<Account> contas = [SELECT Name, AccountNumber FROM Account LIMIT 4];
  122.  
  123.   for(Account a:contas){
  124.     System.debug(a.Name+' - '+a.AccountNumber);
  125.     if(a.AccountNumber.startsWith('CC')){
  126.       a.AccountNumber = a.AccountNumber.replace('CC', 'CD');
  127.       System.debug('Objeto a'+a);
  128.     }else if(a.AccountNumber.startsWith('AB')){
  129.       System.debug('Conta que começa com AB '+a.AccountNumber);
  130.       a.AccountNumber = null;
  131.     }
  132.     contasAtualizadas.add(a);
  133.   }
  134.   Database.SaveResult[] resultados = Database.update(contasAtualizadas, false);
  135.   //System.debug('Resultado: '+resultado.isSuccess());
  136.   for(Database.SaveResult dsr:resultados){
  137.     if(dsr.isSuccess()){
  138.       System.debug('Conta atualizada com sucesso: '+dsr.getId());
  139.     }else{
  140.       List<Database.Error> dbeList = dsr.getErrors();
  141.       for(Database.Error dbe:dbeList){
  142.         System.debug('Erro: ');
  143.         System.debug(dbe.getStatusCode()+' - '+dbe.getMessage());
  144.         System.debug('Campos do erro: ');
  145.         System.debug(dbe.getFields());
  146.       }
  147.     }
  148. }
  149. }catch(Exception e){
  150.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.update é true. '+e.getMessage());
  151. }finally{
  152.   for(Account a:contasAtualizadas){
  153.     System.debug('Conta após a atualização: '+a);
  154.   }
  155. }
  156.  
  157. //DATABASE SAVEPOINT COM DATABASE UPDATE COM LISTA
  158. List<Account> contasAtualizadas = new List<Account>();
  159. try{
  160.   List<Account> contas = [SELECT Name, AccountNumber FROM Account LIMIT 4];
  161.  
  162.   for(Account a:contas){
  163.     System.debug(a.Name+' - '+a.AccountNumber);
  164.     if(a.AccountNumber.startsWith('CD')){
  165.       a.AccountNumber = a.AccountNumber.replace('CD', 'CF');
  166.     }else if(a.AccountNumber.startsWith('AB')){
  167.       a.AccountNumber = 'ZZ';
  168.     }
  169.     contasAtualizadas.add(a);
  170.   }
  171.   Savepoint sp = Database.setSavePoint();
  172.   Database.SaveResult[] resultados = Database.update(contasAtualizadas, false);
  173.   //System.debug('Resultado: '+resultado.isSuccess());
  174.   for(Database.SaveResult dsr:resultados){
  175.     if(dsr.isSuccess()){
  176.       System.debug('Conta atualizada com sucesso: '+dsr.getId());
  177.       Account ac = [SELECT Name, accountNumber FROM Account WHERE Id = :dsr.getId()];
  178.       System.debug(ac.Name+' - '+ac.accountNumber);
  179.     }else{
  180.       List<Database.Error> dbeList = dsr.getErrors();
  181.       for(Database.Error dbe:dbeList){
  182.         System.debug('Erro: ');
  183.         System.debug(dbe.getStatusCode()+' - '+dbe.getMessage());
  184.         System.debug('Campos do erro: ');
  185.         System.debug(dbe.getFields());
  186.       }
  187.     }
  188. }
  189. Database.rollback(sp);
  190. }catch(Exception e){
  191.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.update é true. '+e.getMessage());
  192. }finally{
  193.   List<Account> contas = [SELECT Name, AccountNumber FROM Account LIMIT 4];
  194.   for(Account c:contas){
  195.     System.debug(c.Name+' - '+c.AccountNumber);
  196.   }
  197. }
  198.  
  199. //Delete Individual sem Classe
  200.  
  201. Account a = [SELECT Name FROM Account WHERE Name LIKE 'Conta%' LIMIT 1];
  202. delete a;
  203. System.debug(a.Id);
  204. System.debug(a.Name);
  205.  
  206. Account a = [SELECT Name FROM Account WHERE id='0018Y00002w78LHQAY'];
  207. System.debug(a.Name);
  208.  
  209. //Undelete de um único objeto
  210. List<Account> listaParaUndelete = [SELECT Id, Name FROM Account WHERE isDeleted = true AND Id = '0018Y00002w78LHQAY' ALL ROWS];
  211. for(Account a:listaParaUndelete){
  212.   System.debug(a);
  213.   undelete a;
  214. }
  215.  
  216. //EXIBINDO REGISTROS QUE FORAM EXCLUÍDOS DA LIXEIRA MAS NÃO É POSSÍVEL DE SE FAZER O UNDELETE
  217. //Enquanto está na lixeira, é possível utilizar o undelete. Porém, mesmo excluído da lixeira, é possível lê-lo.
  218. List<Account> listaParaUndelete = [SELECT Id, Name FROM Account WHERE isDeleted = true AND Name LIKE 'Conta%' ALL ROWS];
  219. for(Account a:listaParaUndelete){
  220.   System.debug(a);
  221.  
  222. }
  223. undelete listaParaUndelete;
  224.  
  225. //recuperando 2 registros da lixeira à partir de uma lista
  226. List<Contact> listaParaUndelete = [SELECT Id, Name FROM Contact WHERE isDeleted = true AND Name LIKE 'Antônio%' ALL ROWS];
  227. for(Contact a:listaParaUndelete){
  228.   System.debug(a);
  229.  
  230. }
  231. undelete listaParaUndelete;
  232.  
  233.  
  234. //DATABASE SAVEPOINT COM DATABASE DELETE COM ÚNICO OBJETO
  235. Account contaParaExclusao = [SELECT Name, AccountNumber FROM Account WHERE Name LIKE 'Conta%' LIMIT 1];
  236. try{
  237.   System.debug('Conta antes de excluir: '+contaParaExclusao.Name);
  238.   Savepoint sp = Database.setSavePoint();
  239.   Database.DeleteResult resultado = Database.delete(contaParaExclusao, false);
  240.     if(resultado.isSuccess()){
  241.       System.debug('Conta excluída com sucesso: '+resultado.getId());
  242.       Account ac = [SELECT Name FROM Account WHERE Id = :resultado.getId() ALL ROWS];
  243.       System.debug(ac.Name+' - Esta conta foi excluída e está na lixeira');
  244.     }else{
  245.       // List<Database.Error> dbeList = dsr.getErrors();
  246.       // for(Database.Error dbe:dbeList){
  247.       //   System.debug('Erro: ');
  248.       //   System.debug(dbe.getStatusCode()+' - '+dbe.getMessage());
  249.       //   System.debug('Campos do erro: ');
  250.       //   System.debug(dbe.getFields());
  251.       // }
  252.     }
  253.  
  254. Database.rollback(sp);
  255. }catch(Exception e){
  256.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.update é true. '+e.getMessage());
  257. }finally{
  258.   List<Account> contas = [SELECT Name FROM Account WHERE Id = :contaParaExclusao.Id];
  259.   for(Account c:contas){
  260.     System.debug(c.Name+' - Visualização após rollback');
  261.   }
  262. }
  263.  
  264.  
  265. //DATABASE SAVEPOINT COM DATABASE DELETE COM ÚNICO OBJETO COM Database.Error
  266. Account contaParaExclusao = [SELECT Name, AccountNumber FROM Account WHERE Name LIKE 'Edge%' LIMIT 1];
  267. try{
  268.   System.debug('Conta antes de excluir: '+contaParaExclusao.Name);
  269.   Savepoint sp = Database.setSavePoint();
  270.   Database.DeleteResult resultado = Database.delete(contaParaExclusao, false);
  271.     if(resultado.isSuccess()){
  272.       System.debug('Conta excluída com sucesso: '+resultado.getId());
  273.       Account ac = [SELECT Name FROM Account WHERE Id = :resultado.getId() ALL ROWS];
  274.       System.debug(ac.Name+' - Esta conta foi excluída e está na lixeira');
  275.     }else{
  276.       List<Database.Error> erros = resultado.getErrors();
  277.       for(Database.Error dbe:erros){
  278.         System.debug('Erro: ');
  279.         System.debug(dbe.getStatusCode()+' - '+dbe.getMessage());
  280.         System.debug('Campos do erro: ');
  281.         System.debug(dbe.getFields());
  282.       }
  283.     }
  284.  
  285. Database.rollback(sp);
  286. }catch(Exception e){
  287.   System.debug('Gerou uma exceção dentro no nosso catch pq o argumento booleano de Database.update é true. '+e.getMessage());
  288. }finally{
  289.   List<Account> contas = [SELECT Name FROM Account WHERE Id = :contaParaExclusao.Id];
  290.   for(Account c:contas){
  291.     System.debug(c.Name+' - Visualização após rollback');
  292.   }
  293. }
  294.  
  295.  
  296. //DATABASE SAVEPOINT COM DATABASE MERGE COM LISTA
  297. List<Account> contaParaMergeMaster = [SELECT Name, website FROM Account WHERE Name LIKE 'Fiat%' ORDER BY ID];
  298. System.debug('Primeira query');
  299. System.debug(contaParaMergeMaster);
  300.  
  301.  
  302. List<Account> contasParaMerge2 = [SELECT Name, website FROM Account WHERE Name LIKE 'Fiat%' ORDER BY ID OFFSET 1];
  303. System.debug('Segunda query');
  304. System.debug(contasParaMerge2);
  305.  
  306. try{
  307.   System.debug('Conta master: '+contaParaMergeMaster[0]);
  308.   System.debug('Contato conta master: '+contaParaMergeMaster[0].Contacts);
  309.   //Savepoint sp = Database.setSavePoint();
  310.   Database.MergeResult[] resultado = Database.merge(contaParaMergeMaster[0], contasParaMerge2, false);
  311.     for(Database.MergeResult registro:resultado){
  312.       if(registro.isSuccess()){
  313.         System.debug('Registro sucesso: '+registro);
  314.       }else{
  315.         List<Database.Error> erros = registro.getErrors();
  316.         for(Database.Error dbe:erros){
  317.           System.debug('Erro sObject: ');
  318.           System.debug(dbe.getStatusCode()+' - '+dbe.getMessage());
  319.           System.debug('Campos do erro: ');
  320.           System.debug(dbe.getFields());
  321.         }
  322.     }
  323.  
  324.     }
  325. System.debug('Após o merge, antes do rollback');
  326. for(Account a:[SELECT Name, website, (SELECT Name, email, phone, accountid FROM Contacts) FROM Account WHERE Name LIKE 'Fiat%' ORDER BY ID]){
  327.   for(Contact c:a.Contacts){
  328.     System.debug('Contato da conta: '+ a+' - '+c);
  329.   }
  330. }
  331. //Database.rollback(sp);
  332. }catch(Exception e){
  333.   System.debug('Gerou uma exceção dentro no nosso catch: '+e.getMessage());
  334. }finally{
  335.   System.debug('Feito rollback, tudo volta a ser como antes:');
  336.   for(Account a:[SELECT Name, website, (SELECT Name, email, phone, accountid FROM Contacts) FROM Account WHERE Name LIKE 'Fiat%' ORDER BY ID]){
  337.     for(Contact c:a.Contacts){
  338.       System.debug('Contato da conta: '+ a+' - '+c);
  339.     }
  340.   }
  341. }
  342. EXERCÍCIO:
  343. Criar uma classe com 2 métodos estáticos com polimorfismo. Ambos devem ter o mesmo nome, porém com assinaturas diferentes. 1 deles deve poder fazer a inclusão de uma lista de Contatos utilizando a Classe Database.SaveResult. O outro também deverá utilizar a Classe Database.SaveResult, porém, deverá poder gravar um único objeto. Utilizar a classe Database.Error e try{}catch{} para ambos os métodos.
  344. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement