quinta-feira, 31 de março de 2016

Criando registros do catálogo de preço (PriceBookEntry) padrão em classes de teste Apex

Hoje, ao precisar de criar uma classe de testes no Apex, que envolvia criar uma oportunidade e seus respectivos produtos, me deparei com uma facilidade interessante do Salesforce: A referencia do catálogo de preços padrão.

Para começar, precisei criar na minha classe de testes, um produto com seu preço padrão. Dessa forma, foi-se necessário inserir um registro do objeto Product2 e outro no PriceBookEntry referente ao produto e o respectivo catálogo de preços padrão (ou personalizado, se for o caso).

Então criei meu produto na minha classe de testes:


 Product2 produto = new Product2(name = 'Produto teste');  
 insert produto;  

Agora, para criar o PriceBookEntry, precisarei passar o ID do Produto, o preço e o ID do catálogo de preços. O ID do produto eu tenho, pois acabei de inserir o produto. O preço eu vou definir. E o ID do catálogo de preço padrão? Para essa, o Salesforce tem um método para retornar o ID, sem precisar de consultas SOQL:

Test.getStandardPricebookId()

Com esse método acima, você obtem o ID Catálogo de preços padrão, sem precisar consultas SOQL. Veja como ficou a criação do PriceBookEntry:


 Id pricebookId = Test.getStandardPricebookId();  
 PriceBookEntry pbe = new PriceBookEntry(Pricebook2Id = pricebookId, Product2Id = produto.id, UnitPrice = 500, IsActive = true);  
 insert pbe;  


Depois disso, foi só inserir os respectivos dados na OpportunityLineItem da Opportunity. Mas isso é papo para outro post!

domingo, 27 de março de 2016

Quociente e resto de uma divisão em Apex - SFDC

Essa é uma dica rápida sobre como obter o resultado inteiro (quociente) e o resto (módulo) de uma divisão.
Em muitas linguagens de programação, usamos a barra (/) para obter o quociente da divisão. No Apex da Salesforce também. E para obtermos o resto (ou módulo) usamos a palavra reservada mod ou simplesmente o símbolo de percentual (%). Porém, no Apex é diferente. É necessário usar a biblioteca Math.mod(dividendo, divisor).

Escrevi o código a seguir no console do desenvolvedor e usei o System.debug para exibir o resultado:

 System.debug('Quociente: ' + (10/3));  
 System.debug('Resto: ' + Math.mod(10,3));  
 System.debug('Quociente: ' + (25/5));  
 System.debug('Resto: ' + Math.mod(25,5));  
 System.debug('Quociente: ' + (12/15));  
 System.debug('Resto: ' + Math.mod(12,15));  
 System.debug('Quociente: ' + (1000/400));  
 System.debug('Resto: ' + Math.mod(1000,400));  

Ao executar temos:





domingo, 13 de março de 2016

Alterando logomarca da Organização

Um "problema" que me deparei recentemente foi a alteração de logomarca do Salesforce, no canto superior esquerdo da tela. Essa operação já realizei algumas vezes sem muitos problemas. Normalmente acesso a opção de Documentos (nas guias-menu- ou naquela opção "+"). Lá cadastro uma imagem com a logomarca do cliente que usará a Org. 
Em seguida, acesso as configurações do SFDC: Configurar aplicativo / Criar / Aplicativos. Seleciono o aplicativo que desejo alterar a logomarca e clico em Editar.



Em seguida, seleciono a opção Inserir uma imagem e seleciono a imagem que inseri na opção Documentos:


Ao clicar em Salvar, a imagem já será inserida no lugar da imagem padrão do Salesforce, no canto superior esquerdo da tela.

Bem, aí começa o tal "problema" que relatei inicialmente. Essa solução só funciona para aplicativos customizados. Os aplicativos padrão da Salesforce, não é permitido a alteração da logomarca. Isto é, será impossível alterar a logomarca de aplicativos Vendas, Call Center, Marketing, Comunidades, etc. Para resolver essa situação, temos duas opções:
1ª) Criarmos um novo aplicativo personalizado e colocarmos as guias e permissões do aplicativo padrão (uma espécie de clone do aplicativo padrão);
2º) Deixaremos a logomarca padrão da Salesforce no canto superior esquerdo da página, porém colocaremos a nossa logomarca na barra lateral da página. E é esse processo que demonstraremos a seguir.

Logomarca na barra lateral

Antes de iniciar esse procedimento, insira a imagem desejada da opção de Documentos, do Salesforce. Caso não saiba o procedimento, é o mesmo que demonstramos acima, nesse mesmo post. 

Iniciando, para inserir sua logomarca na barra lateral, acesse as configurações, menu Criar | Personalização | Início | Componentes da Página Inicial. Em seguida, clique em Novo, na opção Componentes personalizados.


Ao clicar em Novo, pode ser exibido uma mensagem informativa. Caso isso aconteça, clique em Avançar. Ao iniciar o Wizard (de 2 etapas), será necessário preencher alguns campos de configuração do componente que estamos criando. Preencha então o nome do componente e marque a opção Imagem. Em seguida, Avançar.


Na página a seguir (etapa 2 do Wizard), será necessário selecionar a imagem que inseriu na opção Documentos. Clique em Inserir uma imagem, selecione a desejada e clique em Salvar.


Com o componente criado, acesse a opção de configuração Criar | Personalização | Início | Layouts da home page e clique em Novo



Na página seguinte, você deverá dar um nome para seu novo Layout de página inicial e clonar uma página existente. Em seguida clique em Salvar.


Será exibido um Wizard para seleção dos componentes dessa nova página inicial. Entre os desejados, selecione o componente que criamos anteriormente e clique em Avançar.


Para finalizar o Wizard, selecione os itens que ficarão na coluna da esquerda e da direita na página inicial. Para dar um destaque, coloque a logomarca na primeira posição na coluna da esquerda. E clique em Salvar e atribuir para atribuir essa página inicial aos perfis desejados. 


Após atribuir os perfis, clique em Salvar. Se atribuiu esse layout de página inicial ao seu perfil, basta clicar em Início para ver como ficou o resultado!


Antes de finalizar, para que essa logomarca fique disponível em todas as páginas laterais e não somente na página inicial do sistema, é necessário acessar as configurações Criar | Personalização | Interface do usuário e marcar a opção Mostrar componentes personalizados da barra lateral em todas as páginas.



quinta-feira, 18 de fevereiro de 2016

Apagando Campanhas no Salesforce

Recentemente estava realizando alguns testes e precisei apagar várias Campanhas que havia criado. Qual a forma mais rápida de apagar, pensei... Abri o Console do desenvolvedor, na janela de execução de código anônimo, escrevi o código a seguir e executei:

 List<Campaign> campanhas = [SELECT id FROM Campaign];  
 delete campanhas;  

Após tentar executar recebi a seguinte mensagem de erro:

DML operation DELETE not allowed on Campaign

Verifiquei se meu usuário possuía permissão no objeto e estava tudo certo. Então fui pesquisar o motivo. Descobri que o motivo era porque meu usuário não estava configurado como "Usuário do marketing". Então acessei o cadastro de usuários do SFDC e cliquei em Editar (o meu usuário). Em seguida marquei a opção "Usuário do marketing:



Pronto, executei novamente o código e consegui apagar as campanhas normalmente.

Finalizando... Com essa opção de  "Usuário do marketing" marcada você poderá:

- Criar uma nova campanha;
- Editar uma campanha existente;
- Apagar uma campanha;
- Atualizar estatísticas da campanha;
- Importar leads em uma campanha;
- Atualizar em massa, os status de membros de uma campanha;
- Alterar configurações avançadas de uma campanha;

- Rodar relatórios de campanhas por múltiplas campanhas.

domingo, 7 de fevereiro de 2016

Datetime no horário local em páginas Visualforce

Um problema comum entre os desenvolvedores de páginas Visualforce, é a exibição de dados Datetime no horário local (local time). O Salesforce armazena os dados de data e hora no padrão GMT. Dessa forma, ao realizar uma consulta SOQL no banco de dados do SFDC, em sua classe Controller, os dados de data e hora virão no padrão GMT. 

Bem, para exibir em sua Visualforce, os dados de data e hora no horário local da sua Org, use o método a seguir:

   public Datetime getLocalDateTime(Datetime z)  
   {    
     Datetime l = z.Date();  
     l = l.addHours(z.hour());  
     l = l.addMinutes(z.minute());  
     l = l.addSeconds(z.second());  
     return l;  
   }  

Com esse método, sua propriedade ou variável que estava sendo exibida no padrão GMT será exibido na hora local. Coloquei um System.Debug no código para verem o resultado:





sexta-feira, 5 de fevereiro de 2016

Inserindo referências de CSS e JS de recursos estáticos em páginas Visualforce

É comum encontrarmos alguma solução na Web, que gostaríamos de utilizar em nossas páginas Visualforce. Muitas dessas soluções incluem arquivos Javascript e CSS. Para usufruir de soluções como essa (que possuem referências JS e CSS) em nosso projeto, dentro do Salesforce, é necessário primeiramente fazer o upload desses arquivos (JS e CSS) para os recursos estáticos do SFDC. Os recursos estáticos se encontram em Configurações | Criar | Desenvolver | Recursos estáticos

Ao acessar o caminho acima, você deve dar um nome para seu recurso que está inserindo no SFDC. Esse recurso pode pode ser um arquivo .css ou um arquivo .zip com vários outros arquivos css e js, por exemplo.

Após inserir esses recursos estáticos, já podemos fazer uso deles, em nossa página Visualforce. Basta colocar os seguintes comandos em sua página Visualforce:

Para JS:

 <apex:includeScript value="{!URLFOR($Resource.NomeDoRecursoEstatico, 'arquivo.js')}"/>  

Para CSS:

 <apex:stylesheet value="{!URLFOR($Resource.NomeDoRecursoEstatico, 'arquivo.css')}" />    

Caso queira colocar a tag Media na sua referência ao CSS, use:


 <apex:stylesheet value="{!URLFOR($Resource.NomeDoRecursoEstatico, 'arquivo.css')}" html-media="print" />    

Se seu JS se encontrar dentro de um recurso estático em formato .zip e possua diretórios dentro desse zip, use:


 <apex:includeScript value="{!URLFOR($Resource.NomeDoRecursoEstatico, 'diretorio1/diretorio2/arquivo.js')}"/>  

Caso o seu CSS esteja em um zip e possua diretórios:

 <apex:stylesheet value="{!URLFOR($Resource.NomeDoRecursoEstatico, 'diretorio1/diretorio2/arquivo.css')}" />  


Por hora, é apenas isso! :)


segunda-feira, 1 de fevereiro de 2016

Relatório com diferença de vendas mês a mês

A Salesforce sempre me surpreende com sua flexibilidade, em diversas áreas. Dessa vez, destaco a facilidade que temos na ferramenta de relatórios, para gerar um relatório de avanço mês a mês (poderia ser ano a ano, trimestre a trimestre) das vendas.

Para iniciar, vamos criar um novo relatório de Oportunidades. Para tal, acesse a guia Relatórios e posteriormente clique em Novo relatório... Selecione o tipo de relatório como Oportunidades.


Após selecionar o tipo de relatório, clique em Criar. Em seguida selecione os campos desejados, entre eles, adicione o campo Valor e Mês de fechamento.


Agora faça o agrupamento pelo mês de fechamento. Para tal, passe o cursor sobre o título da coluna Mês de fechamento, clique na seta que aparecerá no canto direito e por fim, clique em Agrupar por esse campo.


Agora será necessário passar o cursor sobre o campo Valor, clicar na setinha no canto direito e clicar na opção Resumir este campo



Será exibido um pop-up para selecionar o tipo de resumo. Selecione Soma e clique em Aplicar.


Agora vamos fazer a parte mais interessante. Vamos em Adicionar fórmula...


E arraste essa opção para alguma posição do relatório. No meu caso, vou arrastar para ser a última coluna do relatório.


Após adicionar, será exibida uma tela para configuração da fórmula. Dê um nome para essa coluna. Eu vou chamar de Crescimento em relação ao mês anterior. Vou configurar para o formato ser Porcentagem, sem casas decimais (0). Também irei marcar a que a formula será exibida no agrupamento por mês de fechamento.


Agora vamos escrever a formula. Para se calcular o percentual de crescimento, precisamos escrever a seguinte fórmula:


Valor Final = Mês atual
Valor Inicial = Mês anterior

Transformando isso na formula do relatório, precisamos pegar os valores das oportunidades do mês atual e mês anterior. 

AMOUNT:SUM = Campo Amount, que é o valor da oportunidade. Porém, como se trata da somatória dos valores por mês, temos o SUM.

PREVGROUPVAL(AMOUNT:SUM, CLOSE_MONTH) = PREVGROUPVAL é uma função para se pegar o valor anterior em um relatório agrupado. Dessa forma, pegamos o valor anterior das somas de quantidades, do agrupamento por mês de fechamento (CLOSE_MONTH).

Ficando a fórmula assim:

(AMOUNT:SUM-PREVGROUPVAL(AMOUNT:SUM, CLOSE_MONTH))/PREVGROUPVAL(AMOUNT:SUM, CLOSE_MONTH)


Após a fórmula inserida, vamos executar o relatório e ver o resultado de crescimento (ou retração) mês a mês!