Entendendo a utilização de variáveis estáticas na plataforma Salesforce

Por dti digital|
Atualizado: Jul 2023 |
Publicado: Ago 2015

Em publicações anteriores, demonstramos algumas vantagens e discutimos formas de contornar determinadas limitações da plataforma Salesforce. O assunto de hoje explora uma característica técnica específica da programação na linguagem da plataforma, com o objetivo de orientar desenvolvedores desta poderosa ferramenta na nuvem para evitar comportamentos inesperados envolvendo a utilização de variáveis estáticas.

O conceito de variáveis estáticas dentro da linguagem Apex, do Salesforce, é bem similar ao de conhecidas linguagens de programação, como Java e C#. Em Apex não é possível utilizar classes estáticas, mas é possível haver métodos, variáveis e trechos de inicialização de código estáticos. Ao contrário dos métodos e variáveis de objetos, que estão associados a instâncias específicas de uma classe, os métodos e variáveis estáticos estão associados à classe inteira, de forma que todas as instâncias compartilham o mesmo valor de uma variável estática desta classe.

Uma importante diferença para os desenvolvedores acostumados com Java, C# ou outras linguagens tradicionais é que, em Apex, uma variável é estática somente dentro do escopo de uma transação. Isso faz sentido considerando que os recursos de servidor do Salesforce estão na nuvem e são compartilhados entre milhares de usuários. Caso as variáveis não fossem desalocadas ao final de cada transação, a má utilização das variáveis estáticas por diferentes desenvolvedores poderiam gerar problemas de memória na plataforma. Assim, uma variável marcada com o modificador “static” não é realmente “estática” através do servidor ou da organização inteira, pois ela é reiniciada nos limites da transação.

Um exemplo: se uma ação do usuário causar operações DML (exemplo: inserção ou atualização de registros) na mesma transação, um mesmo trigger pode ser disparado várias vezes. Neste caso, o uso de uma variável estática poderia evitar que uma mesma operação fosse feita mais de uma vez na mesma transação cada vez que o trigger fosse disparado, pois o valor da variável estática iria persistir durante toda a transação. Diferentes triggers também podem comunicar entre si lendo e atualizando o valor de variáveis estáticas.

O exemplo acima pode ser ilustrado pelo trecho de código abaixo:

public class MinhaClasse {
   //Variável estática:
   public static boolean primeiraVez = true;
   //Método não-estático (de objeto):
   public void fazerAlgo(){
       //…
   }
}

 

Trigger:

trigger T on Account (after insert, after update) {

if (MinhaClasse.primeiraVez) {

MinhaClasse m = new MinhaClasse();

m.fazerAlgo();

MinhaClasse.primeiraVez = false;

}

}

Se você tem alguma dúvida sobre implantação ou customização do Salesforce, entre em contato com a gente!

Referências:

Apex Workbook: https://resources.docs.salesforce.com/sfdc/pdf/apex_workbook.pdf
Force.com Apex Code Developer’s Guide: https://resources.docs.salesforce.com/196/latest/en-us/sfdc/pdf/salesforce_apex_language_reference.pdf

 

Por: Daniel Duarte e Jéssica Saliba

Quer saber mais?