Eine Datenstruktur ist eine Gruppierung von unterschiedlichen Datenelementen und Datengruppen. Datenelemente und -gruppen werden hier zusammenfassend als Datenstrukturkomponenten bezeichnet.
Eine Datenstruktur bildet die Basis für einen Objekttyp, der wiederum als Basis für die Definition von TAA-Objekten (Parameterobjekte, globale Objekte oder lokale Objekte) dient.
Die untenstehende Datenstruktur enthält zuoberst eine Datengruppe mit zwei Datenelementen, gefolgt von 6 Datenelementen, die direkt der Struktur zugeordnet sind.
In dem Reiter „Datenstruktur“ werden die Standardangaben zu TAA-Objekten angezeigt; diese Ansicht ist identisch mit anderen TAA-Tools (z.B. Modulansicht in InterfEdge) und wird hier nicht nochmals gezeigt. Entsprechendes gilt für den Reiter „Konfigurationsbeschreibung“.
Die Struktur wird in dem Reiter „Struktur“ dargestellt und kann dort - sofern das Objekt nicht schreibgeschützt ist - auch bearbeitet werden:
Im Navigationsbaum (linke Seite) werden alle Datenkomponenten aufgelistet, die in DataStrEdge bekannt sind, also auch die in der Datenstruktur bekannten Elemente, Gruppen, Datentypen und
Die Baumansicht rechts zeigt die Struktur, wobei über die darunter stehende Combobox „Felder anzeigen mit“ ausgewählt werden kann, in welchem Format die Bestandteile im Baum angezeigt werden sollen.
In der Zeile darüber steht die errechnete Gesamtlänge der Datenstruktur sowie die Gesamtzahl der Felder und Gruppen in der Struktur.
Links davon werden die Eigenschaften des aktuell im Baum selektierten Feldes angezeigt. Darunter gibt es wiederum mehrere Reiter:
Jede Datenstruktur beginnt mit der Gruppenstufe „REC“, die alle weiteren Komponenten enthält.1) Diese Gruppenstufe kann nicht entfernt oder anderweitig bearbeitet werden. Die Gesamtlänge dieser Gruppenstufe ist identisch mit der Gesamtlänge der Datenstruktur. Diese Gruppenstufe dient dazu, die Datenstruktur in den Programmen als eine Einheit referenzieren zu können, z.B. in COBOL als <objektname>-REC.
Das Kontextmenü zeigt alle Bearbeitungsmöglichkeiten auf:
Nach jeder Bearbeitung wird die Anzahl Felder und Länge der Datenstruktur sofort neu ermittelt. Dies kann im Zweifelsfall auch über die Auswahl Datenstruktur neu berechnen erzwungen werden.
Speziell bei großen Datenstrukturen, die viele Datengruppen enthalten, kann es der Übersichtlichkeit dienen, Alle Gruppen zusammenzuklappen und ggf. später wieder aufzuklappen.
Änderungen an Datenstrukturen werden für die Laufzeitumgebung erst wirksam, wenn die Datenstruktur neu generiert und in der Ressourcen-Dll zur Verfügung gestellt wurde! Dies geschieht i.d.R. über die zentral festgelegten Konfigurations-Einstellungen für die Datenstruktur.
Dieser Befehl verzweigt in DataStrEdge zu dem aktuell selektieren Datenelement und versucht, dieses ohne Schreibschutz zu öffnen, um seine Bearbeitung zu ermöglichen.
Wenn eine Datenstruktur geöffnet wird, werden in DataStrEdge auch alle darin enthaltenen Datenelemente und -Gruppen angelegt und im Baum angezeigt. Allerdings sind zu diesem Zeitpunkt nur Informationen bekannt, die über die Datenstruktur übermittelt werden, und das Komponenten sind immer schreibgeschützt. Um sie bearbeiten zu können, ist es deshalb notwendig, sie zuvor aus Rochade komplett und ohne Schreibschutz zu laden. Dies kann über den Menüpunkt „Aktualisieren“ (Kontextmenü oder Toolbar) veranlasst werden.
Die Auswahl Datenelement hinzufügen öffnet den Suchdialog, wo Sie ein oder mehrere hinzuzufügende Datenelemente oder Datengruppen auswählen können. Die gewählten Elemente bzw. Gruppen werden unterhalb der aktuell selektierten Komponente eingefügt.
Außerdem ist es möglich, zuvor aus einer anderen Struktur kopierte (Datenelemente kopieren bzw. ausschneiden) Datenelemente aus der Zwischenablage in die aktuelle Datenstruktur einzufügen .
Um Namenskonflikte zu vermeiden, darf jedes Datenelement und jede Datengruppe in einer Datenstruktur nur ein Mal vorhanden sein. Dies gilt auch für Datenelemente, die in einer Datengruppe enthalten sind: Sie dürfen nicht nochmals einzeln oder als Bestandteil einer anderen Datengruppe hinzugefügt werden.
Die Auswahl Filler hinzufügen fügt ein nicht benanntes Datenelement hinzu (in Cobol: FILLER), welches als Platzhalter für eine bestimmte Länge dient, aber im Programm nicht referenziert werden kann. Hier ist die Angabe der Länge erforderlich:
Die Auswahl Datenelement löschen löscht die selektierte Komponente aus der Struktur.
Die Auswahl Datenelement abwärtskompatibel löschen entfernt die selektierte Komponente zwar namentlich aus der Struktur, setzt aber einen Platzhalter an der Stelle ein, um Verschiebungen bei den nachfolgendenden Komponenten zu vermeiden. Dadurch gibt es keine Konflikte, wenn die neu erstellte Datenstruktur an ein Modul übergeben wird, welches noch mit der älteren Datenstruktur arbeitet; das Feld kann aber in Modulen, die mit der geänderten Datenstruktur arbeiten, nicht mehr referenziert werden.
Kompatibel gelöschte Element werden in der Struktur kursiv dargestellt:
Wenn eine auf diesem Weg abwärtskompatibel gelöschte Komponente doch wieder benötigt wird, kann sie über die Auswahl „gelöschte Datenelemente wieder einfügen“ reaktiviert werden.
Die Auswahl Kompatibel gelöschte Felder ausblenden entfernt diese aus der Baumansicht. Die Felder werden trotzdem weiterhin bei der Ermittlung der Strukturlänge sowie der Startpositionen der Folgefelder berücksichtigt. Im Falle scheinbarer Unstimmigkeiten bei Länge oder Startpositionen empfiehlt es sich, die Felder mit anzeigen zu lassen.
Datenelemente und Datengruppen können innerhalb einer Datenstruktur verschoben werden.
Hierfür die zu verschiebenden Komponenten selektieren, und nach oben oder unten bewegen
Über Menü oder Toolbar werden die selektierten Komponenten jeweils um eine Position verschoben.
Beim Ziehen mit der Maus wird die jeweils erreicht neue Einfügeposition durch eine waagerechte Linie zwischen zwei Elementen angezeigt:
Es ist nicht möglich, Datenelemente in eine Datengruppe hinein zu verschieben.
Ebenso können Datengruppen nur als Ganzes verschoben werden, nicht einzelne Elemente daraus.
Die allgemeinen Eigenschaften eines Datenelements oder eine Datengruppe, wie Länge und Format, sind innerhalb der Datenstruktur nicht änderbar. Was aber hier angepasst werden kann, ist die Art und Weise der Verwendung eines Datenelements bzw. einer Datengruppe:
Diese Angabe legt fest, wie oft die Datenkomponente vorkommt2). Bei einer Datengruppe wird die gesamte Datengruppe so oft wie angegeben wiederholt.
Occurs-Angaben können bis auf 3 Ebenen geschachtelt werden, d.h. die Struktur enthält Datengruppe1 mit Wiederholung, diese enthält Datengruppe2 mit Wiederholung, diese enthält Datengruppe/element3 mit Wiederholung.
Die Angabe „erweiterte Systemlänge“ im rechten Reiter enthält die Gesamtlänge der Komponente mit allen enthaltenen Elementen/Gruppen und deren Wiederholungen. Die erweiterte Gesamtlänge des ersten Elements in der Abbildung (einfache Länge = 20) wäre 60, daraus ergibt sich die Anfangsposition der markierten Gruppe. Die Anfangsposition von Komponenten gibt jeweils die Anfangsposition des ersten Vorkommens der Komponente an, die weiteren Vorkommen verschieben sich um die eigene Länge bzw. die Länge der Gruppe, in der sie enthalten sind.
Hiermit kann der Bereich, der durch ein Datenelement/eine Datengruppe belegt wird, in einem anderen Format redefiniert werden3). Zum Beispiel kann eine lange Zeichenfolge redefiniert werden mit einer Datengruppe, die eine Unterteilung in einzelne Felder vornimmt, oder ein nummerisches Feld mit einer Zeichenfolge, um auch nicht-nummerische Werte ohne Laufzeitfehler abfragen zu können.
Es ist möglich, eine Komponente mit mehreren anderen Komponenten zu redefinieren. Eine Redefinition kann selbst auch wieder redefiniert werden. Eine Komponente, die eine andere Komponente redefiniert, steht in der Struktur immer direkt unter der redefinierten Komponente.
Die Länge des redefinierten Bereichs entspricht immer der Länge der längsten Komponente.
Hier ein Beispiel für Redefinitionen von Datenelementen:
Die erweiterte Systemlänge des markierten Elements ist 20, obwohl die Länge des Elements eigentlich 18 ist. Wenn das Element abgefragt wird, wird jedoch nur eine Länge von 18 Zeichen zurückgegeben.
Im folgenden Beispiel wird eine Datengruppe mit zwei numerischen Feldern mit einem nummerischen Feld gleicher Länge redefiniert. Hierdurch ist es möglich, über die Redefinition den Inhalt der Datengruppe als eine Zahl abzufragen. Wenn der Inhalt der Datengruppe über die Gruppenstufe abgefragt wird, würde eine Zeichenfolge geliefert werden.
Zusatzangaben
Bei einer Redefinition sind zusätzliche Angaben möglich, die ausschließlich für die Konvertierung von Datenstrukturen (z.B. von ASCII nach EBCDIC) benötigt werden. Diese Felder sollten nur verwendet werden, wenn es tatsächlich für diesen Zweck erforderlich ist:
* Als Konvertierungs-Typ kann bei einem redefinierten Feld ein Feld aus derselben Datenstruktur angegeben werden, in dem der Typ angegeben wird, mit dem das Feld konvertiert werden soll.
* Bei den redefinierenden Feldern wird pro Feld als Konvertierungs-Wert angegeben, welche Typangabe aus dem Typ-Feld für diese Redefinition zutrifft.
Aus der Art, wie eine Datenkomponente in einer Struktur verwendet wird, ergeben sich davon abhängige Eigenschaften; diese stehen in dem Bereich „abgeleitete Informationen“:
Mit Klick auf die Link-Felder (Kind, Nachfolger usw.) wird in der Strukturansicht das betreffende Feld ausgewählt, damit man so durch die Struktur navigieren kann (speziell bei umfangreichen Strukturen); es wird an dieser Stelle nicht die betreffende Komponente geöffnet.
DataStrEdge bietet eine eigene Suchfunktion, um innerhalb von Datenstrukturen nach bestimmten Feldern suchen zu können. Sie finden diese im Kontextmenu des Strukturbaums als Suche in Datenstruktur.
In dem Suchdialog können Sie festlegen, nach welchem String in welchen Eigenschaften der Datenelemente gesucht werden soll:
Durchsucht werden können Name, Titel (Langprompt) und Format, Default ist, dass alle diese Eigenschaften durchsucht werden.
Bei einem Treffer wird das gefundene Datenelement im Baum ausgewählt.
Neben „normalen“ Datenstrukturen können in DataStrEdge auch anzeigt werden: