infra:NET Expert
 
×
16.01 Makrogesteuerte Abläufe
Mit einer Ablaufsteuerdatei (*.IMA) lässt sich jede beliebige infra-Bedienung simulieren, so dass automatisierte infra-Abläufe programmiert werden können.
Für die Ausführung der Steuerdateien gibt es folgende Möglichkeiten:
  • Über den infra-Aufruf mit dem Parameter PROCESS in Verbindung mit den Parametern FUNCTION und CALLBACK (siehe Kapitel "Aufrufparameter")
  • Über die infra-Prozeduren "CBpProcessMakros" und "CBpProcessMakroFile" (siehe Kapitel 15.02 infra-Prozeduren (CallBacks)), mit einem Button in der ToolBar (siehe Kapitel "Aufbau SIBPPS.INI", Sektion [ToolBar] und [ToolBitmaps]) oder zum Beispiel einem Eintrag in der Menüleiste (siehe Kapitel "Aufbau SIBPPS.INI", Sektion [Menu]) bzw. des Kontext-Menüs (siehe Kapitel "Aufbau SIBPPS.INI", Sektion [Popup]).
Über die infra-Prozedur "CBpProcessMakroFile" bei einem Oberflächen-Ereignis (siehe Kapitel 15.02 infra-Prozeduren (CallBacks), Sektion [GuiCBControl]), zum Beispiel über das Ereignis "CBBufferChanged", das bei der Änderung eines Feldinhaltes ausgelöst wird (siehe unten).
Die Ablaufsteuerdateien können mit einem beliebigen Texteditor erstellt werden. Als Programmiersprache dient die GRIT-Interpretersprache (siehe Kapitel "IMA-Grundlagen") mit einigen infra-spezifischen Erweiterungen, die im Kapitel "IMA-Erweiterungen" beschrieben und mit Beispielen verdeutlicht werden. Die dort beschriebenen und noch weitere mitunter komplexe Beispiele werden als Steuerdateien (.IMA) im Verzeichnis INFRA\GRAFIK\IMA mit der Software ausgeliefert. Die Beschreibungen sind auch in den Steuerdateien als Kommentare enthalten.
Bitte auch die Behandlung von Registerdialogen im Kapitel 05.04 Anpassungen an Registerdialogen (CGW, SDF, IMA) beachten.
Prozess Rückgabecode (Exit Code)
Tritt bei der Ausführung einer IMA-Datei ein „schwerwiegender Fehler“ auf, wird beim Beenden von infra:NET der Code 230 als Exit Code vom Prozess zurückgegeben. Der Rückgabecode kann in einer Batch-/CMD-Datei über die Pseudo-Umgebungsvariable „%errorlevel%“ ausgewertet werden.
Bei Verwendung des Aufrufparameters „PROCESS“ in Kombination mit einer zeitgesteuerten Ausführung über den Windows Scheduler lässt sich so prüfen, ob es bei der IMA-Ausführung zu einem schwerwiegenden Fehler kam:
SIBPPS.EXE LOGIN=infra PROCESS=C:\infra\grafik\ima\test.ima
if %errorlevel% neq 0 echo Der Prozess endete mit Code %errorlevel%
Der Rückgabecode kann auch direkt innerhalb einer IMA-Datei gesetzt werden. Dafür steht die Globalvariable „GV_processexitcode“ zur Verfügung, z.B.:
do_infra_macro(NULL,"SetGV(GV_processexitcode,1)");
Mausblockierung
Die Blockierung der Maus kann innerhalb der Ablaufsteuerdatei mit der Anweisung infra_block_mouse(n) beeinflusst und zum Beispiel temporär für eine Benutzerinteraktion verändert werden.
Im Standard ist die Blockierung nicht aktiv.
infra_block_mouse(0) hebt die Mausblockierung auf und infra_block_mouse(1) blockiert die Maus.
Um zu verhindern, dass IMA-gesteuerte Abläufe durch Benutzeraktionen negativ beeinflusst werden, muss die INI-Einstellung „EnableIMAMouseBlocking=Yes“ in der Sektion [Kernel] aktiviert werden. Dadurch wird der Mauszeiger bei der Ausführung einer IMA-Datei als Verbots-Symbol dargestellt und alle Mausklicks
innerhalb der infra:NET Anwendung werden ignoriert. So wird verhindert, dass vor Beenden eines automatisierten IMA-Ablaufs versehentlich vom Anwender Dialoge geschlossen oder andere Bedienungen vorgenommen werden, die den Ablauf der IMA-Datei stören könnten. Tastatureingaben sind aber weiterhin möglich.
Achtung
Bei einigen komplexen IMA-Dateien wird der Wechsel auf andere Register usw. erwartet und damit wird eine Mausbedienung für eine komfortable Bedienung ggf. sinnvoll.
Besonderheiten bei Verwendung von Ereignissen für IMA-Abläufe
Um auf die Änderung eines Feldinhaltes mit der Ausführung einer IMA-Datei zu reagieren, bietet sich die Verwendung des CBBufferChanged-Ereignisses in der SibDef-Sektion [GuiCBControl] an:
[GuiCBControl]
CBBufferChanged=CBpProcessMakroFile,MeinAblauf.IMA
Achtung
Dieses Ereignis wird in manchen infra-Programmen bereits im Standard für die Reaktion auf Benutzereingaben verwenden. Daher muss unbedingt geprüft werden, ob für das jeweilige Dialogelement bereits ein CBBufferChanged-Eintrag im CGW oder einer Standard-SDF-Datei existiert. Dieser kann auch in den SibDef-Angaben zum Dialog selbst hinterlegt sein und damit für alle Elemente des Dialogs gelten (Sektion [GuiCBControl], [GuiCBEdit], [GuiCB…]).
Wenn das der Fall ist, kann der CBBufferChanged-Eintrag nicht einfach mit der Ausführung einer eigenen IMA-Datei überschrieben werden, da ansonsten die Funktionsweise des jeweiligen Programms gestört werden würde. Vielmehr muss der Aufruf der bereits im CBBufferChanged-Eintrag angegebenen infra-Prozedur in die eigene IMA-Datei übernommen werden. Abhängig vom Anwendungsfall kann diese infra-Prozedur entweder vor den eigenen Aktionen innerhalb der IMA-Datei oder am Ende der eigenen Aktionen aufgerufen werden - je nachdem, ob das Programm vor oder nach den eigenen Anweisungen von der Eingabe des Benutzers erfahren soll.
Ein typisches Beispiel für die Verwendung des CBBufferChanged-Ereignisses im infra-Standard sind die infra-Stammdatenprogramme (MEGAS). Hier befindet sich in jedem Dialog folgende SibDef-Angabe, die für jedes Eingabefeld des jeweiligen Dialogs gilt:
[GuiCBEdit]
CBBufferChanged=CBpMegField
Soll nun auf die Eingabe in einem bestimmten Feld des Dialogs mit einer eigenen IMA-Datei reagiert werden, muss zunächst das CBBufferChanged-Ereignis übersteuert (siehe oben) und anschließend die infra-Prozedur "CBpMegField" aus der eigenen IMA-Datei aufgerufen werden:
(IMA-Anweisungen)
execute_callback(this,"CBpMegField","");
Hinweis
Für den Fall, dass der im Standard aufgerufenen infra-Prozedur noch ein Parameter übergeben wurde, muss dieser beim Aufruf mittels execute_callback ebenfalls mitgegeben werden (3. Parameter).