Método futuro vs. Apex enfileirado no Salesforce

Publicados: 2023-11-20

No 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
contratar desenvolvedores de força de vendas

Exemplo para método futuro e classe que pode ser enfileirada

Método futuro e classe 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

Atualização personalizada de metadados personalizados

Classe enfileirada

Classe enfileirada

Chamando o método Future e enviando a lista para atualização na classe Queueable

Chamando o método Future

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.

Leia também: Como criar um componente de mapa do Salesforce Lightning?