Automation Engine Script-Leitfaden > Einführung > Erste Schritte > Schleifen

Schleifen im Script

Ziele:
- WHILE-Schleifen
- PROCESS-Schleifen

Lektion 8

Schleifen führen bestimmte Script-Zeilen mehrmals durch. Im AE Script stehen Ihnen 2 unterschiedliche Schleifen zur Verfügung:

While-Schleifen wiederholen einen bestimmten Block solange eine bestimmte Bedingung erfüllt ist. Die Wiederholung endet erst dann, wenn die Bedingung nicht mehr zutrifft.

Beachten Sie, dass es bei While-Schleifen, welche sehr oft hintereinander durchlaufen werden, zu einem Abbruch der Script-Prozessierung kommt. Durch dieses Verhalten werden Endlos-Schleifen vermieden.

Der Prozess-Schleife wird eine Referenz auf eine Datensequenz übergeben. Die Anzahl der Schleifen-Durchläufe ergibt sich dabei aus der Zeilen-Anzahl der Datensequenz. Bei einer Datensequenz handelt es sich um eine interne Auflistung, zum Beispiel: eine Liste von Dateien oder die Einträge von Variablen-Objekten. Welche Werte in der Datensequenz stehen, hängt vom jeweiligen Sprachmittel ab.


Zuerst werden wir anhand eines Beispiels die Verwendung von While-Schleifen erklären.

Aufgabe des Scripts ist zu überprüfen, ob ein bestimmter Agent verfügbar ist. Erst wenn dieser aktiv ist, soll ein Job auf diesem Agenten gestartet werden. Das Script kann sich dabei in einem beliebigen ausführbaren Objekt befinden (z.B.: SCRI). Voraussetzung dafür ist somit ein Agent, auf welchem der Benutzer Jobs ausführen darf.

Verwenden Sie im ersten Schritt das Sprachmittel SYS_HOST_ALIVE, um zu überprüfen, ob der Agent aktiv ist. In unserem Beispiel wird der Agent WIN03 gewählt. Gibt das Sprachmittel den Rückgabewert "Y" zurück, so ist Agent verfügbar.

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

Als nächstes ist eine WHILE-Schleife zu erstellen. Diese soll die Prüfung des Agenten mit einer gewissen Zeitverzögerung (um zu viele Schleifendurchläufe zu vermeiden) wiederholen.
Enden soll die Schleife dann, wenn der Agent aktiv ist. Die Bedingung der Schleife muss daher lauten: &ALIVE# NE "Y". Der Vergleichsoperator "NE" bedeutet "Entspricht nicht". Andere Vergleichs-Operatoren finden Sie in der Beschreibung des Sprachmittels :WHILE.

:WHILE &ALIVE# NE "Y"
: PRINT "Waiting for agent &AGENT#..."
: WAIT 60
: SET &ALIVE# = SYS_HOST_ALIVE(&AGENT#)
:ENDWHILE

:SET &ACT# = ACTIVATE_UC_OBJECT(TESTJOB
)

Ist der Agent nicht aktiv, so werden die Anweisungen der Schleife wiederholt. Durch die Anweisung :WAIT wird die Script-Prozessierung um eine gewisse Zeit verzögert, in unserem Fall wird 60 Sekunden gewartet.

Wenn der Agent wieder verfügbar ist, gibt die Prüfung (SYS_HOST_ALIVE) den Wert "Y" zurück. Die Schleife endet danach und die Scriptzeile wird erreicht, die den Job "TESTJOB" aktiviert (Script-Funktion: ACTIVATE_UC_OBJECT). Im Aktivierungsprotokoll sehen Sie, ob noch auf den Agenten gewartet wird oder ob der Job bereits aktiviert wurde.


Folgende Schritte sollen nun den Umgang mit Process-Schleifen demonstrieren.

Ziel ist es, eine Dateiliste von einem Rechner zu holen und im Aktivierungsprotokoll auszugeben.

Dazu benötigen wir das Sprachmittel PREP_PROCESS_FILENAME, welches die Dateiliste vom Rechner eines Agenten holt. Mit Hilfe von Filterbegriffen können Sie dabei nur Dateien mit bestimmten Namen auswählen. Die Dateiliste wird als Datensequenz im Script zur Verfügung gestellt.

Um die Datensequenz zeilenweise abzuarbeiten, ist die Prozess-Schleife nötig. Diese wird mit :PROCESS begonnen und mit :ENDPROCESS beendet. Für jede Zeile in der Datensequenz wird die Schleife einmal durchlaufen.

Mit dem Sprachmittel GET_PROCESS_LINE erhalten Sie den Inhalt der aktuellen Datensequenz-Zeile, in unserem Fall Pfad und Namen der Datei. Diesen geben wir im Aktivierungsreport aus.

In unserem Beispiel verwenden wir den Agenten WIN01 um die Dateiliste zu holen. Wir ermitteln alle Textdateien des Verzeichnisses "C:\AUTOMIC\Agents\WIN01\temp", welches die Log-Dateien des Agenten enthält.

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

Als Ergebnis erhalten wird Pfad und Namen aller gewählten Dateien im Aktivierungsprotokoll.

 


Automic Documentation - Tutorials - Automic Blog - Resources - Training & Services - Automic YouTube Channel - Download Center - Support

Copyright © 2016 Automic Software GmbH