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:
Postar um comentário