openUI

Über die Anweisung openUI können Benutzer mit einem Programm interagieren, dessen Schnittstelle auf der Konsol-UI basiert. Die Anweisung definiert Benutzer- und Programmereignisse und gibt an, wie auf diese reagiert werden soll.

Sie können eine openUI-Anweisung beenden, indem Sie eine Anweisung exit openUI ausgeben.

Syntax

Syntax einer 'openUI'-Anweisung
OpenAttributes
Ein Satz von Eigenschaft-Wert-Paaren, voneinander jeweils durch ein Komma getrennt. Die einzelnen Eigenschaften beeinflussen die Benutzerinteraktion und manche überschreiben eine Eigenschaft der Variablen in OpenableElements. Weitere Informationen zu diesen Eigenschaften finden Sie unter Eigenschaften von 'openUI'.
OpenableElements
Die Konsol-UI-Variablen, für die die openUI-Anweisung ausgeführt werden kann:
  • ConsoleForm (Konsolformular)
  • ConsoleField (Konsolenfeld) oder Folgendes:
    • Eine Liste von Konsolenfeldern, jeweils durch ein Komma getrennt
    • Ein Verzeichnis, das in einem Konsolformular deklariert ist und sich auf einen Satz von Konsolenfeldern in diesem Konsolformular bezieht
    • Ein Feldgruppenverzeichnis, das in einem Konsolformular deklariert ist und sich auf einen Satz von Konsolenfeldgruppen in diesem Konsolformular bezieht
  • Menu (Menü)
  • Prompt (Eingabeaufforderung)
  • Window (Fenster)
BindClause
Die Liste von Basisvariablen, Datensätzen oder Feldgruppen, die an die Konsol-UI-Variablen gebunden sind. Merkmale der Bindungsvariablen hängen von den Merkmalen der Variablen 'consoleUI' ab, für die die openUI-Anweisung ausgeführt wird:
  • Für ein Konsolenfeld können Sie eine Basisvariable angeben.
  • Für ein Feldgruppenverzeichnis in der Anzeige können Sie eine Feldgruppe von Datensätzen angeben, mit jeweils einem Element pro Zeile im Feldgruppenverzeichnis. Und wenn jede Zeile in dem Feldgruppenverzeichnis einen einzelnen Wert darstellt, können Sie eine Feldgruppe von Basisvariablen angeben.
  • Für ein Verzeichnis oder eine Liste von Konsolenfeldern können Sie eine Liste von Basisvariablen angeben. Alternativ können Sie eine Feldgruppe von Datensätzen angeben, wobei jedes Element eine Reihe von Feldern enthält, die an die Konsolenfelder gebunden sind. Diese Alternative entspricht der Bindung an eine dynamische Feldgruppe mit einem angezeigten Feldgruppenverzeichnis, das nur eine Zeile aufweist. Sie können einen Datensatz anfügen, einfügen oder löschen, um die dynamische Feldgruppe zu ändern. In jedem Fall wird immer nur ein Datensatz angezeigt.
  • Für eine Eingabeaufforderung können Sie ein Basisfeld angeben, das die Antwort des Benutzers empfängt.

Weitere Details zur Bindung finden Sie in der Beschreibung des Parameters OnEventBlock sowie im Thema 'Konsol-UI-Abschnitte und zugehörige Variablen'.

OnEventBlock
Ein Ereignisblock ist eine Programmierstruktur, die keine bis viele Ereignishandler umfasst, die jeweils die Antwort auf ein bestimmtes Ereignis enthalten. Ein Ereignishandler beginnt mit einem onEvent-Header:
  onEvent(eventKind: eventQualifiers)
eventKind
Eines von mehreren Ereignissen. Gültige Werte sind unter Ereignistypen beschrieben.
eventQualifier
Daten, die das Ereignis näher definieren. Dies könnte beispielsweise das Konsolenfeld sein, in das eine Eingabe gemacht wurde, oder die Taste, die gedrückt wurde.

Die EGL-Anweisungen, die auf ein bestimmtes Ereignis reagieren, befinden sich zwischen einem 'onEvent'-Header und dem darauffolgenden 'onEvent'-Header (falls vorhanden), wie weiter unten in einem Beispiel gezeigt. Sie können jedoch keine Referenzvariable in den 'onEvent'-Block einfügen, es sei denn, diese Variable wurde als Programmglobale deklariert.

Der Benutzer interagiert kontinuierlich mit dem Programm und das Programm führt einen Ereignishandler aus, wenn das Ereignis auftritt, das diesem Ereignishandler zugeordnet ist. Wenn der Zweck der Anweisung openUI jedoch darin besteht, eine Eingabeaufforderung anzuzeigen, hat die Benutzer-Programm-Interaktion keinen Schleifencharakter:
  1. Ein Ereignishandler (möglicherweise einer von mehreren) fängt eine Benutzertastatureingabe ab und antwortet.
  2. Die Anweisung openUI wird beendet.

Für ein Fenster ist kein Ereignisblock verfügbar.

Ereignistypen

Die Konsol-UI unterstützt die folgenden Ereignisse für alle Modi:
BEFORE_OPENUI
Die EGL-Laufzeit startet die Ausführung der Anweisung openUI. Dieses Ereignis ist verfügbar für alle Konsol-UI-Variablen, die nicht auf 'Window' basieren.
AFTER_OPENUI
Die EGL-Laufzeit wird in Kürze die Anweisung openUI stoppen. Dieses Ereignis ist verfügbar für alle Konsol-UI-Variablen, die nicht auf 'Window' basieren.
ON_KEY:(ListOfStrings)
Der Benutzer hat eine bestimmte Taste gedrückt, wie durch eine Zeichenfolge wie ESC, F2 oder CONTROL_W angegeben. Sie können mehrere Tasten angeben, indem Sie die einzelnen Zeichenfolgen voneinander trennen, wie im folgenden Beispiel dargestellt:
  ON_KEY:("a", "ESC") 

Dieses Ereignis ist in einem Feldgruppenverzeichnis, einem Konsolenfeld, einem Menü oder einer Eingabeaufforderung verfügbar.

BEFORE_FIELD:(ListOfStrings)
Der Benutzer hat den Cursor in das angegebene Konsolenfeld verschoben, wie durch eine Zeichenfolge angegeben ist, die mit dem Wert des Namensfeld für das Konsolenfeld übereinstimmt. Sie können mehrere Konsolenfelder im selben Konsolformular angeben, indem Sie die einzelnen Zeichenfolgen voneinander trennen, wie in folgendem Beispiel dargestellt:
  BEFORE_FIELD:("field01", "field02") 
AFTER_FIELD:(ListOfStrings)
Der Benutzer hat den Cursor aus dem angegebenen Konsolenfeld verschoben, wie durch eine Zeichenfolge angegeben ist, die mit dem Wert des Namensfelds für das Konsolenfeld übereinstimmt. Sie können mehrere Konsolenfelder im selben Konsolformular angeben, indem Sie die einzelnen Zeichenfolgen voneinander trennen, wie in folgendem Beispiel dargestellt:
  AFTER_FIELD:("field01", "field02") 
BEFORE_DELETE
In Relation zu einem angezeigten Feldgruppenverzeichnis hat der Benutzer die in consoleLib.key_deleteLine angegebene Taste gedrückt, aber die EGL-Laufzeit hat die Zeile noch nicht gelöscht. Das Programm kann consoleLib.cancelDelete aufrufen, um das Löschen der Zeile zu verhindern.
BEFORE_INSERT
In Relation zu einem angezeigten Feldgruppenverzeichnis hat der Benutzer die in consoleLib.key_insertLine angegebene Taste gedrückt, aber die EGL-Laufzeit hat die Zeile noch nicht eingefügt. Das Programm kann consoleLib.cancelInsert aufrufen, um das Einfügen der Zeile zu verhindern.
BEFORE_ROW
In Relation zu einem angezeigten Feldgruppenverzeichnis hat der Benutzer den Cursor in eine Zeile verschoben.
AFTER_DELETE
In Relation zu einem angezeigten Feldgruppenverzeichnis hat der Benutzer die in consoleLib.key_deleteLine angegebene Taste gedrückt und die EGL-Laufzeit hat eine Zeile gelöscht.
AFTER_INSERT
In Relation zu einem angezeigten Feldgruppenverzeichnis hat der Benutzer die in consoleLib.key_insertLine angegebene Taste gedrückt, die EGL-Laufzeit hat eine Zeile eingefügt und der Cursor verlässt die eingefügte Zeile.

Der Benutzer kann die Zeile bearbeiten, bevor Änderungen in einer Datenbank festgeschrieben werden, wie dies typischerweise im Handler AFTER_INSERT geschieht.

AFTER_ROW
Der Benutzer hat den Cursor aus einer Zeile in einem angezeigten Feldgruppenverzeichnis verschoben.
MENU_ACTION:(ListOfStrings)
Der Benutzer hat einen Menüpunkt ausgewählt, wie durch eine Zeichenfolge angegeben ist, die mit dem Wert des Namensfelds für den Menüpunkt übereinstimmt. Sie können mehrere Menüpunkte angeben, indem Sie die einzelnen Zeichenfolgen wie in folgendem Beispiel gezeigt voneinander trennen:
  MENU_ACTION:("item01", "item02") 
Die Konsol-UI unterstützt die folgenden Ereignisse nur für den RCP-Modus. Weitere Informationen finden Sie unter Konsol-UI-Widgets:
PUSHED: buttonName
Der Benutzer hat auf buttonName geklickt.
SELECTION_CHANGED: comboBoxName | radioGroupName
Der Benutzer hat auf comboBoxName oder ein Mitglied von radioGroupName geklickt.
STATE_CHANGED: checkBoxName
Der Benutzer hat auf checkBoxName geklickt.

isConstruct

Wenn die Eigenschaft isConstruct auf YES gesetzt ist, binden Sie die gesamte openUI-Anweisung an eine Variable und nicht einzelne Felder an Variablen. EGL verwendet die Zeichenfolge, an die Sie die Anweisung binden, um den Inhalt einer SQL-Klausel beizubehalten, wie in diesem Beispiel veranschaulicht:
  1. Eine openUI-Anweisung wird für ein Konsolformular mit drei Konsolenfeldern ('employee' (Mitarbeiter), 'age' (Alter) und 'city' (Stadt)) ausgeführt, wobei jedes Feld einer SQL-Tabellenspalte desselben Namens zugeordnet ist.

    Sie ordnen ein Konsolenfeld einer SQL-Tabellenspalte zu, indem Sie die Konsolenfeldeigenschaft SQLColumnName festlegen. Außerdem müssen Sie die Konsolenfeldeigenschaft dataType wie unter dataType beschrieben festlegen.

  2. Der Benutzer führt die folgenden Aktionen aus:
    • Er trägt im Feld für den Mitarbeiter nichts ein.
    • Er gibt im Feld für das Alter Folgendes ein:
        > 28
    • Er gibt im Feld für die Stadt Folgendes ein:
        = 'Sarasota'
  3. Sobald der Benutzer den Cursor aus der angezeigten Variable entfernt, für die die 'openUI'-Anweisung ausgeführt wird, empfängt die gebundene Variable den folgenden Inhalt:
      AGE > 28 AND CITY = 'Sarasota'

Wie hier gezeigt, platziert EGL den Operator AND zwischen die einzelnen Klauseln, die der Benutzer bereitstellt.

In der nächsten Tabelle sind gültige Benutzereingaben und die resultierenden Klauseln aufgeführt. Die Phrase 'Einfache SQL-Typen' bezieht sich auf SQL-Typen, die weder strukturiert, noch LOB-ähnlich sind.

Symbol Definition Unterstützte Datentypen Beispiel Resultierende Klausel (für eine Zeichenspalte namens C) Resultierende Klausel (für eine numerische Spalte namens C)
= Gleich Einfache SQL-Typen =x, ==x C = 'x' C = x
> Größer als Einfache SQL-Typen >x C > 'x' C > x
< Kleiner als Einfache SQL-Typen <x C < 'x' C < x
>= Nicht kleiner als Einfache SQL-Typen >=x C >= 'x' C >= x
<= Nicht größer als Einfache SQL-Typen <=x C <= 'x' C <= x
<> oder != Ungleich Einfache SQL-Typen <>x oder !=x C != 'x' C != x
.. Bereich Einfache SQL-Typen x.y oder x..y C BETWEEN 'x' AND 'y' C BETWEEN x AND y
* Platzhalter für Zeichenfolge (wie in der folgenden Tabelle beschrieben) CHAR *x oder x* oder *x* C MATCHES '*x' Nicht zutreffend
? Platzhalter für ein einzelnes Zeichen (wie in der folgenden Tabelle beschrieben) CHAR ?x, x?, ?x?, x?? C MATCHES '?x' Nicht zutreffend
| Logisches ODER Einfache SQL-Typen x|y C IN ('x', 'y') C IN (x, y)

Das Gleichheitszeichen (=) kann bedeuten, dass etwas einen Nullwert hat, und das Ungleichheitszeichen (!= oder <>) kann bedeuten, dass etwas keinen Nullwert hat.

Eine Klausel MATCHES resultiert aus der Angabe des Benutzers eines der Platzhalterzeichen, die in der nächsten Tabelle beschrieben sind.

Symbol Effekt
* Stimmt mit null oder mehr Zeichen überein.
? Stimmt mit allen einzelnen Zeichen überein.
[ ] Stimmt mit allen in Klammern enthaltenen Zeichen überein.
- (Bindestrich) Wenn ein Bindestrich zwischen Zeichen innerhalb von Klammern verwendet wird, stimmt er mit jedem Zeichen im Bereich zwischen den beiden Zeichen (einschließlich) überein. Beispiel: [a-z] stimmt mit jedem kleingeschriebenen Buchstaben oder jedem kleingeschriebenen Sonderzeichen überein.
^ Wenn dieses Zeichen in Klammern verwendet wird, stimmt ein erstes Winkelzeichen mit allen Zeichen überein, die nicht in den Klammern enthalten sind. Beispiel: [^abc] stimmt mit allen Zeichen außer a, b oder c überein.
\ Dies ist das Standard-Escapezeichen. Das folgende Zeichen ist ein Literal. Damit können alle Platzhalterzeichen in die Zeichenfolge eingefügt werden, ohne dass sie tatsächlich als Platzhalter verstanden werden.
Alle anderen Zeichen außerhalb von Klammern Müssen exakt übereinstimmen.

Beispiel

Betrachten Sie das folgende Beispiel für eine Interaktion zwischen dem Benutzer und einem Konsolformular:
		openUI {bindingByName=yes}
			 activeForm
			 bind firstName, lastName, ID
			 OnEvent(AFTER_FIELD:"ID")
				  if (employeeID == 700)
        firstName = "Angela";
        lastName = "Smith";
				  end
  end
Dieser Code führt die folgenden Aktionen aus:
  • Er öffnet das aktive Konsolformular. Dabei handelt es sich um das zuletzt im aktiven Fenster angezeigte Konsolformular.
  • Er bindet eine Gruppe von Basisvariablen an jedes einzelne Konsolenfeld.
  • Er gibt an, dass EGL, nachdem der Benutzer einen Wert in das Feld 'employeeID' eingegeben und zum nächsten Feld gewechselt ist, Zeichenfolgen in zwei weitere Variablen einfügt.
Betrachten Sie die folgenden Details zu dem Beispiel:
  • Der Cursor startet im ersten aufgelisteten Konsolenfeld, aber er sollte in dem ID-Feld starten, damit die Eingabe des Benutzers in die anderen Felder nicht von dem Ereignishandler bereinigt wird.
  • Der Ereignishandler aktualisiert die Variablen, die an die Konsolenfelder 'firstName' und 'lastName' gebunden sind, bewirkt aber nicht, dass diese Felder angezeigt werden, bis der Cursor in diese Felder gesetzt wird. Möglicherweise möchten Sie, dass diese Werte früher angezeigt werden.

Feedback