Inhaltsverzeichnis

,

Interop Klassen

Achtung - diese Seite ist in noch Bearbeitung und beschreibt eine Funktionalität der noch geändert werden kann!

COBOL Datendefinitionen können nicht so ohne weiteres auf C# Datentypen abgebildet werden. Felder werden automatisch abgeschnitten, Daten werden implizit konvertiert, usw., usw.

Deswegen steht in der Namespace TeamWiSE.Runtime.Interop eine Reihe von (generischen) Klassen zu Verfügung, welche verwendet werden können um COBOL Datendefinitionen in C# abzubilden.

Für elementare Datendefinitionen wird zwischen Alphanumerisch, Alphabetisch und Numerisch unterschieden. Daneben sind für USAGE INDEX und USAGE POINTER bzw. USAGE FUNCTION-POINTER noch spezielle Klassen (Index und Pointer) vorgesehen. Für komplexe Datendefinitionen wie Klassen, Gruppen, Redefines, Filler, Arrays und Domänen (elementare Datendefinitionen mit Bedingungsnamen, e.g. 88-Stufen) sind eigene Klassen definiert.

Je nach Datentyp gibt es eine generische Klasse, der die COBOL-Komplexität für den Anwendungsentwickler übernimmt, sodass dies nicht im Anwendungscode berücksichtigt werden muss. Als Typargument für die jeweilige generische Klasse muss eine Klasse mit der Formatbeschreibung übergeben werden. Diese Formatbeschreibung enthält die Details zu dem Datenelement, die benötigt werden, um die COBOL-Spezialitäten zu berücksichtigen.

Hier sehen Sie 2 Beispiele, einmal für ein PIC X(10) Feld, und einmal für ein PIC S9(10)V9(5) COMP

sealed class StringFormat : AlphanumericFormat
{
	public StringFormat() : base(length:10) {}
}
 
sealed class BetragFormat : NumericFormat
{
	public BetragFormat() : base(predecimals:10, decimals:5, isSigned:true, usage:UsageEnum.Limited) {}
}

Je nach Datentyp sind unterschiedliche Formatangaben definiert. Welche Formatangeben gemacht werden müssen/können, ist bei dem jeweiligen Datentyp beschrieben.

Für die Definition eines Datenelementes wird eine Instanz der entsprechende generische Klasse angelegt. Im Anwendungscode werden die Variablen dann genauso genutzt, wie man eine Variable vom Typ string oder double verwenden würde:

Numeric<BetragFormat> betrag = new Numeric<BetragFormat>();
...
betrag = Snlppme.PmePraeBt;
if (betrag > 0) {
...

Dazu implementieren diese Klassen eine Reihe von Cast- und Vergleichsoperatoren. Diese sind bei der jeweilige Klasse beschrieben.

Gemeinsame Eigenschaften/Methoden

public abstract class DataElement;
public abstract class DataFormat;

Alle generischen Klassen sowie auch die Formatbeschreibungen basieren auf gemeinsamen Basisklassen (DataElement bzw. DataFormat). Die Basisklasse DateElement implementiert die Interfaces IEquatable<T>, IComparable<T>, IComparable, IConvertible, und implementiert entsprechenden Vergleichsoperatoren.

Nachfolgend sind die Formatangaben, Methoden, Eigenschaften und Operatoren beschrieben, die für alle gleich sind. Allerdings kann es sein, das bestimmte Methoden und Operatoren bei den abgeleitete Klassen nicht verwendet werden können. Dies ist dann bei der jeweilige abgeleitete Klasse beschrieben.

Formatangaben

InitialValue

public object InitialValue { get; }

Abweichender Initialwert. Dieser wird bei der Neuanlage einer generischen Klasse wie auch von der Methode SetInitialValue verwendet. Obwohl hier der C# Typ object verwendet wird, wird bei der Defnition eine Formatbeschreibung eines bestimmten C#-Typs erwartet, z.B. string für Alphanumerisch bzw. Alphabetisch, oder IntPtr für Pointer.

DisplayFormat

public String DisplayFormat { get; }

Enthält die, aus der Datendeklaration abgeleitete Formatieranweisungen welche verwendet werden, um den Inhalt des Datenelementes anzuzeigen.

Methoden

Initialize

public void Initialize()

Initialisiert das Datenelement mit seinem Standartwert. e.g. String.Empty für Alphanumeric bzw. Alphabetic, oder 0 für Numeric

SetInitialValue

public void SetInitialValue()

Initialisiert das Datenelement mit seinem Initialwert. In der Regel handelts es sich dabei um den Standwert, welche auch beim Initialize verwendet wird, ein abweichender Wert kann aber als InitialValue bei der Formatangabe festgelegt werden.

IsNumeric

public bool IsNumeric();

Prüft, ob die Daten ausschließlich aus den Ziffern 0 bis 9 sowie ein führendes oder nachfolgendes Minus- oder Pluszeichen besteht.

Diese Methode wird für die Umsetzung der IS NUMERIC Bedingung verwendet.

IsAlphabetic

public bool IsAlphabetic();

Prüft, ob die Daten ausschließlich aus Groß- oder Kleinbuchstaben A bis Z sowie Leerzeichen besteht.

Diese Methode wird für die Umsetzung der IS ALPHABETIC Bedingung verwendet.

IsAlphabeticLower

public bool IsAlphabeticLower();

Prüft, ob die Daten ausschließlich aus Kleinbuchstaben a bis z sowie Leerzeichen besteht.

Diese Methode wird für die Umsetzung der IS ALPHABETIC LOWER Bedingung verwendet.

IsAlphabeticUpper

public bool IsAlphabeticUpper();

Prüft, ob die Daten ausschließlich aus Großbuchstaben A bis Z sowie Leerzeichen besteht.

Diese Methode wird für die Umsetzung der IS ALPHABETIC UPPER Bedingung verwendet.

Parse

public bool Parse(string value);

Bestückt die Felder der Gruppe mit dem Inhalt der Zeichenfolge. Eine zu lange Zeichenfolge wird ohne Fehlermeldung abgeschnitten. Es erfolgt hier keine Prüfung von Domänen - hierfür bitte die Parse-Methode an der Felddefinition verwenden.

IsDisplayable

public bool IsDisplayable();

Gibt an ob die Gruppen Darstellbar ist .

Eigenschaften

Size

public static int Size { get; }

Liefert die Anzahl Bytes welche für dieses Datenelement benötigt werden. Diese Eigenschaft wird u.A. für die Umsetzung der LENGTH OF-Abfrage verwendet.

Bytes

public byte[] Bytes { get; set; }

Bietet Zugriff auf die Daten für das Datenelement, um diese z.B. für ein CALL USING zu übergeben, bzw. zum Bestücken, wenn Daten übergeben werden.

Operatoren

(Un)Equals

static bool operator ==(DataElement left, DataElement right);
static bool operator !=(DataElement left, DataElement right);

Vergleicht den Inhalt von beide Argumente. Wenn für beide Argumente null übergeben wird, werden sie als gleich angesehen, wenn nur für eine von beiden ''null' übergeben wird, als ungleich.