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

  • das Feld in einer Anweisung vorkommt, oder
  • das Feld Domänenangaben (88-er Bedingungen) hat, und irgendwelche dieser Angaben direkt in einer Anweisung verwendet werden.

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

  • das Feld verwendet wird und
  • das Feld entweder strukturrelevant ist, oder mindestens eine Verwendung nicht eine Änderung sondern eine Nutzung des Inhaltes darstellt.

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

  • ein übergeordnetes Feld direkt änderbar ist, oder
  • ein untergeordnetes Feld direkt änderbar ist, oder
  • das Feld ein anderes Feld redefiniert, das direkt oder indirekt änderbar ist, oder
  • es Redefinitionen auf das Feld gibt, die direkt oder indirekt änderbar sind.

Änderungen durch Initialisierung

Ein Feld wird als änderbar durch Initialisierung betrachtet, wenn

  • das Feld in einer INITIALIZE-Anweisung verwendet wird, oder
  • ein übergeordnetes Feld durch Initialisierung verändert werden kann.

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

  • ein Datenfeld oder seine übergeordnete Definition in einer Redefinition verwendet wird, oder
  • eine übergeordnete Definition eine OCCURS-Angabe hat, oder
  • eine übergeordnete Definition im Code für andere Zwecke als eine INITIALIZE Anweisung verwendet wird, es sei denn, die übergeordnete Definition ist ein potentielles Datum-Uhrzeit Feld oder die übergeordnete Definition kann als Konstante betrachtet werden, oder
  • das Feld selbst eine Gruppe darstellt und eine OCCURS-Angabe besitzt, oder
  • das Feld selbst eine Gruppe darstellt und im Code für andere Zwecke als eine INITIALIZE Anweisung verwendet wird, es sei denn, die Gruppe ist ein potentielles Datum-Uhrzeit Feld oder die Gruppe kann als Konstante betrachtet werden, oder
  • ein untergeordnetes Element wird für eine Redefinition verwendet.

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

  • das Feld strukturrelevant ist, und
  • das Übergeordnete Feld nicht strukturrelevant ist.

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

  • das Feld weder direkt noch indirekt verändert werden kann, und
    • das Feld keine untergeordneten Elemente hat und mit einem Initialwert per VALUE deklariert wurde, oder
    • das Feld zwar untergeordnete Elemente hat, diese aber allesamt nach den vorigen Kriterien konstant sind.

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

  • das Feld nicht strukturrelevant ist, und
  • das Feld nicht als Konstante behandelt werden soll, und
  • das Feld nicht namenlos (FILLER) ist, außerdem keine Domain-Angaben (88-er Bedingungen) hat, und
  • das Feld Speicherplatz beansprucht, und
  • das Feld keine Gruppe ist, es sei denn, die Gruppe ist ein potentielles Datumsfeld, und
  • das Feld eine konkrete Variable ist und seine Inhalte nicht aus einer andere Quelle stammen (siehe indirekte Variablen) und
  • das Feld eine Instanz einer als COBSTRUCT angegebenen Copybook Klasse ist.

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

  • das Feld eine Gruppenstufe darstellt, und
  • das Feld die Kriterien für eine lokale Variable erfüllt, und
  • ein ggf. installiertes AddIn die Kriterien geprüft hat und die Eignung als Datumsfeld bestätigt hat.

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

  • das Feld in keiner Code-Anweisung verwendet wird, und
  • das Feld nicht redefiniert wird, und
  • das Feld keine OCCURS-Angabe hat.
  • das Feld keine Instanz einer als COBSTRUCT angegebenen Copybook Klasse ist.

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

  • das Feld Domänen-Angaben (88-er Bedingungen) hat, und
  • kein übergeordnetes Feld direkt verändert werden kann, und
  • alle Verwendungen beschränkt sind auf SET-Anweisungen, Bedingungen und Wahr/Falsch-Ausdrücke.

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

  • das Feld Kandidat für eine enumerative Variable ist, und
  • der Wert irgendeiner konkret benutzten Domäne das Zutreffen einer anderen Domäne impliziert, und
  • nicht mehr als 64 Bits für die Umsetzung benötigt werden.

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

  • das Feld ein Kandidat für eine enumerative Variable ist, und
  • die Anzahl der definierten Domänen genau 2 ist.

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
cobmig:datadcls · Zuletzt geändert: 26.04.2022 11:11

Copyright © 1992-2024 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum