quarta-feira, 20 de abril de 2016

GUID no Salesforce

Hoje irei compartilhar uma pequena função Apex para gerar um código GUID no Salesforce. GUID significa Globally unique identifier. Em português Indentificador global único. Isto é, uma código único que é gerado para identificar alguma coisa. Normalmente é usado para identificar registros em sistemas diferentes, em processos de integração. Bem, o que vamos gerar a seguir ficará assim:


 4b033118-86a6-8941-c6e2-ad1015509c6c  

O SFDC, por padrão, diferente de outras plataformas de desenvolvimento, não possui uma classe padrão para gerar os GUID. Após algumas pesquisas encontrei em alguns fóruns um código simples e interessante, que compartilho a seguir:


 global class Guid{   
   global static String generate(){   
     Blob b = Crypto.GenerateAESKey(128);  
     String h = EncodingUtil.ConvertTohex(b);  
     String guid = h.SubString(0,8)+ '-' + h.SubString(8,12) + '-' + h.SubString(12,16) + '-' + h.SubString(16,20) + '-' + h.substring(20);  
     return guid;  
   }  
 }  


Li também que esse código não seria tão perfeito, pois poderia gerar GUID repetidos. Dessa forma, fiz a classe de teste a seguir e não constatei nenhum código repetido:


 @isTest  
 private class GuidTest{  
   static testMethod void test(){  
     boolean erro = false;  
     Set<String> lista = new Set<String>();  
     for (integer i = 0; i < 100000; i++){  
       String uid = Guid.generate();  
       if (lista.contains(uid)){  
         System.debug(i);  
         System.debug(lista.Size());  
         System.debug('GUID: ' + uid);  
         erro = true;  
         break;  
       }  
       else  
         lista.add(uid);  
     }  
     System.assert(!erro, 'A classe GUID gerou um valor duplicado!');  
   }    
 }  

Veja que gerei cem mil UIDs e nenhum duplicou. Me pareceu bem confiável! Porém, se alguém encontrar alguma falha, comente aqui no post. 

Por hoje é só!




Nenhum comentário: