Surveillance des tâches Apex asynchrones
Objectifs de formation
Vidéo de démonstration Trail Together
Vous souhaitez être guidé pas à pas pendant que vous travaillez sur cette étape ? Regardez cette vidéo qui fait partie de la série Trail Together sur Trailhead Live.
(Ce clip commence à 1 h 25 min 18 s, au cas où vous voudriez revenir en arrière et regarder à nouveau le début de l’étape.)
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.
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.
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.
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 à son sujet 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
.
public class DoAwesomeStuff implements Schedulable { public 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 portant sur CronTrigger. L’exemple ci-dessous récupère l’enregistrement CronTrigger le plus récent, ainsi que 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];
Vous pouvez également réaliser directement une requête portant sur 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 correspondant à l’enregistrement CronTrigger interrogé dans l’exemple précédent. L’ID de l’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’