Inhaltsverzeichnis

Datendeklarationen

Sämtliche Datendeklarationen werden nach der hier aufgeführten Syntax erkannt. Zusätzlich werden die deklarierten Datenelemente statisch nach verschiedenen Gesichtspunkten analysiert, um die Code-Generatoren bei ihrer Arbeit zu unterstützen.

Verwendung

Die Datendeklarationen werden auf Verwendung geprüft. Dabei wird festgestellt, ob das Datenfeld von irgendeiner Anweisung in irgendeiner Form verwendet wird. Ein Feld wird verwendet, wenn

Für alle in der DATA DIVISION erkannten Datendeklarationen gilt, dass bei der Generierung des Migrationscodes nur solche Deklarationen berücksichtigt werden, die auch tatsächlich im konkreten COBOL Code verwendet werden. Die deklarierten aber nicht-verwendeten Datenfelder werden somit ignoriert.

Referenziert

Ein Feld wird referenziert, wenn

Bei der Generierung können für Anweisungen, die Änderungen an Felder bedeuten, welche Felder jedoch nicht referenziert werden, unterdrückt werden.

Direkte Änderungen

Ein Feld wird als direkt änderbar betrachtet, wenn das Feld in irgendeiner Anweisung modifiziert wird.

Indirekte Änderungen

Ein Feld wird als indirekt änderbar betrachtet, wenn

Änderungen durch Initialisierung

Ein Feld wird als änderbar durch Initialisierung betrachtet, wenn

Strukturrelevanz

Die Datendeklarationen werden auf Strukturrelevanz geprüft. Diese Prüfung stellt fest, ob das Datenfeld einen Beitrag oder eine Abhängigkeit zu oder von einer übergeordneten oder anderen Speicherstruktur darstellt. Ein Feld ist strukturrelevant, wenn

Strukturrelevante Felder können nicht durch einfache Deklarationen im zu generierenden Code umgesetzt werden. Sie müssen mit zusätzlichem Aufwand behandelt werden, da Abfragen oder Änderungen Auswirkungen auf andere Felder haben können.

Strukturwurzel

Eine Datendeklaration kann eine Strukturwurzel bilden. Solche Elemente sind der Einstieg in eine komplexeren Struktur mit gegenseitig voneinander abhängigen Feldinhalten. Ein Feld ist eine Strukturwurzel, wenn

Konstanz

Die Datendeklaration werden auf potentielle Konstanz geprüft. Ein potentiell konstantes Feld kann als compile-time Konstante im migrierten Code erzeugt werden. Ein Feld kommt für eine solche konstante Deklaration in Betracht, wenn

Ein potentiell konstantes Feld wird nur dann als Konstante erzeugt, wenn das Feld nicht strukturrelevant ist.

Lokale Variablen

Die Datendeklarationen werden auf ihre Eignung als lokale Variable geprüft. Ein Feld kann als lokale Variable innerhalb der Bausteinimplementierungsklasse erzeugt werden, wenn

Datumsfelder

Die Datendeklarationen werden auf der Eignung als Datumsfelder geprüft. Ein Feld kann mit dem Datentyp für Datums- oder Uhrzeitangaben erzeugt werden, wenn

Die Prüfung findet somit also größtenteils im AddIn statt, da die Erkennung für die Eignung als Datumsfeld größtenteils eine Sache der Namensgebungskonventionen in Kombination mit den Datenformaten ist.

Anonyme Felder

Die Datendeklarationen werden auf potentiell anonyme Felder geprüft. Ein potentiell anonymes Feld braucht keinen wirklichen referenzierbaren Namen. Ein Feld ist potentiell anonym, wenn

Potentiell anonyme Felder werden mit dem Prefix Filler und einer eindeutigen Nummer erzeugt, wenn diese strukturrelevant sein sollten.

Enumerative Variable

Eine Datendeklaration wird als Kandidat für die Umsetzung in eine enumerativen Variable betrachtet, wenn

Der Name für den Typ der enumerativen Variablen wird gebildet aus dem Feldnamen, gefolgt durch Enum. Diese Namensgebung kann durch ein ggf. installiertes AddIn beeinflusst werden. Der Standardwert für die Variable ist die Domänenangabe, bei der einer der definierten Werte dem Standardwert für den Datentyp des ursprünglichen Feldtypes entspricht, bspw. SPACE oder ZERO.

Bitweise Variable

Ein Feld wird als Kandidat für eine bitweise Variable betrachtet, wenn

Man beachte, dass bei dieser Prüfung nur die tatsächlich verwendeten Domänen Beachtung finden, nicht alle definierten.

Boolesche Variable

Eine Datendeklaration wird als Kandidat für die Umsetzung in eine booleschen Variable betrachtet, wenn

Der Name für die boolesche Variable wird abgeleitet aus der Domäne, die als true-Wert gelten soll. Der true-Werte der Domäne wird angenommen für die Domäne, die einen der folgenden Werte hat: 1, y, Y, J oder j. Wenn keine der Domänen einen solchen Wert hat, wird die Domäne als true-Wert genommen, die am häufigsten im Code verwendet wird.

Initialwert

Der Initialwert einer Variablen wird aus der VALUE-Angabe der Deklaration abgeleitet. Bei Konstanten jedoch kann der Initialwert für die Konstante abgeleitet sein aus einer Konkatenierung der untergeordneten Elementen oder aus dem Wert einer Redefinition oder übergeordneten Gruppe, und damit einen dementsprechenden Ausschnitt aus dem Initialwert gleichen.

Symbolische Konstanten

Manche Datenfelder können in Wirklichkeit eine symbolische Konstante sein. Ein ggf. installiertes AddIn kann Einfluss darauf nehmen, welche Variablen in Wirklichkeit für welche Datenfelder welchen Wert darstellen sollen.

indirekte Variablen

Manche Datenfelder können in Wirklichkeit den Wert einer anderen Laufzeitvariable darstellen. Ein ggf. installiertes AddIn kann Einfluss darauf nehmen, welche Variablen in Wirklichkeit mit welchen Laufzeitdaten verbunden werden sollen.

Formatanweisungen

Die Picture Klausel wird auf Sonderzeichen geprüft, um daraus ggf. Formatanweisungen erstellen zu können.

Dictionary

Die Deklaration wird als Wörterbuch(Dictionary) erzeugt, wen es nur eine Sortierungsangabe und zwar Aufsteigend hat.1)

Datenelemente vs. Datengruppen

Alle Datenelemente des Objektes können direkt auf erster Ebene angesprochen werden, auch wenn diese unter einer Gruppenstufe definiert wurden. Ebenso können auch die Gruppenstufen direkt angesprochen werden. Wenn eine Gruppenstufe einen als Zeichenfolge darstellbaren Inhalt besitzt, kann diese auch insgesamt abgefragt, nicht jedoch verändert werden. Die Darstellung der Gruppenstufe passiert explizit über die ToString Methode.

// explizite Nutzung von ToString um den Inhalt der Gruppenstufe darzustellen
var WKdubAdrAufbereit = TPruef64.ToString();

Die Datenelemente einer Gruppenstufe können auch unterhalb der Gruppe referenziert werden. So wird in den nachfolgenden Codezeilen immer das gleiche Feld angesprochen:

var monat = this.WKdubNatGebD0.WKdubNatGebMm;
var monat = this.WKdubNatGebMm;

Wenn Datenelemente mit gleichem Namen in mehreren Gruppenstufen vorkommen, sind solche Felder, um Namenskonflikte zu vermeiden, teilweise in den übergeordneten Gruppen nicht verfügbar.

1)
Ab V10.00