Informix® 4GL は、画面配列 を使用して、コンソール・ウィンドウ内にデータの列を表示していました。 EGL では、openUI 文で ArrayDictionary パーツを指定可能にすることで、同等の機能を提供します。
QTY DESC PRICE EXT
1 DOG BOWL - STAINLESS 7.95 7.95
2 FRENCHIES MUSTARD 12OZ 2.95 5.90
ディスプレイの各行は、QTY=1、DESC="DOG BOWL - STAINLESS" のように、名前と値のペアの連続になります。
EGL では、辞書はそのような名前値ペアを保持するパーツであり、また、こうした辞書の配列は ArrayDictionary です。コードの観点から見ると、テーブルは、列あたり 1 つのコンソール・フィールド配列の集合として定義されます。 例えば、「説明 (DESC)」列は n ストリング・タイプ・フィールドの配列に、「価格 (PRICE)」列は n マネー・タイプ・フィールドの配列に、というようになります。
package com.companyb.retail;
// 配列からの各行は、以下のいずれかにバインドされます
Record ItemRecord type BasicRecord
itemQty INT;
itemDesc STRING;
itemPrice DECIMAL(9,2);
itemExt DECIMAL(9,2);
end
// POS 端末装置上に表示されるように形成します
Record RegisterConsole type ConsoleForm {
formSize = [10,78],
showBrackets = yes }
// 列のヘッダー
*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; // レコード配列の索引
total DECIMAL(9,2) = 0; // 現在高
myRegister RegisterConsole {
name = "myRegister"};
myItems ItemRecord[20];
displayFormByName( "myRegister"); // 初期画面を表示します
openUI myRegister.registerArray
bind myItems // ユーザー・エントリーはここに保存されます
onEvent(AFTER_FIELD:"PRICE")
i = currentArrayDataLine();
// 拡張の量の外観
myItems[i].itemExt =
myItems[i].itemPrice * myItems[i].itemQty;
onEvent(AFTER_FIELD:"EXT")
i = currentArrayDataLine();
// 現在高の保持
total = total + myItems[i].itemExt;
onEvent(ON_KEY:"CTRL_X")
// 合計表示
displayAtLine( "Total: " + total, 9);
end
end
end
コンソール書式におけるレイアウトは、初期のコンソール画面に表示される行数を決定します。 myItems 配列に含まれる要素 (20) が表示される要素 (4) より多いため、画面の配列部分を上または下へスクロールして要求されたレコードを表示します。