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