Suivez votre progression
Accueil Trailhead
Accueil Trailhead

Surveillance des tâches Apex asynchrones

Objectifs de formation

Dans cette unité, vous allez découvrir :
  • Comment surveiller les différents types de tâche
  • Comment utiliser la file d’attente Flex

Surveillance des tâches asynchrones

L’avantage des tâches asynchrones est leur exécution silencieuse en arrière-plan. L’inconvénient des tâches asynchrones est leur exécution silencieuse en arrière-plan. Heureusement, nous disposons de plusieurs méthodes pour surveiller ces tâches silencieuses.

Vous pouvez surveiller le statut de toutes les tâches dans l'interface utilisateur de Salesforce. Dans Configuration, saisissez Tâches dans la case Recherche rapide, puis sélectionnez Tâches Apex.

La page Tâches Apex affiche toutes les tâches Apex asynchrones avec des informations sur l'exécution de chaque tâche. La capture d'écran précédente affiche une tache de méthode future et deux tâches par lot terminées pour la même classe Apex par lot.

Tâches Apex

Si vous avez plusieurs tâches par lot, utilisez la page Tâches par lot pour afficher uniquement les tâches par lot. Pour ouvrir la page Tâches par lot Apex, cliquez sur le lien en haut de la page Tâches Apex. Utilisez le curseur de la page Tâches par lot Apex pour sélectionner une plage de date spécifique et affiner la liste des tâches par lot affichée. Les tâches passées qui n'ont pas encore été supprimées sont affichées. La page Tâches par lot regroupe les tâches par la classe par lot.

Tâches par lot Apex

Pour consulter les détails des tâches exécutées pour cette classe, cliquez sur l'icône Plus d'informations en regard d'un ID de classe. Cette image montre la fenêtre contextuelle affichée lorsque vous cliquez sur Plus d'informations. Cette classe par lot contient deux tâches exécutées avec succès.

Informations sur les tâches parentes

Vous pouvez également suivre le statut des tâches Apex dans la file d’attente Flex Apex, et les réorganiser pour contrôler les tâches exécutées en premier. Dans Configuration, saisissez Tâches dans la case Recherche rapide, puis sélectionnez File d'attente Flex Apex.

Surveillance des tâches futures

Les tâches futures sont affichées dans la page Tâches Apex comme n’importe quelle autre tâche. Toutefois, les tâches futures ne font pas actuellement partie de la file d’attente Flex.

Vous pouvez interroger AsyncApexJob pour retrouver une tâche future, mais cela présente un inconvénient. Le déclenchement d’une tâche future ne renvoie pas d’ID. Par conséquent, vous devez filtrer sur un autre champ, tel que MethodName ou JobType, pour retrouver votre tâche. Cette publication Stack Exchange contient quelques exemples de requêtes SOQL qui peuvent vous aider.

Surveillance des tâches en file d’attente avec SOQL

Pour demander des informations sur la tâche que vous avez soumise, exécutez une requête SOQL dans AsyncApexJob en filtrant par l’ID de la tâche que la méthode System.enqueueJob renvoie.

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

Surveillance des tâches en file d’attente avec la file d’attente Flex

La file d’attente Flex Apex permet de soumettre à exécution jusqu’à 100 tâches par lot. Toutes les tâches soumises pour exécution ont un statut en attente et sont placées dans la file d’attente Flex Apex. Vous pouvez avoir jusqu’à 100 tâches par lots avec un statut en attente.

Les tâches sont traitées dans l’ordre dans lequel elles sont soumises. Vous pouvez examiner l’ordre de la file d’attente et la réorganiser afin de placer une tâche importante en haut de liste ou les tâches moins importantes en bas.

Lorsque les ressources sont disponibles, le système sélectionne la tâche en haut de la file d’attente Flex Apex et la place dans la file d’attente des tâches par lot. Le système peut traiter simultanément jusqu’à cinq tâches en file d’attente ou actives pour chaque organisation. Le statut de ces tâches déplacées change de En attente à En file d’attente. Les tâches en file d’attente sont exécutées lorsque le système est prêt à traiter de nouvelles tâches. Comme toutes les autres tâches, vous pouvez surveiller les tâches en file d’attente dans la page Tâches Apex.

Surveillance des tâches planifiées

Lorsqu’une tâche Apex a été planifiée, vous pouvez obtenir plus d’informations en exécutant une requête SOQL dans CronTrigger. L’exemple ci-dessous demande le nombre d’exécutions d’une tâche, ainsi que la date et l’heure de la prochaine exécution planifiée. Il utilise une variable jobID qui est renvoyée par la méthode System.schedule.

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

Si vous exécutez cette requête dans la méthode execute de votre classe planifiable, vous pouvez obtenir l’ID de la tâche actuelle en appelant getTriggerId dans la variable d’argument 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()];
    }
    
}

Vous pouvez également obtenir le nom de la tâche et le type de tâche à partir de l’enregistrement CronJobDetail associé à l’enregistrement CronTrigger. Pour cela, utilisez la relation CronJobDetail en exécutant une requête dans CronTrigger. L’exemple ci-dessous récupère l’enregistrement CronTrigger le plus récent avec le nom et le type de la tâche à partir de CronJobDetail.

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

Alternativement, vous pouvez interroger directement CronJobDetail pour obtenir le nom et le type de la tâche. L’exemple ci-dessous récupère le nom et le type de la tâche pour l’enregistrement CronTrigger interrogé dans l’exemple précédent. L’ID d’enregistrement CronJobDetail correspondant est obtenu par l’expression CronJobDetail.Id dans l’enregistrement CronTrigger.

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

Enfin, pour obtenir le nombre total de toutes les tâches Apex planifiées, en excluant tous les autres types de tâche planifiée, exécutez la requête ci-dessous. Notez la valeur « 7 » spécifiée pour le type de tâche, qui correspond au type de tâche Apex planifiée. Pour consulter la liste de tous les types, suivez le lien CronJobDetail de la section Ressources.

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

Ressources