Advertisement
airton-junior

Códigos SOQL e exercício

Mar 20th, 2023 (edited)
901
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.88 KB | None | 0 0
  1. Filial__c fil = new Filial__c();
  2. fil.name = 'Boston Dynamics';
  3. fil.Account__c = '001Dn00000LFrLyIAL';
  4. fil.email__c = 'boston@dynamics.conta1.com.br';
  5. insert fil;
  6.  
  7. //********************************************************
  8.  
  9. sObject sObj = new Account();
  10. Account a = (Account)sObj;
  11. a.Name = 'Lojas Americanas';
  12. a.phone = '(19)3334-9876';
  13. a.accountnumber = '12345678';
  14.  
  15. insert a;
  16.  
  17. //********************************************************
  18.  
  19. for(Account conta:[SELECT Name, billingcity, billingcountry FROM
  20.     Account WHERE billingstate = 'CA']){
  21.        
  22.     System.debug(conta.id+' - '+conta.Name+' - '+conta.billingcity);                
  23. }
  24.  
  25. //**************Exemplo Acima de outra forma**************
  26. List<Account> contas = [SELECT Name, billingcity, billingcountry FROM
  27.     Account WHERE billingstate = 'CA'];
  28.  
  29. for(Account c:contas){
  30.     System.debug(c.id+' - '+c.Name+' - '+c.billingcity);                
  31. }
  32.  
  33. //****************Busca-se filhos pelos pais**************
  34.  
  35. //***********Exibindo todos os contatos do primeiro pai****************
  36. List<Account> pais = [SELECT Name, (SELECT Name FROM Contacts)
  37.                      FROM Account WHERE Name LIKE 'U%'];
  38.  
  39. System.debug(pais);//Exibindo todos os pais em uma única linha
  40. List<Contact> filhos = pais[0].Contacts;
  41. System.debug('Filhos: '+filhos);//Exibindo todos os filhos do primeiro pai
  42. //em uma única linha
  43.  
  44. //***********Exibindo todos os contatos de todos os pais***************
  45. List<Account> pais = [SELECT Name, (SELECT Name FROM Contacts)
  46.                      FROM Account WHERE Name LIKE 'U%'];
  47.  
  48. //Iterando (percorrendo) todos os pais, e exibindo todos os filhos
  49. //para cada pai
  50. for(Account pai:pais){
  51.     System.debug(pai.Contacts);
  52. }
  53. //***********Iterando pais e filhos, primeiro mostrando o pai e a cada
  54. //***********pai, exibindo seus filhos********************************
  55. List<Account> pais = [SELECT Name, (SELECT Name FROM Contacts)
  56.                      FROM Account WHERE Name LIKE 'U%'];
  57.  
  58. for(Account pai:pais){
  59.     System.debug(pai.id+' - '+pai.name);
  60.     for(Contact filho: pai.Contacts){
  61.         System.debug(filho.name);
  62.     }
  63. }
  64.  
  65. //Obs.: Quando faço uma subquery para buscar os filhos de seus pais, sendo
  66. //ambos standard, na subquery, o objeto do qual buscamos os filhos, deve ser
  67. //escrito no plural.
  68.  
  69. /*
  70. EXERCÍCIO:
  71. Crie uma classe que contenha um método estático, que retorne um map, em que
  72. a chave do map deverá ser um objeto pai, e os filhos deverão estar contidos
  73. numa lista como valor daquela chave que é o pai. Nesse caso o pai será Account
  74. e os filhos serão Contact.
  75. Deve-se poder passar como argumento para o método, o billingstate da conta
  76. para a seleção dos pais que conterão os filhos.
  77.  
  78. Resolução do exercício:*/
  79. //Classe
  80. public with sharing class BuscaAccountsContactsPorEstado {
  81.    
  82.     public static Map<Account, List<Contact>> buscaPorEstado(String state){
  83.         List<Account> contas = [SELECT Name, (SELECT Name FROM Contacts) FROM
  84.                                Account WHERE billingstate = :state];
  85.         Map<Account, List<Contact>> paisEFilhos = new Map<Account, List<Contact>>();
  86.         for(Account pai:contas){
  87.             List<Contact> filhos = new List<Contact>();
  88.                 for(Contact filho:pai.Contacts){
  89.                     filhos.add(filho);
  90.                 }
  91.             paisEFilhos.put(pai, filhos);
  92.         }
  93.         return paisEFilhos;
  94.     }
  95. }
  96. //Anonymous
  97. Map<Account, List<Contact>> mapa = BuscaAccountsContactsPorEstado.buscaPorEstado('CA');
  98.  
  99. for(Account key:mapa.keySet()){
  100.     System.debug('Nome da conta: '+key.Name);
  101.     for(Contact filho:mapa.get(key)){
  102.         System.debug('Contato da '+key.Name+ ': '+filho.Name);
  103.     }
  104. }
  105.  
  106.  
  107. //OUTRA FORMA DE RESOLUÇÃO
  108. public with sharing class ClassePaiContatos {
  109.  
  110.     public static Map<Account, List<Contact>> buscaContasContatos(String estado){
  111.         List<Account> contasContatos = new List<Account>();
  112.         if (Schema.sObjectType.Account.fields.Name.isAccessible() && Schema.sObjectType.Account.fields.Phone.isAccessible()) {
  113.             contasContatos = [SELECT Name, Phone, (SELECT firstname, lastname, email FROM Contacts) FROM Account WHERE BillingState = :estado WITH SECURITY_ENFORCED];
  114.         }else{
  115.             return null;
  116.         }
  117.         // System.debug(contasContatos);
  118.         Map<Account, List<Contact>> mapa = new Map<Account,List<Contact>>();
  119.  
  120.         for(Account pai:contasContatos){
  121.             mapa.put(pai, pai.Contacts);
  122.         }
  123.         return mapa;
  124.     }
  125.  
  126. }
  127.  
  128. /*Anonymous
  129. Map<Account, List<Contact>> listona = ClassePaiContatos.buscaContasContatos('NY');
  130.  
  131. for(Account conta:listona.keySet()){
  132.   System.debug('Nome da conta: '+conta.Name);
  133.   Integer contador=1;
  134.   for(Contact contato:listona.get(conta)){
  135.     System.debug('Contato '+contador+' da empresa '+conta.Name+': '+contato.firstname+' - '+contato.email);
  136.     contador++;
  137.   }
  138. }
  139. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement