Manuel des Scripts Automation Engine > Introduction > Premières étapes > Boucles

Boucles dans le Script

Objectifs :
- boucles WHILE
- boucles PROCESS

Leçon 8

Les boucles exécutent certaines lignes de Script à plusieurs reprises. Deux boucles différentes sont disponibles dans le Script AE :

Les boucles While répètent un bloc défini tant qu'une condition spécifique est remplie. La répétition se termine une fois que la condition n'est plus remplie.

Attention : avec les boucles While qui vont très souvent être exécutées les unes à la suite des autres, une interruption du traitement du Script se produit. Ce comportement permet d'éviter les boucles sans fin.

Une référence à une séquence de données est transférée à la boucle de processus. Le nombre des exécutions de boucle résulte alors du nombre de lignes de la séquence de données. Une séquence de données est une liste interne, par exemple : une liste de fichiers ou les entrées d'objets Variable. Le type de valeurs qui se trouvent dans la séquence de données dépend de l'élément correspondant.


Expliquons tout d'abord l'utilisation des boucles While à l'aide d'un exemple. 

La Tâche du Script est de vérifier si un Agent spécifique est disponible. Ce n'est que lorsque celui-ci est actif qu'un Job doit être démarré sur cet Agent. Le Script peut alors se trouver dans un objet exécutable au choix (p. ex. : SCRI). La condition requise est ainsi un Agent sur lequel l'utilisateur peut exécuter des Jobs.

Dans un premier temps, utilisez l'élément SYS_HOST_ALIVE afin de vérifier si l'Agent est actif. Dans notre exemple, l'Agent WIN03 est sélectionné. Si l'élément renvoie le code retour "Y", l'Agent est disponible.

:SET &AGENT# = WIN03
:SET &ALIVE# = SYS_HOST_ALIVE(&AGENT#)

L'étape suivante consiste à créer une boucle While. Cette dernière doit répéter le contrôle de l'Agent avec un certain délai d'exécution (afin d'éviter un trop grand nombre de cycles de boucles).
La boucle doit alors se terminer lorsque l'Agent est actif. La condition de la boucle doit par conséquent être énoncée de la manière suivante : &ALIVE# NE "Y". L'opérateur de comparaison "NE" signifie "Ne correspond pas". Vous trouverez d'autres opérateurs de comparaison dans la description du Script :WHILE.

:WHILE &ALIVE# NE "Y"
: PRINT "En attente de l'Agent &AGENT#..."
: WAIT 60
: SET &ALIVE# = SYS_HOST_ALIVE(&AGENT#)
:ENDWHILE

:SET &ACT# = ACTIVATE_UC_OBJECT(TESTJOB
)

Si l'Agent n'est pas actif, les instructions de la boucle sont répétées. L'instruction :WAIT retarde le traitement du Script d'un certain temps ; dans notre cas, l'attente dure 60 secondes.

Si l'Agent est de nouveau disponible, le contrôle (SYS_HOST_ALIVE) indique la valeur "Y". La boucle se termine ensuite et la ligne de Script qui active le Job "TESTJOB" est atteinte (fonction script : ACTIVATE_UC_OBJECT). Le protocole d'activation vous indique si l'attente de l'Agent est encore en cours ou si le Job a déjà été activé.


Les étapes suivantes vous montrent à présent comment utiliser les boucles Process.

L'objectif est de récupérer une liste de fichiers d'un ordinateur et de l'afficher dans le protocole d'activation.

Pour ce faire, nous avons besoin de l'élément PREP_PROCESS_FILENAME qui récupère la liste de fichiers à partir de l'ordinateur d'un Agent. A l'aide de termes de filtres, vous pouvez alors uniquement sélectionner des fichiers avec des noms spécifiques. La liste de fichiers est mise à disposition dans l'élément comme séquence de données.

Pour traiter la séquence de données par ligne, la boucle de processus est nécessaire. Cette dernière commence par :PROCESS et se termine par :ENDPROCESS. Pour chaque ligne dans la séquence de données, la boucle est exécutée une fois.

L'élément GET_PROCESS_LINE vous permet d'obtenir le contenu de la ligne de séquence de données actuelle ; dans notre cas, le chemin et le nom du fichier. Nous les éditons alors dans le rapport d'activation.

Dans notre exemple, nous utilisons l'Agent WIN01 pour récupérer la liste de fichiers. Nous déterminons tous les fichiers texte du répertoire "C:\AE\Agents\WIN01\temp" qui contient les fichiers log de l'Agent.

:SET &HND# = PREP_PROCESS_FILENAME("WIN01", "C:\AE\Agents\WIN01\temp\*.txt","Y",,)
:
PROCESS &HND#
:   
SET &LINE#=GET_PROCESS_LINE(&HND#)
:  
PRINT &LINE#
:
ENDPROCESS

Comme résultat, nous obtenons le chemin et le nom de tous les fichiers sélectionnés dans le protocole d'activation.