Vamos ao primeiro exemplo de como isso funciona:
SObject sObj1 = new Account(); SObject sObj2 = new MeuObjeto__c();
Veja que instanciei um objeto Account e (personalizado) MeuObjeto__c como um sObject sem problemas. Assumindo esse conceito de abstração, consigo, por exemplo atualizar atualizar registros de um Objeto Account ou Personalizado com o mesmo código:
public void Main() { Account conta = [SELECT id, name, OwnerId FROM Account LIMIT 1]; MeuObjeto__c meuObj = [SELECT id, name, OwnerId FROM MeuObjeto__c LIMIT 1]; this.atualizaProprietario(conta, UserInfo.getUserId()); this.atualizaProprietario(meuObj, UserInfo.getUserId()); } public void atualizaProprietario(SObject sObj, id idNovoProprietario){ sObj.put('OwnerId', idNovoProprietario); update sObj; }
No método Main, eu busco os dados de objetos diferente (Account e MeuObjeto__c) e chamo um método genérico, chamado atualizaProprietário que tem o poder de atualizar qualquer objeto da plataforma Force.com, afinal todos abstraem de sObject (por isso uso o sObject como parâmetro desse método). No método atualizaProprietário, veja que uso o método put do SObject (que é um Key/Value) para dizer qual campo desejo atualizar (OwnerId) e qual o novo valor (passado por parâmetro).
Bem, vamos ver agora como faço para buscar, de forma genérica, dados de um sObject:
public void Main() { Account conta = [SELECT id, name, OwnerId FROM Account LIMIT 1]; MeuObjeto__c meuObj = [SELECT id, name, OwnerId FROM MeuObjeto__c LIMIT 1]; String nomeConta = this.buscaNome(conta); String nomeMeuObj = this.buscaNome(meuObj); System.debug('Nome da conta: ' + nomeConta); System.debug('Nome do meuObj: ' + nomeMeuObj); } public String buscaNome(SObject sObj){ Object nome = sObj.get('name'); return String.valueOf(nome); }
Observe que, criei um método buscaNome, que utiliza o método get do sObject para buscar o valor de um campo no objeto. O resultado dos System.Debug são:
Por fim, vamos fazer um método que retorne uma String com o tipo do Objeto que foi passado como parâmetro:
public void Main() { Account conta = [SELECT id, name, OwnerId FROM Account LIMIT 1]; MeuObjeto__c meuObj = [SELECT id, name, OwnerId FROM MeuObjeto__c LIMIT 1]; String tipoConta = this.buscaTipo(conta); String tipoMeuObj = this.buscaTipo(meuObj); System.debug('Tipo da conta: ' + tipoConta); System.debug('Tipo do meuObj: ' + tipoMeuObj); } public String buscaTipo(SObject sObj){ Schema.DescribeSObjectResult result = sObj.getSObjectType().getDescribe(); return result.getName(); }
Para buscarmos o tipo do Objeto, usamos o método getSObjectType, que retorna um SObjectType e neste usamos o método getDescribe. O describe nos retorna informações informações básicas através do DescribeSObjectResult. No result temos um método getName que nos trás o tipo do Objeto, no caso Account e MeuObjeto__c:
Bem, por hoje é somente isso! :)
* Está precisando de um suporte ou uma consultoria nos desenvolvimentos Apex dentro da sua plataforma Salesforce? Entre em contato conosco - CbCloud: http://www.cbcloud.com.br/
Nenhum comentário:
Postar um comentário