Método futuro vs. Apex enfileirado no Salesforce
Publicados: 2023-11-20No mundo acelerado do desenvolvimento do Salesforce, é crucial compreender as melhores ferramentas e métodos para uma codificação eficiente e eficaz. Este artigo se aprofunda em dois conceitos principais: Método Futuro e Apex Queueable. Ambas são técnicas poderosas usadas no Salesforce para lidar com operações assíncronas, mas possuem recursos e casos de uso distintos.
Exploraremos as nuances do Future Method e do Queueable Apex, comparando suas funcionalidades, vantagens e quando usar cada um em seus projetos do Salesforce. Quer você seja um desenvolvedor experiente ou novo no Salesforce, esta comparação fornecerá insights valiosos, ajudando você a tomar decisões informadas para otimizar seu código.
Fique ligado enquanto desvendamos as complexidades e revelamos o potencial do Método Futuro e do Apex Queueable no Salesforce!
Índice
Por que Método Futuro?
Se você deseja executar processos em um thread separado, posteriormente e deseja executar o código de forma assíncrona, precisamos usar métodos futuros.
Quando é usado?
Eles são usados para operações de longa duração, como chamadas para serviços Web externos ou qualquer operação que você gostaria de executar em seu próprio thread.
Por que o Apex enfileirado?
Like the future também é usado para executar o código assíncrono e permite adicionar jobs em uma fila e aprimorar a forma de execução do código assíncrono em comparação ao método futuro.
Quando é usado?
Para processos do Apex executados por um longo período, como operações extensas de banco de dados ou chamadas de serviços da Web externos, você pode executá-los de forma assíncrona implementando a interface Queueable
Leia também: Como implementar o SSO do Salesforce usando OAuth?
Diferenças entre Apex futuro e enfileirado:
Método Futuro | Apex enfileirado |
---|---|
1. Future nunca será usado para trabalhar em SObjects ou tipos de objetos. 2. Ao utilizar o método futuro não podemos monitorar os trabalhos que estão em andamento. 3. O método future não pode ser chamado dentro da classe future ou batch. 4. O método futuro nunca será enfileirado. | 1. Os trabalhos que podem ser enfileirados podem conter a variável de membro como SObjects ou tipos Apex personalizados. 2. Ao usar trabalhos enfileirados, será criado o AsyncApexJob que podemos monitorar como trabalhos agendados. 3. O Apex enfileirado pode ser chamado a partir da classe futura e em lote. 4. O uso do Queueable Apex irá encadear trabalhos que podem ser enfileirados e na Developer Edition são apenas 5 trabalhos. |
Apex enfileirado
A classe Queueable é uma classe criada através da implementação da interface predefinida “Queueable”. Esta interface permite executar seus trabalhos assíncronos ou código de trabalho em comparação com o método futuro. Isso permitirá que você monitore os trabalhos que estão na fila (esta fila é criada pela interface Queueable para que os trabalhos possam ser executados de forma assíncrona).
Sintaxe:
classe pública <Nome da classe que pode ser enfileirada> implementa Queueable { //Este é o único método contido na interface Queueable e necessário para herdar este método na classe Queueable. public void execute (contexto QueueableContext) { //Código que precisa ser executado } }
Qualquer processo do Apex que leva muito tempo para ser executado, como operações extensas de banco de dados ou chamadas de serviços da Web externos, você pode executá-los de forma assíncrona implementando a interface Queueable e adicionando um trabalho à fila de trabalhos do Apex.
Seu trabalho assíncrono do Apex é executado em segundo plano em seu próprio thread e não atrasa a execução da lógica principal do Apex. Cada trabalho na fila é executado quando os recursos do sistema ficam disponíveis. Um benefício de usar os métodos de interface é que alguns limites do governador são maiores do que para o Apex síncrono, como limites de tamanho de heap.
Método Apex Futuro
O apex futuro é usado para executar processos em um thread separado, mais tarde, quando os recursos do sistema estiverem disponíveis. Para usar o apex futuro, não precisamos criar nenhuma classe, apenas precisamos usar a anotação “@future” para identificar métodos que são executados de forma assíncrona e para denotar que o método descrito abaixo desta anotação é um método futuro.
Ao usar o processamento síncrono, todas as chamadas de método são feitas no mesmo thread que está executando o código Apex e nenhum processamento adicional pode ocorrer até que o processo seja concluído. Você pode usar métodos futuros para qualquer operação que queira executar de forma assíncrona em seu próprio thread. Isso oferece os benefícios de não impedir o usuário de realizar outras operações e fornece limites mais altos de governador e de execução para o processo.
Sintaxe:
classe global <nomedaclasse> { //Abaixo está a anotação futura que define que o método fornecido é o método futuro. @futuro public static void <FutureMethodName>(List<Id> recordIds) { List<Contato> contas = [Selecione Id, Nome, Sobrenome do Contato Onde Id IN:recordIds]; // processa registros de contatos para fazer coisas incríveis } }
Leia também: Como conectar a integração do Pipedrive e do Salesforce?
Métodos futuros são normalmente usados para
Chamadas para serviços Web externos. Se você estiver fazendo chamadas a partir de um gatilho ou após executar uma operação DML, deverá usar um método futuro ou enfileirado. Uma chamada em um gatilho manteria a conexão com o banco de dados aberta durante a vida útil da chamada.
Operações que você deseja executar em seu próprio thread quando o tempo permitir, como algum tipo de cálculo que consome muitos recursos ou processamento de registros
Nota: O motivo dos objetos não pode ser passado como argumento para o método futuro porque o objeto pode mudar entre o momento em que você chama o método e o momento em que ele realmente é executado. Os métodos futuros serão executados quando os recursos do sistema estiverem disponíveis. Quando um método futuro é executado, ele pode ter um valor de objeto antigo, o que pode causar todo tipo de coisas ruins.
Coisas para lembrar
- O método futuro deve ser estático
- O tipo de retorno deve ser nulo
- Os parâmetros especificados devem ser tipos de dados primitivos, matrizes de tipos de dados primitivos ou coleções de tipos de dados primitivos
- Você pode chamar métodos futuros da mesma forma que chama qualquer outro método. No entanto, um método futuro não pode chamar outro método futuro
- Não mais que 50 chamadas de método por invocação do Apex
- Chamadas assíncronas, como @future ou executeBatch, chamadas em um bloco startTest, stopTest, não contam em seus limites para o número de tarefas enfileiradas
Exemplo para método futuro e classe que pode ser enfileirada
Aqui estou obtendo o valor de 4 moedas em dólar canadense. Para GBP, USD, AUD, CAD. E salvando o valor na moeda de metadados personalizada. Para HTTPREQUEST aqui usei o método Future. E como ele está atualizando vários registros ao mesmo tempo enquanto executa o lote, usei o Queueable Apex, que atualiza vários registros por vez.
Atualização personalizada de metadados personalizados
Classe enfileirada
Chamando o método Future e enviando a lista para atualização na classe Queueable
A Emizentech é uma empresa de consultoria de força de vendas autêntica e experiente e nossos experientes desenvolvedores de força de vendas podem fornecer assistência profissional para seu próximo projeto de força de vendas.