sábado, 14 de maio de 2016

Campo fórmula - Convertendo texto para número

Essa é uma dica rápida na criação de campos fórmula (formula fields) no Salesforce! 

Caso precise converter uma campo texto para numérico, na fórmula, utilize a função VALUE(texto):


 VALUE('05')  

Vamos criar uma formula com na Oportunidade. Pegaremos o valor total da oportunidade (Amount) e dividir por um campo que criamos (ValorTotal__c), que representa a quantidade de parcelas:


 2000 / VALUE(QuantidadeParcelas__c)  



segunda-feira, 9 de maio de 2016

Campo fórmula - Convertendo Lista de Opções para Texto

Essa é uma dica rápida para utilização de campo Lista de Opções em campos formula (formula fields) no Salesforce. Como é conhecido, ao tentar referenciar diretamente um campo Lista de Opções em uma fórmula, o Salesforce acusa um problema. Isto acontece porque o campo Lista de Opções armazena uma referência ao valor e não ele diretamente. Então precisamos converter esse valor para utilizar em nossas fórmulas. Conversão essa que não é necessária em códigos Apex.

Bem, para utilizar o campo Lista de Opções em uma fórmula, utilize a função TEXT(CampoListaOpcoes__c):


 TEXT(CampoListaOpcoes__c)  

Ou


 "Valor da Lista de Opções: " & TEXT(CampoListaOpcoes__c)  





domingo, 8 de maio de 2016

Convertendo List em Set e Set em List no Apex

Em algumas situações, me vi obrigado a converter uma collection List em um Set ou um Set em List em uma classe Apex. Creio que você também! É claro que, por serem estruturas diferentes, a quantidade de registros de um List (que permite itens repetidos) pode ser maior que de um Set (que não permite repetidos). Mas vamos ao código.

Inicialmente a conversão de List para Set:

 List<Integer> listDeInteiros = new List<Integer> {1, 2, 3, 3};  
 Set<Integer> setDeInteiros = new Set<Integer>(listDeInteiros);  
 system.assertEquals(4, listDeInteiros.size());  
 system.assertEquals(3, setDeInteiros.size());  



Agora a conversão de Set para List:


 Set<Integer> setDeInteiros = new Set<Integer> {1, 2, 3, 3};  
 Set<Integer> listDeInteiros = new Set<Integer>(setDeInteiros);  
 system.assertEquals(3, setDeInteiros.size());  
 system.assertEquals(3, listDeInteiros.size());  


É possível também, caso já possua um Set em uso, acrescentar toda a List ao Set:


 List<Integer> listDeInteiros = new List<Integer>{1, 2, 3};  
 Set<Integer> setDeInteiros = new Set<Integer> {0};  
 setDeInteiros.addAll(listDeInteiros);  
 system.assertEquals(4, setDeInteiros.size());  



E o contrário... Set ao List:


 Set<Integer> setDeInteiros = new Set<Integer>{1, 2, 3};  
 List<Integer> listDeInteiros = new List<Integer> {0};  
 listDeInteiros.addAll(setDeInteiros);  
 system.assertEquals(4, listDeInteiros.size());  





sexta-feira, 6 de maio de 2016

Apex: Acessando ID de um Tipo de Registro, pelo nome, sem query SOQL

É comum ao desenvolver uma classe ou trigger Apex, no Salesforce, precisarmos de pegar o ID de um Tipo de Registro, para inserirmos um novo registro daquele tipo ou mesmo para fazermos uma consulta de registros daquele tipo. 
Bem, há uma forma bem simples de buscar um determinado Tipo de Registro, pelo nome, sem a necessidade de uma consulta SOQL. Veja:


 Schema.Sobjecttype.Account.getRecordTypeInfosByName().get('Pessoa Física').getRecordTypeId();  



Observe que basta colocar o nome do Objeto (Account, nesse exemplo) e no get o nome do tipo de registro (Pessoa Física).


 Id idRtPF = Schema.Sobjecttype.Account.getRecordTypeInfosByName().get('Pessoa Física').getRecordTypeId();  
 Account conta = new Account(Name='Joao Silva', RecordTypeId = idRtPF);  
 insert conta;  


Ao usar essa instrução, ao invés de fazer uma consulta ao objeto RecordType, você se distanciará dos limites de governança (governor limits) e deixará seu código mais elegante.


ATUALIZAÇÃO IMPORTANTE:

Na release Summer ’18 a Salesforce adicionou o método Schema.DescribeSObjectResult.getRecordTypeInfosByDeveloperName(). Com esse, é possível pegar o id do Tipo de Registro pelo Developer Name. Isso é interessante para evitar problemas com Orgs multi idioma ou alterações do Label do tipo de registro. Veja o exemplo anterior com o novo método:


 Id idRtPF = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('PessoaFisica').getRecordTypeId();
 Account conta = new Account(Name='Joao Silva', RecordTypeId = idRtPF);  
 insert conta;  



* Precisa de um suporte ou consultoria com a plataforma Salesforce? Entre em contato conosco - CbCloud: http://www.cbcloud.com.br/ - Somos parceiros Gold Salesforce.



quinta-feira, 5 de maio de 2016

Dica rápida Apex: Como acessar a URL da instancia da sua Org - SFDC

Essa é uma dica rápida, para programador Salesforce Apex. Para se ter acesso a URL básica da sua Org Salesforce, basta usar o seguinte comando em seu código:


 String url = System.Url.getSalesforceBaseURL().toExternalForm();  



Ao usar o , teremos o seguinte retorno (de acordo com o servidor que está sua instância):


 https://na17.salesforce.com (Produção)  
 https://cs20.salesforce.com (Sandbox)  


E usar da forma que precisar. Por exemplo:


 String url = System.Url.getSalesforceBaseURL().toExternalForm();  
 PageReference pr = new PageReference(url);