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!