Efficience, Script

GlideAggregate : compter les incidents sans les parcourir un par un

Vous devez afficher le nombre d’incidents actifs ou leur répartition par priorité ? Le résultat attendu est un indicateur, pas une liste d’enregistrements. C’est un bon point de départ pour utiliser GlideAggregate et éviter une boucle JavaScript dont la seule tâche serait d’incrémenter un compteur.

Cadre des exemples : scripts côté serveur, à adapter et à tester dans une instance de développement disposant de la table Incident. Les exemples sont pédagogiques ; ils n’ont pas été exécutés sur votre instance ServiceNow.

Un premier exemple : le total des incidents actifs

var total = new GlideAggregate('incident');
total.addQuery('active', true);
total.addAggregate('COUNT');
total.query();

if (total.next()) {
    gs.info('[Snowledge] Incidents actifs : ' +
        total.getAggregate('COUNT'));
}

Le filtre définit le périmètre et addAggregate('COUNT') demande le comptage. Le résultat est lu avec getAggregate('COUNT'), après avoir avancé sur la ligne agrégée. Cette méthode renvoie une chaîne : convertissez-la explicitement en nombre si vous devez ensuite réaliser un calcul.

Passer du total à une répartition par priorité

var repartition = new GlideAggregate('incident');
repartition.addQuery('active', true);
repartition.addAggregate('COUNT');
repartition.groupBy('priority');
repartition.query();

while (repartition.next()) {
    var priorite = repartition.getValue('priority');
    var nombre = repartition.getAggregate('COUNT');
    gs.info('[Snowledge] Priorite ' +
        (priorite || 'non renseignee') + ' : ' + nombre);
}

Avec groupBy('priority'), chaque ligne représente un groupe de priorité. Les valeurs affichées sont les valeurs internes, pas nécessairement leurs libellés métier. Les champs vides méritent aussi une décision explicite : faut-il les afficher, les exclure ou signaler un problème de qualité des données ?

Le piège : confondre groupes et enregistrements

Une répartition qui retourne cinq lignes ne signifie pas qu’il existe cinq incidents. Elle signifie qu’il existe cinq groupes dans le résultat. Le nombre d’incidents de chaque groupe se lit dans son agrégat COUNT. Écrivez vos noms de variables et vos libellés en conséquence : « nombre de groupes » et « nombre d’incidents » décrivent deux mesures différentes.

Valider l’indicateur avant de l’utiliser

  • Comparez le total à une liste utilisant exactement les mêmes conditions.
  • Vérifiez les cas où aucun incident ne correspond au filtre.
  • Gardez le même périmètre pour comparer deux périodes ou deux tableaux.
  • Évaluez les droits d’accès avant d’exposer les agrégats dans une interface : un total peut lui aussi révéler une information.

GlideAggregate ne remplace pas tous les usages de GlideRecord. Si vous devez traiter chaque incident, vous avez besoin des enregistrements. Si un rapport natif répond déjà au besoin de restitution, examinez cette option avant d’ajouter du code. Le choix dépend de ce que l’application doit produire.

Documentation et suite

Consultez la référence officielle GlideAggregate, en sélectionnant la version de votre instance. Pour récupérer une liste plutôt qu’un indicateur, retrouvez notre article sur les requêtes GlideRecord ciblées.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *