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

Syntaxdiagramm für einen DataTable-Abschnitt
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

Sie können einen DataTable-Abschnitt mit einem der folgenden Stereotypen anpassen:
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").
Für amerikanisches Englisch lautet der Name der Tabelle "MT1ENU". Sie können eine Datentabelle (DataTable) einem Programm zuordnen, wenn Sie das Präfix für die Programmeigenschaft msgTablePrefix angeben.
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

Nach dem Erstellen der Datentabelle (DataTable) können Sie EGL-Code schreiben, um auf die Informationen in der Tabelle zuzugreifen. Im Unterschied zu vielen anderen EGL-Abschnitten erstellen Sie hier keine Variable auf der Basis des DataTable-Abschnitts. Vielmehr verweisen Sie auf die Datentabelle und verwenden dazu den Namen, den Sie dem Abschnitt zugeordnet haben. Verweisen Sie unter Verwendung von Punktsyntax auf eine Spalte und verwenden Sie dazu einen der Namen, die Sie in der Spaltendeklaration zugeordnet haben, gefolgt von einem Index für die Zeilennummer, wie in folgendem Beispiel gezeigt wird:
strTest = myDataTable.column3[4];

In diesem Beispiel enthält die STRING-Variable strTest den Wert aus Spalte 3, Zeile 4 der Datentabelle.

Beispiele

Das folgende Beispiel zeigt einen DataTable-Abschnitt:
DataTable myErrorMessages type MsgTable
  { shared = yes }
  msgNum INT;
  msgText char(30);

  { contents = [  
  [ 101, "Datei nicht gefunden" ] ,
  [ 102, "Lesefehler" ] ,  
  [ 103, "Schreibfehler" ] ]
  } 
end
Sie können auf diese Tabelle von einem Programm aus zugreifen, indem Sie folgenden Code verwenden:
Function displayError(index INT in)
  strTest = 
    formatNumber(myErrorMessages.msgNum[index]) +
    "    " +
    myErrorMessages.msgText[index];
  sysLib.writeStdout(strTest);
end
Bei einem Indexwert 2 zeigt die Funktion die folgende Fehlernachricht an:
102   Lesefehler 
Sie können eine Unterstruktur für die Spaltendeklarationen angeben, wie in folgendem Beispiel gezeigt wird:
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
Sie können anschließend auf diese Daten in einem Programm zugreifen, das die Tabelle verwendet, wie in folgendem Beispiel gezeigt wird:
  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.

Sie ändern den Inhalt einer Datentabelle (DataTable) normalerweise während der Ausführung, wenn Sie mit relativ konstanten Daten arbeiten (z. B. ein Parameter, der sich nur einmal im Jahr ändert), die aber in zahlreichen Programmen verwendet werden. Das folgende Beispiel zeigt eine solche Datentabelle (DataTable):
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

Tabelle 1. Überlegungen zur Kompatibilität für DataTable
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}.

Feedback