Informix® 4GL used a screen array to display columns of data within the console window. EGL provides the equivalent capability that you can use to specify an ArrayDictionary part with your openUI statement.
QTY DESC PRICE EXT
1 DOG BOWL - STAINLESS 7.95 7.95
2 FRENCHIES MUSTARD 12OZ 2.95 5.90
Each row
on the display is a series of name-value pairs, such as QTY=1, DESC="DOG
BOWL - STAINLESS". In EGL, a Dictionary is a part that holds such
name-value pairs, and an array of such dictionaries is an ArrayDictionary.From a code perspective, the table is defined as a collection of Console Field arrays, one per column. For example, the description column is an array of n string-type fields, the price is an array of n money-type fields, and so on.
package com.companyb.retail;
// Each line from the array binds to one of these
Record ItemRecord type BasicRecord
itemQty INT;
itemDesc STRING;
itemPrice DECIMAL(9,2);
itemExt DECIMAL(9,2);
end
// Form to appear on the point of sale terminal
Record RegisterConsole type ConsoleForm {
formSize = [10,78],
showBrackets = yes }
// headers for the columns
*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 for record array
total DECIMAL(9,2) = 0; // running total
myRegister RegisterConsole {
name = "myRegister"};
myItems ItemRecord[20];
displayFormByName( "myRegister"); // display initial screen
openUI myRegister.registerArray
bind myItems // user entry saved here
onEvent(AFTER_FIELD:"PRICE")
i = currentArrayDataLine();
// figure extension amount
myItems[i].itemExt =
myItems[i].itemPrice * myItems[i].itemQty;
onEvent(AFTER_FIELD:"EXT")
i = currentArrayDataLine();
// keep running total
total = total + myItems[i].itemExt;
onEvent(ON_KEY:"CTRL_X")
// display total
displayAtLine( "Total: " + total, 9);
end
end
end
The layout in the console form determines the number of lines that are displayed on the initial console screen. Because the myItems array contains more elements (20) than the display does (4), the array portion of the screen scrolls up or down to show requested records.