In Informix 4GL wurde ein Anzeigearray verwendet, um Spalten mit Daten innerhalb des Konsolenfensters anzuzeigen. EGL stellt eine entsprechende Funktion bereit, die Sie verwenden können, um einen 'ArrayDictionary'-Abschnitt in Ihrer openUI-Anweisung anzugeben.
QTY DESC PRICE EXT
1 DOG BOWL - STAINLESS 7.95 7.95
2 FRENCHIES MUSTARD 12OZ 2.95 5.90
Jede Zeile in der Anzeige
stellt eine Folge von Name/Wert-Paaren dar, z. B. QTY=1, DESC="DOG BOWL - STAINLESS". In EGL sind solche Name/Wert-Paare in einem Wörterverzeichnis enthalten und
ein Array dieser Wörterverzeichnisse wird als 'ArrayDictionary' bezeichnet.Im Code wird die Tabelle als Gruppe von Konsolenfeldarrays definiert, eines pro Spalte. So ist die Spalte mit der Beschreibung z. B. ein Array von n Feldern mit einem Zeichenfolgedatentyp, die Spalte mit dem Preis ein Array von n Feldern mit einem Betragstyp usw.
package com.companyb.retail;
// Bindung jeder Arrayzeile an eines der folgenden Elemente
Record ItemRecord type BasicRecord
itemQty INT;
itemDesc STRING;
itemPrice DECIMAL(9,2);
itemExt DECIMAL(9,2);
end
// Formular zur Anzeige am Point-of-Sale-Terminal
Record RegisterConsole type ConsoleForm {
formSize = [10,78],
showBrackets = yes }
// Header für die Spalten
*ConsoleField {position = [1,2], value = "QTY" };
*ConsoleField {position = [1,8], value = "DESCRIPTION" };
*ConsoleField {position = [1,36], value = "PRICE" };
*ConsoleField {position = [1,48], value = "EXT" };
QTY ConsoleField[4] {
name="QTY",
datatype = "INT",
fieldlen = 3,
align = right,
position = [2, 2]
};
DESC ConsoleField[4] {
name="DESC",
datatype = "STRING",
fieldlen = 25,
align = left,
position = [2, 8]
};
PRICE ConsoleField[4] {
name="PRICE",
datatype = "NUMBER",
fieldlen = 9,
align = right,
position = [2, 36]
};
EXT ConsoleField[4] {
name="EXT",
datatype = "NUMBER",
fieldlen = 9,
align = right,
position = [2, 48]
};
registerArray ArrayDictionary {
col1 = QTY,
col2 = DESC,
col3 = PRICE,
col4 = EXT
};
end
program pos_terminal
function main()
i INT; // Index für Datensatzarray
total DECIMAL(9,2) = 0; // laufende Summe
myRegister RegisterConsole {
name = "myRegister"};
myItems ItemRecord[20];
displayFormByName( "myRegister"); // Eingangsanzeige anzeigen
openUI myRegister.registerArray
bind myItems // Benutzereintrag hier gespeichert
onEvent(AFTER_FIELD:"PRICE")
i = currentArrayDataLine();
// Gesamtpreis berechnen
myItems[i].itemExt =
myItems[i].itemPrice * myItems[i].itemQty;
onEvent(AFTER_FIELD:"EXT")
i = currentArrayDataLine();
// Laufende Summe speichern
total = total + myItems[i].itemExt;
onEvent(ON_KEY:"CTRL_X")
// Gesamtsumme anzeigen
displayAtLine( "Total: " + total, 9);
end
end
end
Das Layout im Konsolenformular bestimmt die Anzahl der Zeilen, die in der Eingangsanzeige der Konsole enthalten sind. Da das Array myItems mehr Elemente (20) enthält als die Anzeige (4), wird der Arrayabschnitt der Anzeige nach oben bzw. unten verschoben, um die gewünschten Datensätze anzuzeigen.