Estamos em meio a um projeto que utilizamos o objeto de Casos da Salesforce, para fazer uma controle de Atendimento do cliente. Porem, se trata de um atendimento rapido, onde nao e necessario realizar o registro da Solucao do problema, ao fechar o Caso. Diante dessa situacao, fui ao Layout de Pagina de fechamento do Caso, para remover a secao de "Solution". Porem nao encontrei os campos para remover! Fui entao pesquisar e compartilho aqui a solucao simples e rapida para remover esses campos de Solucao:O primeiro passo e acessar o layout de fechamento, em modo de edicao e clicar em "Propriedades de layout":Por fim, desmarcar a opcao de "Secao de informacoes da Solucao - Mostrar secao na pagina da edicao":Apos clicar em OK, a Opcao de Solucoes, nao estara mais disponivel na tela de fechamento de Casos!Bem, essa foi rapida... ;)* Esta precisando de um suporte ou uma consultoria na configuracao dos Casos ou ServiceCloud da sua Org Salesforce? Entre em contato conosco - CbCloud: http://www.cbcloud.com.br/ Um das coisas mais interessantes de se trabalhar com linguagens de programacao Orientadas a Objeto e a possibilidade de se trabalhar com Abstracao. No Salesforce, mais especificamente no plataforma Force.com, todos os objetos abstraem de sObject, sendo assim possivel, trabalhar de forma generica com todos os Objetos da Plataforma, sejam eles nativos ou personalizados.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 abstracao, consigo, por exemplo atualizar atualizar registros de um Objeto Account ou Personalizado com o mesmo codigo: 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 metodo Main, eu busco os dados de objetos diferente (Account e MeuObjeto__c) e chamo um metodo generico, chamado atualizaProprietario que tem o poder de atualizar qualquer objeto da plataforma Force.com, afinal todos abstraem de sObject (por isso uso o sObject como parametro desse metodo). No metodo atualizaProprietario, veja que uso o metodo put do SObject (que e um Key/Value) para dizer qual campo desejo atualizar (OwnerId) e qual o novo valor (passado por parametro).Bem, vamos ver agora como faco para buscar, de forma generica, 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 metodo buscaNome, que utiliza o metodo get do sObject para buscar o valor de um campo no objeto. O resultado dos System.Debug sao:Por fim, vamos fazer um metodo que retorne uma String com o tipo do Objeto que foi passado como parametro: public void Main() { Account conta = [SELECT