Browsing category

Apex

Como otimizar sua Query SOQL

Otimizar SOQL, o que eu ganho com isso? Um dos grandes desafios de qualquer desenvolvedor Salesforce é fazer com que seu código não atinja nenhum limite, mas como nem tudo são flores na vida, acabamos enfrentando esse problema mais cedo ou mais tarde. Há vários motivos que podem fazer a execução do seu código quebrar por atingir esses limites, alguns desses motivos são relacionados a queries SOQL, que podem estar demorando muito para executar ou trazer mais de 200 mil registros em uma única query, mas não se preocupe, estou escrevendo este artigo exatamente para mostrar formas de otimizar sua SOQL e evitar que estes erros ocorram. Como avaliar o custo da query SOQL Primeiro precisamos entender o que está sendo executado na nossa query e para isso utilizamos o query plan no developer console. Para habilitá-lo, basta abrir o Developer Console e ir no menu Help > Preferences e marcar a opção Enable Query Plan Depois, entre na aba Query Editor, coloque sua query e clique no botão Query Plan Temos agora um passo a passo da nossa query e aqui vai uma explicação simples do que é cada um desses campos: Cardinality: Quantos registros estão retornando naquela na […]

Como testar queries de Objetos Externos

Todo desenvolvedor Salesforce sabe da importância das classes de teste, elas além de testarem se o que desenvolvemos está funcionando como esperado, precisamos também garantir que as classes tenham pelo menos 75% de cobertura conforme requerido pela Salesforce para subir um código para produção. O modelo de uma classe de teste costuma seguir uma receita muito simples, criar os dados para teste, chamar o método que queremos testar e verificar o retorno. Porém, para cobrir classes que fazem queries de objetos externos precisamos adaptar esse modelo um pouco, mas antes vamos entender um pouco o que são os objetos externos. O que são Objetos Externos Objetos externos são parecidos com os objetos customizados, porém eles são armazenados fora da sua ORG. Eles podem ser dados armazenados em outros sistemas como ERPs, CRMs ou até mesmo uma outra ORG Salesforce, a chamada integração Salesforce to Salesforce. Através da opção External Data Sources no Setup é possível configurar a fonte dos dados externos e fazer o mapeamento de tabelas para objetos e campos. A nomenclatura dos objetos externos apresenta o sufixo __x, porém os campos seguem o padrão com o final __c. Como usar os Objetos Externos Embora os objetos externos não […]

Removendo classes do APEX de produção

Se você trabalha em uma ORG do Salesforce por algum tempo, você provavelmente já precisou remover classes do APEX de produção, se não preciso parabéns, mas acredito que mais cedo ou mais tarde você vai precisar, então continue a leitura que um dia tenho certeza que essa dica lhe será muito útil :) Mas atenção, o conteúdo aqui apresentado pode afetar o funcionamento da sua ORG do Salesforce, tenha certeza de que tenha backup dos metadados que deseja remover e de fazer os testes prévios em uma Sandbox, siga por sua conta e risco. O problema Não é comum encontrarmos esse cenário, mas sim, eles ocorrem, eu mesmo já me deparei com ele em praticamente todas as ORGs do Salesforce que trabalhei, quando pegamos um projeto que já esta no meio do caminho, muitas vezes precisamos refatorar algumas classes, em algumas vezes abandonar a classe de vez (ou porque o nome não faz sentido para só refatorar ou porque aquela funcionalidade não tem mais sentido) e quando nos deparamos com esse problema descobrimos que metadados não podem ser renomeados, dessa forma a solução é a exclusão e criação de um novo, e ai uma nova descoberta, não podemos excluir uma […]

Estendendo componentes do Lightning

Se você já atuou em um grande projeto de Lightning, deve estar cansado de repetir o mesmo trecho de código toda vez que precisa interagir com uma Controller, não é mesmo? Então hoje quero te mostrar duas coisas legais, a primeira é o que o título do post diz, estender um componente do Lightning, e o que isso significa, isso significa que você pode aproveitar parte de um componente dentro de outro, mas fique tranquilo, isso fará sentido assim que começarmos a colocar a mão na massa, e segundo vamos fazer isso criando um componente que permitirá você fazer chamadas Apex com apenas 1 linha de código. Entendendo o problema Como eu disse antes, se você já trabalhou com grandes projetos em Lightning, muito provavelmente já precisou fazer uma chamada Apex para consumir dados do Salesforce, e se fez isso mais de uma vez, então você deve ter escrito o código abaixo algumas vezes, não é? var action = component.get(“c.getAccounts”); action.setParams(params); action.setCallback(this, function(response) { var state = response.getState(); if (state === “SUCCESS”) { var result = response.getReturnValue(); //do something with the result } else if (state === “INCOMPLETE”) { // wait, what? } else if (state === “ERROR”) { var […]

Replay debugger no VSCode – O sonho de todo DEV Salesforce

Tenho certeza que o sonho de todo DEV Salesforce era poder debugar seu código, e isso se tornou possível com o Replay debugger do Salesforce CLI no VSCode, então bora lá entender como funciona essa mágica, e tornar esse sonho realidade? Se você já matou o seu Eclipse, e migrou para o Visual Studio Code, o VSCode, hoje vou te mostrar como debugar o seu código usando o Replay debugger, mas antes vamos entender como essa mágica funciona. Como funciona o Replay debugger O Replay debugger, como o próximo nome diz é um Replay, ou seja você vai debugar o seu código com o que já aconteceu, diferentemente do que é permitido em outras linguagens de programação como JavaScript, C# entre outras, em que você consegue debugar o seu código no momento de sua execução, e isso se dá por conta de estarmos falando de uma tecnologia em nuvem, afinal o código não esta rodando no seu computador, e sim nos servidores da Salesforce, e o Replay vem dá onde então, você deve esta se perguntando, bom, o que o Salesforce fez foi, baseado no log de depuração do usuário, remontar o cenário do seu código permitindo que todas as […]

Desenvolvedor Salesforce, mate o Eclipse agora

Se você é um Desenvolvedor Salesforce, e ainda usa o Eclipse, mate-o agora, antes que ele faça isso por você. Pode parecer brincadeira, mas ainda existem muitos desenvolvedores que ainda usam o Eclipse, a alguns anos atrás ele era a IDE recomendada pela Salesforce, mas já a um bom tempo ele perdeu esse posto para o Visual Studio Code da Microsoft, eu já falei aqui em um post anterior do IntelliJ com o uso do plugin Jetforce, o problema é que na época o plugin era free, e de lá para cá, passou a ser pago, não é uma grande quantia, 59$ para desenvolvedores e 99$ para empresa, eu considero um valor relativamente baixo para quem desenvolve para Salesforce todos os dias, mas quando se fala em colocar a mão no bolso, sei que a coisa aperta um pouco, então resolvi dar mais uma chance ao Visual Studio Code e ver o quanto ele me surpreendia em relação a minha IDE atual (IntelliJ com plugin Jetforce), eu já faço uso do Visual Studio Code para desenvolvimento Mobile (Cordova), então isso já contou como ponto positivo por já conhecer o potencial dessa IDE poderosa, mas chega de enrolação e vamos ver […]

Melhore o desempenho usando o Platform Cache

Sempre que construímos grandes sistemas, o desempenho é um dos maiores vilões. As performances geralmente podem corresponder ao balanceamento de carga dos servidores, o tempo de resposta das páginas que construímos, e assim por diante! Quando trabalhamos na plataforma force.com, a maior parte desse trabalho pesado é cuidada pela própria plataforma, para o nosso alivio. No entanto, há certas coisas que podemos ajustar para melhorar ainda mais o desempenho, e um desses conceitos é o uso do Platform Cache. O que é um cache? tenha sempre em mente que Cache é um armazenamento temporário Primeira mente, tenha sempre em mente que Cache é um armazenamento temporário, e de uma forma geral é frequentemente usado para evitar acesso desnecessários em um banco de dados, vamos uma imaginar um cenário de uso, onde você armazena no seu banco de dados a Endpoint e Token para acessar um aplicação externa, se você imaginar uma página com muitos acessos e que a cada acesso é realizado uma chamada para uma aplicação externa, a cada acesso precisaríamos consultar os dados de acesso no banco de dados, o que consumiria muito recurso e tempo da plataforma, agora imagine ter essa informação sempre em memória e disponível para uso imediatamente sem depender de […]

Entendendo o uso do SOQL Locking Records

No post de hoje vamos falar sobre o SOQL Locking Records, imagine o cenário onde você precisa fazer o processamento em vários registros, e nesse pequeno intervalo de tempo, ninguém poderá modificar esse registro, para conseguirmos esse feito, precisamos usar o Locking Records, então vamos lá entender como isso funciona?   O que é Locking Records O Locking Records é uma forma de bloquear os registros do Salesforce em uma transação Apex, basicamente o Locking Records consiste na inclusão de duas palavras chaves em sua SOQL, dessa forma todos os registros resultantes da sua SOQL serão bloqueados e não poderão ser alterados até que a transação do Apex seja concluída. ao utilizar o FOR UPDATE você não poderá especificar um ORDER BY Dois pontos importantes aqui são, o primeiro é que não é necessário realizar o commit dos dados, se ocorrer um erro na transação Apex, todas as alterações serão desfeitas, e caso a transação termine sem erros, os registros serão comitados automaticamente. Outro ponto de atenção é que ao utilizar o FOR UPDATE você não poderá especificar um ORDER BY, talvez esse seja o ponto chave que dificulte a sua utilização, porém como a idea do Locking Records é garantir […]

Apex assíncrono – Scheduled Apex – Parte 4

Chegamos ao nosso último post da série sobre Apex assíncrono, falei aqui sobre métodos futuros, classes Queueable e Batch Apex, e hoje para fechar o tema, vamos falar sobre as classes Scheduled Apex, bom mas chega de enrolação e vamos logo para o que interessa não é mesmo? O que é o Scheduled Apex? podemos programar para que ele seja executado TODOS os dias em um determinado horário As Scheduled Apex nos permite realizar o agendamento de uma execução do Apex em horário específicos, diferentemente que fizemos com o agendamento das classes Batch Apex, onde só podíamos adiar a sua execução, com o Scheduled Apex ganhamos um poder de escolha muito maior, podemos programar para que ele seja executado TODOS os dias em um determinado horário. Mas claro que podemos fazer ainda mais do que isso, podemos agendar uma execução para 2x por dia, ou até mesmo 1x por semana, você é quem escolhe quando o processo será executado. Quando usar uma Scheduled Apex O cenário mais comum é exatamente quando temos que executar um conjunto de código do Apex em um horário e dia especificos. Estrutura de uma Scheduled Apex As Scheduled Apex também são classes que precisam implementar […]

Apex assíncrono – Batch Apex – Parte 3

Dando continuidade a série de posts sobre Apex assíncrono, hoje vamos falar da Batch Apex, sem dúvida um dos mais complicados posts da série, e espero conseguir desmistificar e passar para você um overview bem bacana sobre ele, vamos lá? A mas se você ainda não leu o post sobre métodos futuros e sobre Queueable sugiro que de uma pausa na sua leitura, e leia esses posts antes :) O que é uma Batch Apex O Batch Apex é uma classe do Apex que implementa uma interface e dá ao desenvolvedor um poder de processamento enorme, permitindo que você enfileire inúmeros trabalhos do apex ao mesmo tempo, você pode ainda mover a ordem dos processos, obter o status do processamento, abordar o seu processamento e também realizar o agendamento, para que o seu processo seja executado em uma hora determinada por você. Quando usar uma Batch Apex Para tarefas de execução longa com grandes volumes de dados que precisam ser executados em lotes, como manutenção do banco de dados Para tarefas que precisam de resultados de consulta maiores do que as transações regulares permitem Estrutura de uma Batch Apex Uma classe Batch Apex, deve implementar a interface Database.Batchable<X> onde X é […]

Apex assíncrono – Queueable – Parte 2

Dando continuidade a série de posts sobre Apex Assíncrono, hoje falaremos sobre as classes Queueable, podemos dizer que as Queueable são uma evolução dos métodos futuros, pois nos permite ter controle da fila de execução. Se você não leu o post sobre métodos futuros, sugiro que de uma pausa nessa leitura, e de uma olhada nesse post. O que são classes Queueable? Podemos dizer que as classes Queueable são uma evolução dos métodos futuros, pois além de nos permitir realizar a execução de trabalhos do Apex assíncronos, também nos da um limite maior de governança da sua org, permitindo por exemplo a execução de mais SOQL dentro de uma mesma execução de processo do Apex, além de um limite de heap maior, e assim como os métodos futuros, as classes Queueable são executadas assim que a plataforma Salesforce considera que existem recursos livres para execução. Quando você adiciona uma classe Queueable a fila de execução, você recebe um ID único, isso nos permite obter um controle maior da fila de processos, permitindo obter o status do processo na fila, esses dados ficam no objeto AsyncApexJob, e com base no Id que recebemos podemos fazer uma consulta SOQL para obter mais […]

Apex assíncrono – Future Methods – Parte 1

Apex assíncronos, são eles: Future Methods, Queueable, Batch e Scheduled, este post será uma série dividida em 4 posts, e vamos começar falando dos Future Methods (Métodos futuros), quando usar, exemplos práticos, e cobertura de classe de testes. O que é um Future Methods? O Apex oferece várias maneiras de executar seu código Apex de forma assíncrona, uma delas são os Future Methods, e por ele ser assíncrono, você simplesmente não pode controlar quando o mesmo será executado, ele é controlado pela plataforma Salesforce, é a plataforma que escolhe o melhor momento para a execução de um trecho de código do Apex em um Future Method e essa execução são levadas em consideração a disponibilidades de recurso disponíveis na sua org no momento de solicitação de execução. Um dos grandes benefício de usar Future Methods é que alguns limites de governança são maiores, como por exemplo o limites de consulta SOQL e limites de tamanho de heap. Quando usar um Future Methods? Quando você tem um processo demorado e precisa prevenir atrasos em sua transação Apex Quando você realiza chamada a serviços da Web externos (Por exemplo uma consulta a base de CEP de um serviço REST) Para segregar operações DML […]

Entendendo as 10 APIs do Salesforce e quando usar

O Salesforce nos permite interagir com a plataforma de muitas formas, entre elas com o uso de APIs, nesse post quero fazer um overview das APIs do Salesforce disponíveis e quando usar cada uma delas, o intuito não é colocar uma contra a outra, e dizer qual é melhor, mas sim explicar o uso delas e assim de dar opções de escolhas de uma forma mais consciente.   APIs do Salesforce A maior parte do conteúdo deste artigo vieram da documentação oficial do Salesforce, mas a intenção aqui é dar uma visão geral de cada API em um único local e também dar uma idéia do que usar quando. Por favor, leia a documentação oficial para ter uma idéia mais profunda sobre cada uma das API. As APIs do Salesforce é tão vasto quanto o azul do oceano, diz o Salesforce, isso porque o Salesforce adota uma abordagem de API First para criar recursos na Salesforce Platform.   1. SOAP API A SOAP API permite criar, ler, atualizar e excluir registros, o famoso CRUD (Create, Read, Update e Delete), com ela é possível interagir com Contas, Leads e também com seus objetos personalizados. A SOAP API também permite o gerenciamento de […]

Erro ao ativar o Log de Depuração

Essa semana vi uma nova mensagem de Erro ao ativar o Log de Depuração no Salesforce, esse erro impedia de ativar o registro de depuração e também de receber novos logs no Console do Desenvolvedor, e para a minha surpresa a solução era muito simples, mas resolvi compartilhar algumas formas de resolver ela, pois acredito que possa ajudar algumas pessoas que por ventura venha a se deparar com essa mensagem no futuro. Erro ao ativar o Log de Depuração A mensagem de erro no console diz: Logging disabled: The Developer Console didn’t set the DEVELOPER_LOG trace flag on your user. Ter um sinalizador de rastreamento ativo aciona o log de depuração. Você tem 1.065 MB do máximo de 250 MB de logs de depuração. Antes de poder editar os sinalizadores de rastreamento, exclua alguns logs de depuração. Já quando tentamos registrar um Registro de Depuração a mensagem é: Erro: Ter um sinalizador de rastreamento ativo aciona o log de depuração. Você tem 1.087 MB do máximo de 250 MB de logs de depuração. Antes de poder editar os sinalizadores de rastreamento, exclua alguns logs de depuração. E em Inglês você receberá uma mensagem assim: Having an active trace flag triggers […]

Visualforce vs Lightning: qual escolher ?

Primeiramente precisamos saber o que é uma visual force e um Lightning e assim podemos seguir para a batalha Visualforce vs Lightning. O Visualforce é um framework que permite que os desenvolvedores criem interfaces de usuário personalizadas, ou seja, páginas/aplicativos personalizados dentro do Salesforce. O Lightning é um framework para desenvolvimento dinâmico de aplicativos web para mobile e desktop, também dentro do Salesforce. Os dois oferecem uma maneira de construir aplicativos ou páginas personalizados, então qual devemos usar? Visualforce O Visualforce usa linguagem de marcação, assim como HTML(Hyper Text Markup Language) para o desenvolvimento das páginas, e podemos utilizar uma Controller com código apex para as operações com os registros (banco de dados) e outras operações que desejarmos fazer do lado do Servidor. Podemos ainda utilizar JavaScript e CSS para melhorar tanto a performance quanto a estética da página. Todas essas ferramentas são opcionais. O framework Visualforce usa o tradicional modelo MVC (Model-View-Controller). Não se esqueça de conferir as 9 técnicas para atingir alta performance em páginas visualforce e a trilha Desenvolvedor iniciante. Visualforce é um modelo fácil de ser implementado caso o desenvolvedor já conheça a parte de desenvolvimento web, mesmo que ele não conheça muito sobre visualforce, porém o framework apresenta algumas limitações quando […]