Lade...
 

Enumerationen und diskrete Werte

Enumerationen und diskrete Werte

Enumerationen

Enumerationen sind Werte mit eine Codierung in eine ganze Zahl. Für jeden vorgesehenen Wert existiert ein externer Name als multilinguale Zeichenkette.  
Datentypen für Enumerationen sind ENUMINT, ENUMSHORT und ENUMCHAR.
Für jedes  Datenfeld von einem dieser Enumerations-Typen muss eine Transformationstabelle existieren!

 

Diskrete Werte

Datenfelder von einem beliebigen anderen Typ (Relationen ausgenommen) können mit eine Wertetabelle verbunden werden. Diese Tabelle gibt einzelne Werte vor, ohne dass damit irgend eine Codierung verbunden wäre.
Die Werte der Tabelle können als Vorzugswerte oder auch als die allein zulässigen Werte dieses Datenfeldes verstanden werden. Die Tabelle selbst macht darüber keine Aussage.
Auch hier sind die Werte multilinguale Zeichenketten. Für ein Datenfeld vom Typ einer Basisklasse (z.B. CX_VALUE) ist auf die sprachabhängigen Eingabeformate zu achten.

Beispiel:   T("2,0 Stück", "2.0 pieces")
Für das Editieren derartiger Tabellen in der Datenbank sollten die Funktionen EnterNumeric(), EnterValue(), EnterDate() bzw. EnterTime() benutzt werden (Beispiel). Diese Funktionen führen die Transformation in die verschiedenen sprachabhängigen Darstellungen selbst durch.    

 

Systemweite Tabellen

Allgemein gültige Tabellen enthält das System-Dictionary:

        

Die Tabellen sind immer transient. Sie werden entweder aus der Datenbank geladen - entstehen aus persistenten Objekte der Klasse CX_ENUM_TABLE - oder das ClassiX®-System liest sie aus einer ASCII-Datei (Standard-File ist CLASSIX.NUM; die Beschreibung der Syntax finden Sie hier.).  

 

Individuelle Tabellen pro Objekt

Objekte der Klasse CX_SLOT_ATTRIBUTE (und der davon abgeleiteten Klassen) können eine eigene Tabelle halten. Das dynamische Datenfeld enumTable ist dafür reserviert. Es verweist auf ein Objekt der Klasse CX_ENUM_TABLE. Das darf natürlich ein persistentes Objekt in der Datenbank sein!
Auch die individuelle Tabellen treten in beiden Funktionen auf: sowohl für Enumerationen als auch für die Vorgabe diskreter Werte.

Hinweis: Die Möglichkeit, individuelle Tabellen pro Objekt zu führen, ist system-immanent. Zur Zeit machen jedoch nur die oben genannten Klassen davon Gebrauch.  

 

Die Existenz einer Tabelle steuert die Gestalt, die ein Oberflächen-Objekt Auto annimmt:

  • ein Enumerations-Datentyp: Auto mutiert zu Enumeration
  • andere Datentyp: Auto mutiert in eine Combobox

Hinweis: Auch das durch die Anweisung OboxEdit generierte Fenster benutzt Auto-Widgets!

 

Beschränkung auf die vorgegebenen Werte

Als Enumerations-Daten können keine Werte eingegeben werden, die von der Vorgabe durch die Tabelle abweichen.

Eine analoge Beschränkung kann auch für die anderen diskrete Eingabewerte gefordert werden. Hierfür ist das dynamische Datenfeld limitedValues reserviert. Es ist eine Enumeration mit zwei Werten: 0 - beliebige Werte, 1 - nur Werte aus der Tabelle sind erlaubt.
Objekte der Klasse CX_SLOT_ATTRIBUTE (und der davon abgeleiteten Klassen) steuern mit dem Datenfeld limitedValues die Eingabemöglichkeiten einer Combobox.  

 

Hinweis: Auch diese Möglichkeit ist system-immanent, wird aber zur Zeit nur durch oben genannten Klassen genutzt.

 

Hinweis: Die Klasse CX_SLOT_ATTRIBUTE kann die zulässigen Eingabewerte für das Attribut mit Constraints einschränken. Für die Formelausdrücke der Constraints steht die Funktion ::ElementOf(attribute) zur Verfügung, als Test für das Enthaltensein des Attribut-Wertes in der Tabelle.