Syntax der Enumeration-Transformationstabelle
Eintrag |
|
Bezeichner |
|
Liste |
|
Tabelle |
|
Beispiel
// Zahl Bezeichner Bitmaske
paymentEnum
{
0, T("Überweisung", Remittance), 0xff
1, T(Scheck, Cheque), 0xff
2, T(Bankeinzug, Draft), 0xff
3, T(Bar, Cash), 0xff
}
Mehrere Transformationstabellen können in einem File zusammengefasst werden. Dann muss allerdings ein Sektionsname angegeben sein. Beim Anlegen oder Ändern einer Transformationstabelle muss darauf geachtet werden, mit welchem Typ die Slots angelegt wurden.
Für die nachfolgenden Typen gilt der folgende Werte-Bereich:
Für die nachfolgenden Typen gilt folgender Wertebereich:
INTEGER, ENUMINT: -2.147.483.648 bis 2.147.483.647
SHORT, ENUMSHORT: - 32.768 bis 32.767
CHAR, ENUMCHAR: - 128 bis 127
Werden die Wertebereiche verlassen, dann wird der Eintrag zwar zur Auswahl angeboten, kann aber nicht gespeichert werden.
Eine Tabelle darf auch mehrere Einträge für die gleiche Zahl oder für den gleichen Bezeichner enthalten. Transform wird dann immer den ersten passenden Eintrag verwenden. Enumerationswidgets können dadurch Einträge mit doppelten Bezeichnern enthalten, wobei immer nur der erste auswählbar ist.
Filter
Über die jedem Eintrag zugeordnete Bitmaske kann die Tabelle hierarchisch aufgeteilt werden. Das Enumeration-Windowobjekt zeigt nur die Einträge, die sein internes Filter-Flag auswählt. Letzteres ist mit 0xff initialisiert, kann aber mit dem Flag MASK(n) gesetzt oder mit SetFlags verändert werden. Als Filterung wird eine binäre Maske verwendet, die nur die Elemente durchlässt, deren Bit-Wert im Filter-Flag enthalten ist.
// Bitmaske
attributeEnum // Hex Bin Dez
{
0, T("", ""), 0x01 // 0000 0001 = 1
1, T("Sachmerkmal", "Attribute"), 0x02 // 0000 0010 = 2
2, T("Annahme", "Approximation"), 0x08 // 0000 1000 = 8
4, T("Standard", "Standard"), 0x10 // 0001 0000 = 16
8, T("circa", "about"), 0x08 // 0000 1000 = 8
1024, T("nur für interne Zwecke", "for internal use only"), 0x04 // 0000 0100 = 4
}
Alle Bit-Maskierungen zusammen ergeben den Wert 0x1F = 1 1111 = 31
Beispiel 1:
Enum(CX_ATTRIBUTE::attributeEnum, MASK(0x03), 10, 16, 125, 80, "classix.num~attributeEnum")
In diesem Fall werden nur die beiden ersten Einträge (0x01 + 0x02) angezeigt. Der Filter kann während der Laufzeit auch mittels 0x03 SetFlags(, attributeEnum) gesetzt werden
Beispiel 2:
Enum(CX_ATTRIBUTE::attributeEnum, MASK(0x1D), 10, 16, 125, 80, "classix.num~attributeEnum")
In diesem Fall werden alle - außer dem zweiten - Einträge (0x1F - 0x02 = 0x1D, bzw. dezimal: 31 - 2 = 29) angezeigt. Der Filter kann während der Laufzeit auch mittels 0x1D SetFlags(, attributeEnum) gesetzt werden
Persistente Transformationstabellen
Statt als File, können Transformationstabellen auch in der Datenbank abgelegt werden (siehe Anweisung SaveEnumTbl), d.h. als Objekte der Klasse CX_ENUM_TABLE. Wenn das ClassiX®-System ein Enumeration-Element transformieren muss, sucht es die entsprechende Tabelle zunächst in der Datenbank, dann als File.
Enumerations-Namen können beliebige Texte sein. Auch führende Leerzeichen sind erlaubt.