Beispielsammlung, Leitfaden > Dynamischer Eingabedialog für die Aktivierung von Jobs

Dynamischer Eingabedialog für die Aktivierung von Jobs

Ziel: Erstellung einer Eingabemaske zur Auswahl eines oder mehrerer Agenten, auf denen ein Job laufen soll. Die Agenten, die zur Auswahl stehen, werden dabei zur Laufzeit dynamisch aus der Datenbank ermittelt. Zusätzlich ist im Eingabedialog ein Queue-Objekt und ein Betriebssystem-Kommando für die Jobs festzulegen. Dadurch können Sie bequem über einen Eingabedialog festlegen, welcher Betriebssystem-Befehl auf welchen Rechnern ausgeführt werden soll.

Verwendete Objekte: PromptSet, Script, Job (Windows), Variable (SQL-intern)

Verwendete Sprachmittel: :SET, :PSET, :WHILE :ENDWHILE, :IF :ELSE :ENDIF, LENGTH, SYS_HOST_ALIVE, ACTIVATE_UC_OBJECT, :PRINT, :DATA, :PUT_ATT

Voraussetzungen: Anlegen und Verwenden von interen SQL-Variablen (Privileg und Einstellung SQLVAR_INTERNAL = Y in der Variable UC_SYSTEM_SETTINGS erforderlich)

Dieses Beispiel verdeutlicht die Verwendung von PromptSet-Objekten, dynamischen Variablen-Objekten, vordefinierten Variablen und Script-Arrays.


Beispiel

Die Eingabe der benutzerdefinierten Werte erfolgt über ein PromptSet-Objekt, das über ein Script-Objekt aufgerufen wird. Die zur Auswahl stehenden Queue-Objekte und Windows-Agenten werden mit Hilfe von Variablen-Objekten des Typs SQL-intern direkt aus der Datenbank geholt. Nach Absenden des PromptSet-Dialoges wird ein Job auf jeden gewählten Agenten gestartet.

Definition der Eingabemaske

PromptSet-Objekte stellen eine benutzerdefinierte Eingabemaske dar, die über aktivierbare Objekte aufgerufen werden. Die Elemente eines PromptSet-Objektes ermöglichen die Eingabe bzw. Auswahl der Werte, wobei deren erlaubte bzw. auswählbare Werte aus einem Variablen-Objekt bezogen werden (=Referenzvariable).

Zuerst sind somit die Referenz-Variablenobjekte zu erstellen: Legen Sie zwei Variablen-Objekte vom Typ SQLI an: VARA.SQLI.AGENT und VARA.SQLI.QUEUE.

Der Vorteil von Variablen-Objekte vom Typ SQL-intern ist, das die Werte dynamisch zur Laufzeit aus der Datenbank ermittelt werden. Dadurch werden im PromptSet-Element immer die aktuellen Werte angezeigt. Wenn z.B.:ein neuer Agent hinzukommt, wird dieser beim nächsten Aufruf der Eingabemaske automatisch angezeigt. Sie können natürlich auch statische Variablen verwenden, deren Inhalt ist dann jedoch manuell zu pflegen.

Die eine Variable muss alle Windows-Agenten, die andere alle Queue-Objekte des aktuellen Mandanten aus der Datenbank lesen. Fügen Sie folgende SQL-Anweisungen in den Variablen-Objekten ein, wenn Sie eine MS SQL Server Datenbank verwenden:

Bei einer anderen Datenbank (Oracle oder DB2) sind die SQL-Anweisungen entsprechend abzuändern. Überprüfen Sie anschließend die SQL-Anweisungen über die "Vorschau". Werden die Werte ohne Fehler angezeigt, funktionieren die Anweisungen.

Bei &$CLIENT# handelt es sich um eine vordefinierte Variable, die zur Laufzeit durch die Nummer des aktuellen Mandanten ersetzt wird. Damit diese Variable aufgelöst wird, ist allerdings mindestens die Einstellung VAR_SECURITY_LEVEL = 1 (oder 2 bzw. 3) in der Variable UC_SYSTEM_SETTINGS notwendig.

 

Erstellen Sie weiters ein neues PromptSet-Objekt mit dem Namen: PRPT.AGENT

Öffnen Sie das Objekt und wechseln Sie in die Registerkarte Designer. Per Drag & Drop können Sie nun die gewünschten PromptSet-Elemente aus dem rechten Bereich in die Mitte ziehen.

In unserem Fall benötigen wir folgende PromptSet-Elemente mit den genannten Eigenschaften:

Elemente Beschreibung Eigenschaften
Textfeld Für den Namen des Jobs (in unserem Beispiel fix vorgegeben)
  • Datenreferenz: UC_DATATYPE_STRING
  • Wert erforderlich
  • Variablenname: job#
  • Beschrifung: Job
  • Gesperrt
  • Standardwert: JOBS.WIN.PROMPT
Checkliste Für die Auswahl einer oder mehrerer Windows-Agenten.
  • Datenreferenz: VARA.SQLI.AGENT
  • Wert erforderlich
  • Mehrfachauswahl, Array
  • Variablenname: agent#
  • Beschriftung: Agent
Kombinationsfeld Für die Auswahl eines Queue-Objektes
  • Datenreferenz: VARA.SQLI.QUEUE
  • Variablenname: queue#
  • Beschriftung: Queue
  • Standardwert: &$QUEUE# (Queue des Script-Objektes)
Textfeld Eingabe eines Betriebssystem-Kommandos
  • Datenreferenz: UC_DATATYPE_STRING (standard)
  • Wert erforderlich
  • Variablenname: jcl#
  • Beschriftung: JCL
  • Standardwert: dir C:\

 

Script-Objekt

Mit dem Script-Objekt wird das PromptSet-Objekt aufgerufen, deren Werte eingelesen und die Jobs aktiviert.

Legen Sie ein neues Script-Objekt an: SCRI.START.JOBS

Öffnen Sie das Objekt und wechseln Sie in die Registerkarte Variablen & Prompts. Wählen Sie unter "PromptSets" das vorhin erstellte PromptSet-Objekt PRPT.AGENT aus. Hier können Sie nach Wunsch die Standardwerte der PromptSet-Elemente überschreiben.

Wechseln Sie in die Registerkarte Script und fügen Sie folgende Zeilen ein:

:SET &LEN# = LENGTH(&AGENT[])
:WHILE &LEN# > 0
: PSET &HOST# = &AGENT[&LEN#]
: IF SYS_HOST_ALIVE(&HOST#) = "Y"

: SET &RET# = ACTIVATE_UC_OBJECT(&JOB#,,,,,PASS_VALUES,&queue#,"&JOB#_&HOST#")
: P "Start Job &JOB# on agent &HOST# with RunID &RET#"
: ELSE
: P "Agent &HOST# is not active."
: ENDIF
: SET &LEN# = &LEN# - 1

:ENDWHILE

Mit dem Script wird ermittelt wie viele Agenten im PromptSet-Objekt ausgewählt wurden. Danach werden die Namen der Agenten aus dem Script-Array ausgelesen. Ist der Agent aktiv, so wird der Windows-Job darauf gestartet.

Um die Durchführungen des Jobs in der Statistik unterscheiden zu können, werden diese mit einem Alias gestartet. Der Alias setzt sich aus Job- und Agenten-Namen zusammen. Beispiel: JOBS.WIN.PROMPT_WIN01

 

Windows-Job

Legen Sie ein Windows-Job Objekt mit folgendem Namen an: JOBS.WIN.PROMPT

Öffnen Sie den Job und tragen Sie in der Registerkarte Attribute ein Login-Objekt ein, dass für alle Windows-Agenten funktioniert. Wechseln Sie anschließend in die Registerkarte Pre-Script und fügen Sie folgende Zeile ein:

: PUT_ATT HOST = &HOST#

Dadurch wird der Agent, der vom Script-Objekt mittels einer Objektvariable übergeben wurde, dynamisch zur Laufzeit gesetzt.

Folgende Zeilen werden in Registerkarte Script für die Ausführung des benutzerdefinierten Windows-Kommandos benötigt:

:DATA &jcl#
:DATA "@set retcode=%errorlevel%"
:DATA "@if NOT %ERRORLEVEL% == 0 goto :retcode"

 

Ergebnis

Für den Aufruf des Eingabedialoges ist das Script-Objekt zu starten. Wählen Sie die gewünschten Agenten und ein Queue-Objekt aus. Tragen Sie im Feld "JCL" ein Windows-Kommando ein, dass auf den Rechnern der gewählten Agenten ausgeführt werden soll.

In diesem Fall wird der Job JOBS.WIN.PROMPT in der Queue CLIENT_QUEUE auf den Agenten WIN01, WIN02 und WIN03 gestartet. Auf den Rechnern dieser Agenten wird die Dateiliste von C:\ abgefragt.

Dadurch können Sie schnell und einfach, benutzerdefinierte Befehle auf mehreren Rechnern ausführen.

s

 


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

Copyright © 2016 Automic Software GmbH