DataTable-Abschnitt
Ein DataTable-Abschnitt besteht aus einer Datensammlung in tabellarischer Form, die Sie in einer Anwendung zur Verfügung stellen können. Im Unterschied zu anderen Datenabschnitten deklarieren Sie jeden DataTable-Abschnitt in einer eigenen EGL-Quellendatei. Eine Datentabelle (DataTable) ist ein Hauptabschnitt, d. h., Sie müssen sie in einer Datei definieren, die keine anderen Hauptabschnitte enthält, und sie muss denselben Namen wie die Datei haben.
Fügen Sie eine Datentabelle (DataTable) in eine Anweisung use ein, damit sie für ein Programm, eine Bibliothek oder einen Handler sichtbar wird. Wenn Sie die Datentabelle (DataTable) nur als Nachrichtentabelle verwenden, können Sie die Datentabelle über die Eigenschaft msgTablePrefix des Programms mit dem Programm verbinden.
Der DataTable-Abschnitt hat eine erforderliche Eigenschaft contents, die eine zweidimensionale Feldgruppe mit Werten für die Tabelle angibt. Siehe DataTable-Eigenschaften und das Beispiel später in diesem Abschnitt.
Für jede Datenspalte, die Sie mit der Eigenschaft contents angeben, müssen Sie eine Variablendeklaration einfügen. Diese Variablendeklarationen sind Strukturfelder, die denen in einem strukturierten Datensatz ähneln (siehe Datensatzabschnitt). Strukturfelder haben immer eine feste Länge (beispielsweise sind keine STRING-Variablen mit nicht definierter Länge zulässig). Sie können eine Unterstruktur für diese Deklarationen angeben, indem Sie ein numerisches Präfix zuordnen. Andernfalls geht EGL davon aus, dass sich alle Felder auf derselben Ebene befinden. Sie können Inhalte nur für die Felder der höchsten Ebene in der Struktur angeben (diejenigen mit der niedrigsten Zahl für die Ebene), nicht für die Unterstrukturfelder. Weitere Informationen finden Sie in den Beispielen unten in diesem Abschnitt.
Syntax

- DataTablePartName
- Der Name für die Datentabelle. Alle Programme oder Handler, die die Tabelle verwenden, greifen über diesen Namen auf sie zu. Siehe "Kompatibilität" in diesem Abschnitt.
- Stereotyp
- Der Stereotyp, der die Datentabelle (DataTable) für einen bestimmten Anwendungsfall anpasst; siehe "Stereotypen". Eine Liste verfügbarer Stereotypen finden Sie unter "DataTable-Stereotypen" in diesem Abschnitt. Wenn Sie hier keinen Stereotypen angeben, verwendet EGL standardmäßig den Stereotypen BasicTable.
- Spaltendeklarationen
- Eine Liste von Strukturfeldern mit fester Länge, von denen jedes einen Datentyp für jede der Spalten in der Tabelle angibt. Wie bei allen anderen Variablendeklarationen muss jede mit einem Semikolon (;) enden.
- Eigenschaften
- Ein SET-Werteblock, der Eigenschaften für die Datentabelle enthält. Eine dieser Eigenschaften - contents - ist erforderlich und stellt eine Feldgruppe mit Literaldaten für die Datentabelle zur Verfügung. Details hierzu finden Sie in DataTable-Eigenschaften.
DataTable-Stereotypen
- BasicTable
- Enthält Informationen, die in der Programmlogik verwendet werden, wie z. B. eine Liste mit Ländern und zugehörigen Codes. Dies ist der Standardstereotyp.
- MatchInvalidTable
- Enthält Informationen in der ersten Spalte, die mit der Benutzereingabe verglichen werden. Die Benutzereingabe muss sich von allen bereitgestellten Werten unterscheiden. Dieser Stereotyp wird bei UI-Technologien verwendet. Die Datentabelle (DataTable) wird normalerweise der Eigenschaft validatorDataTable eines Felds zugeordnet. Wenn die Auswertung fehlschlägt, zeigt EGL eine Fehlernachricht an.
- MatchValidTable
- Enthält Informationen in der ersten Spalte, die mit der Benutzereingabe verglichen werden. Die Benutzereingabe muss mit einem der bereitgestellten Werte übereinstimmen. Dieser Stereotyp wird bei UI-Technologien verwendet. Die Datentabelle (DataTable) wird normalerweise der Eigenschaft validatorDataTable eines Felds zugeordnet. Wenn die Auswertung fehlschlägt, zeigt EGL eine Fehlernachricht an.
- MsgTable
- Enthält Nachrichten, die ein Programm möglicherweise während der Ausführung
anzeigen muss. Die Mechanismen für die Anzeige der Laufzeitnachrichten sind eine
Funktion der jeweiligen UI-Technologie. Dieser Typ von Datentabelle (DataTable) hat einen Namen
in folgendem Format:
- Ein aus ein bis vier Zeichen bestehendes Präfix (z. B. "MT1")
- Ein dreistelliger Code für die Landessprache (siehe den Anhang "Landessprachencodes").
- rangeChkTable
- Enthält Informationen in der ersten und zweiten Spalte, die mit der Benutzereingabe verglichen werden. Die Eingabe des Benutzers muss mit einem Wert in mindestens einer Datentabellenzeile übereinstimmen, der in der ersten oder zweiten Tabellenspalte enthalten ist. (Diese Bereichsangabe gilt einschließlich. Die Eingabe des Benutzers ist gültig, wenn sie mit einem Wert in einer beliebigen Zeile übereinstimmt, der in der ersten oder zweiten Tabellenspalte enthalten ist.)
Datentabelle verwenden
strTest = myDataTable.column3[4];
In diesem Beispiel enthält die STRING-Variable strTest den Wert aus Spalte 3, Zeile 4 der Datentabelle.
Beispiele
DataTable myErrorMessages type MsgTable
{ shared = yes }
msgNum INT;
msgText char(30);
{ contents = [
[ 101, "Datei nicht gefunden" ] ,
[ 102, "Lesefehler" ] ,
[ 103, "Schreibfehler" ] ]
}
end
Function displayError(index INT in)
strTest =
formatNumber(myErrorMessages.msgNum[index]) +
" " +
myErrorMessages.msgText[index];
sysLib.writeStdout(strTest);
end
102 Lesefehler
DataTable myDataTable type basicTable
{ shared = yes }
10 myColumn1 CHAR(10);
15 Column1A CHAR(5);
15 Column1B CHAR(5);
10 myColumn2 CHAR(10);
10 myColumn3 CHAR(10);
{ contents = [
[ "ABCDEFGHIJ", "row1 col2", "row1 col3" ] ,
[ "KLMNOPQRST", "row2 col2", "row2 col3" ] ,
[ "1234567890", "row3 col2", "row3 col3" ] ] }
end
writeStdOut(myDataTable.Column1B[1]); // zeigt FGHIJ an
In den meisten Umgebungen können Sie den Inhalt einer Datentabelle (DataTable) während der Ausführung ändern. Änderungen, die während der Ausführung durchgeführt werden, sind für alle Programme sichtbar, die Zugriff auf die Datentabelle (DataTable) haben. Sie bleiben erhalten, bis die Datentabelle entladen wird. Die Möglichkeit, diese Änderungen vorzunehmen, und die Sichtbarkeit dieser Änderungen für andere Programme in der Ausführungseinheit wird vom Zielsystem und der Eigenschaft shared beeinflusst. Das Entladen der Datentabelle (DataTable) wird vom Zielsystem und der Eigenschaft resident beeinflusst. Weitere Informationen finden Sie in DataTable-Eigenschaften.
DataTable myConstants type basicTable
10 myConstant1 INT;
10 myConstant2 CHAR(10);
{contents = [ [ 0, ""]]} // einzelne Zeile mit Anfangswerten
end
Anschließend könnten Sie die Datentabelle (DataTable)
über eine Datenbank oder Datei während der Ausführung ändern, wie
in folgendem Beispielcode gezeigt wird:get constantInfo;
myConstants.myconstant1[1] = constantInfo.myconstant1;
myConstants.myconstant2[1] = constantInfo.myconstant2;
Der Vorteil
dieses Verfahrens gegenüber dem Deklarieren von Konstanten in Ihrem Programm liegt darin,
dass Sie nur die Datenbank aktualisieren müssen, wenn sich die Daten ändern.
Die Konstanten in den einzelnen Programmen müssen nicht geändert werden.
Abhängig von der Umgebung kann diese Verwendung der Datentabelle (DataTable)
eine bessere Leistung ermöglichen als die Verwendung einer Bibliothek oder Datenbank. Beispiel: In CICS können Sie die Datentabelle (DataTable)
als resident definieren und sie während des Starts für eine CICS-Region
initialisieren.Kompatibilität
| Plattform | Problem |
|---|---|
| COBOL-Generierung | DataTable-Namen haben eine maximale Länge von sieben Zeichen. |
| JavaScript-Generierung | DataTable wird nicht unterstützt. |
| JSF-Handler | Einfügungen für Nachrichten in einer Datentabelle (DataTable) des Typs msgTable werden unterstützt. Die erste Einfügung ist {0}. |
| Text-UI | Einfügungen für Nachrichten in einer Datentabelle (DataTable) des Typs msgTable werden nicht unterstützt. |
| Webtransaktionen | Einfügungen für Nachrichten in einer Datentabelle (DataTable) des Typs msgTable werden unterstützt. Die erste Einfügung ist {1}. |