Monitorar o Apex assíncrono

Objetivos de aprendizagem

Após concluir esta unidade, você saberá:
  • Como monitorar os diferentes tipos de trabalhos.
  • Como usar a Fila Flex.

Como monitorar trabalhos assíncronos

O melhor com relação aos trabalhos assíncronos é que eles trabalham silenciosamente em segundo plano. O pior com relação aos trabalhos assíncronos é que eles trabalham silenciosamente em segundo plano. Felizmente, há algumas maneiras de monitorar o que está acontecendo com esses trabalhos em segundo plano.

Você pode monitorar o status de todos os trabalhos na interface de usuário do Salesforce. Em Configuração, insira Trabalhos na caixa Busca rápida e selecione Trabalhos do Apex.

A página Trabalhos do Apex exibe todos os trabalhos assíncronos do Apex com informações sobre a execução de cada trabalho. A captura de tela a seguir mostra um trabalho de método futuro e duas tarefas de lote concluídas para a mesma classe do Apex de lote.

Trabalhos do Apex

Se você tem muitos trabalhos de lote, use a página Trabalhos de lote para ver apenas trabalhos desse tipo. Para abrir a página Trabalhos do Apex de lote, clique no link no topo da página Trabalhos do Apex. Use o controle deslizante na página Trabalhos do Apex de lote para selecionar um intervalo de datas específico e reduzir a lista de trabalhos de lote exibida. É possível exibir trabalhos anteriores que ainda não foram excluídos. A página Trabalhos de lote agrupa trabalhos por classe de lotes.

Trabalhos do Apex de lote

Clique em Mais informações ao lado da ID de uma classe de seu interesse para descobrir detalhes sobre os trabalhos executados para essa classe. Essa imagem mostra o popup exibido depois de clicar em Mais informações. Essa classe de lote tem dois trabalhos executados com sucesso.

informações sobre trabalhos pai

Você pode monitorar o status dos trabalhos do Apex na Fila Apex Flex e reordená-los para controlar quais trabalhos serão processados primeiro. Em Configuração, insira Trabalhos na caixa Busca rápida e selecione Fila Apex Flex.

Como monitorar trabalhos futuros

Os trabalhos futuros aparecem na página Trabalhos do Apex como qualquer outro trabalho. Porém, os trabalhos futuros não fazem parte da Fila Flex neste momento.

Você pode consultar AsyncApexJob para encontrar seu trabalho futuro, mas há uma condição. Como iniciar um trabalho futuro não retorna um ID, será necessário filtrar em algum outro campo, como MethodName ou JobType, para encontrar seu trabalho. Há alguns exemplos de consultas SOQL neste post sobre Stack Exchange que podem ajudar.

Como monitorar trabalhos em fila com SOQL

Para consultar informações sobre seu trabalho enviado, realize uma consulta SOQL no AsyncApexJob com filtragem pela ID do trabalho que o método System.enqueueJob retorna.

AsyncApexJob jobInfo = [SELECT Status, NumberOfErrors
    FROM AsyncApexJob WHERE Id = :jobID];

Como monitorar trabalhos em fila com a Fila Flex

A Fila Apex Flex permite enviar até 100 trabalhos em lote para execução. Qualquer trabalho que seja enviado para execução está no status de retenção e é colocado na Fila Apex Flex. Até 100 trabalhos de lote podem ser colocados no status de retenção.

Os trabalhos são processados no esquema primeiro que entra, primeiro que sai, na sequência em que foram enviados. Você pode observar a sequência atual da fila e alterá-la, movendo o trabalho mais importante para a frente, ou os menos importantes para trás.

Quando os recursos do sistema se tornam disponíveis, o sistema pega o próximo trabalho no topo da Fila Apex Flex e o move para a fila de trabalho em lote. O sistema pode processar até cinco trabalhos em fila ou ativos simultaneamente para cada organização. O status destes trabalhos movidos muda de Retenção para Em fila. Os trabalhos em fila são executados quando o sistema está pronto para processar novos trabalhos. Assim como os outros trabalhos, é possível monitorar os trabalhos em fila na página de Trabalhos do Apex.

Como monitorar trabalhos agendados

Após um trabalho do Apex ter sido agendado, você pode obter mais informações sobre ele executando uma consulta SOQL no CronTrigger. O exemplo abaixo consulta o número de vezes que o trabalho foi executado e a data e hora para a qual está agendada sua próxima execução. Ele usa uma variável jobID que é retornada pelo método System.schedule.

CronTrigger ct = [SELECT TimesTriggered, NextFireTime FROM CronTrigger WHERE Id = :jobID];

Se você estiver executando a consulta dentro do método de execução de sua classe agendável, poderá obter o ID do trabalho atual chamando getTriggerId na variável do argumento SchedulableContext.

global class DoAwesomeStuff implements Schedulable {
    global void execute(SchedulableContext sc) {
        // some awesome code
        CronTrigger ct = [SELECT TimesTriggered, NextFireTime FROM CronTrigger WHERE Id = :sc.getTriggerId()];
    }
}

Também é possível obter o nome e o tipo do trabalho no registro CronJobDetail associado ao registro CronTrigger. Para isso, use o relacionamento CronJobDetail ao realizar uma consulta no CronTrigger. Este exemplo recupera o registro CronTrigger mais recente com o nome e o tipo do trabalho em CronJobDetail.

CronTrigger job = [SELECT Id, CronJobDetail.Id, CronJobDetail.Name, CronJobDetail.JobType FROM CronTrigger ORDER BY CreatedDate DESC LIMIT 1];

Se preferir, você pode consultar o CronJobDetail diretamente para obter o nome e o tipo do trabalho. O próximo exemplo obtém o nome e o tipo do trabalho para o registro CronTrigger consultado no exemplo anterior. O ID do registro CronJobDetail correspondente é obtido pela expressão CronJobDetail.Id no registro CronTrigger.

CronJobDetail ctd = [SELECT Id, Name, JobType FROM CronJobDetail WHERE Id = :job.CronJobDetail.Id];

Por fim, para obter a contagem total de todos os trabalhos do Apex agendados, excluindo todos os outros tipos de trabalhos agendados, realize a consulta abaixo. Observe que o valor “7” é especificado para o tipo de trabalho, o que corresponde ao tipo de trabalho do Apex agendado. Consulte CronJobDetail na seção Recursos para obter uma lista de todos os tipos.

SELECT COUNT() FROM CronTrigger WHERE CronJobDetail.JobType = '7’

Recursos

Continue a aprender de graça!
Inscreva-se em uma conta para continuar.
O que você ganha com isso?
  • Receba recomendações personalizadas para suas metas de carreira
  • Pratique suas habilidades com desafios práticos e testes
  • Monitore e compartilhe seu progresso com os empregadores
  • Conecte-se a orientação e oportunidades de carreira