CX_CONDITIONED_BAG
Klassenhierarchie
Beschreibung:
Diese Klasse verwaltet "Wenn...dann"-Beziehungen in einer Tabelle. Dabei besteht ein Tabelleneintrag jeweils aus einer Bedingung ("Wenn") und einem ihr zugeordneten Objekt ("Dann"). Ein Eintrag wird mit einer Formel-Bedingung verwaltet.
Beim Auswerten der Tabelle wird das Objekt geliefert, dessen zugeordnete Bedingung erfüllt ist. D.h., dass sich die Tabelle in diesem Fall wie eine Art Weiche verhält.
Beispiel:
Wenn... | Dann... |
---|---|
Bestellmenge < 50 & Kunde = "Meier" | Rabatt = 6% |
Bestellmenge < 50 | Rabatt = 5% |
Bestellmenge < 100 | Stückpreis = 49,89 DM |
Bestellmenge >= 100 | Rabatt = 8% |
In dem Beispiel ist eine Preis-Tabelle, die besondere Kundenrabatte beinhaltet, abgebildet. Dabei erhält der Kunde "Meier" bei Bestellmengen unter 50 Einheiten einen Sonder-Rabatt von "6%". Bestellt hingegen der Kunde "Müller" eine Menge von 25 Einheiten, so wird "5%" als Rabatt zurückgegeben.
Anzumerken ist zudem, dass die einzelnen Einträge auch verschiedene Objekte liefern können. Liegt die Bestellmenge beispielsweise zwischen 50 und 100, so ist ein Stückpreis von "49,89 DM" vereinbart, so dass das zurückgegebene Objekt keine Prozentzahl, sondern ein Wert ist.
Code-Beispiel:
Eine bedingte Objekttabelle besteht aus einer Menge von Formel-Bedingungen. Es gibt folgende Möglichkeiten, um einen neuen Eintrag in die Tabelle zu stellen.
1. Erzeugen einer Formel-Bedingung und Einfügen dieser in die Tabelle:
Var(fcond)CreateTransObject(CX_FCONDITION) -> fcond
"Bestellmenge < 50 & Kunde = \"Meier\"" fcond Put
. . . // Erzeugen des Objektes "o", das an die Bedingung gebunden ist
// Objekt "o" an die Bedingung binden
o fcond SetReference(_object)
Var(table) CreateTransObject(CX_CONDITIONED_BAG) -> table
// Einfügen in die Tabelle
fcond table Insert
2. Direkte Übergabe der Bedingung als Text und des zugehörigen Objektes "o" an die Tabelle, die keine Spaltenaufteilung besitzt.
Var(table) CreateTransObject(CX_CONDITIONED_BAG) -> table
. . . // Erzeugen des Objektes "o", das an die Bedingung gebunden ist
// Einfügen in die Tabelle
"Bestellmenge < 50 & Kunde = \"Meier\"" o table Insert
3. Direkte Übergabe der Bedingung als Text und des zugehörigen Objektes "o" an die Tabelle, wobei eine Spaltenaufteilung für die Tabelle definiert ist und die Bedingung dementsprechend aufgeteilt ist. Die einzelnen Bestandteile müssen dabei mit einem "Und" (= "&") verknüpft sein.
Var(table) CreateTransObject(CX_CONDITIONED_BAG) -> table
"Bestellmenge, Kunde" table Put
. . . // Erzeugen des Objektes "o", das an die Bedingung gebunden ist
// Format: expr (=Rest) Kunde Bestellmenge Objekt
"" "Meier" "<50" o table Insert
// Alternativ kann statt "Meier" auch "=Meier" geschrieben werden
Anmerkung: Statt eines Eintrages kann der Tabelle auch ein Vektor von Einträgen zum Einfügen übergeben werden.
Darstellung am Bildschirm
Eine Objectbox bietet die Funktionalität, um die einzelnen Einträge einer bedingten Objekttabelle anzuzeigen. Eine beispielhafte Anzeige ist in der folgenden Grafik abgebildet (Programmcode und weitere Hinweise):
In diesem Beispiel sind die Möglichkeiten zur Spaltenaufteilung genutzt worden, um die Anzeige übersichtlicher zu gestalten.
Funktion | MA* | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|---|
AddColVar | (STRING) | Eine neue Spalte zu den definierten hinzufügen | ||
Amount | OBJECT | Rückgabe des Wertes des ersten Objektes, dessen Bedingung erfüllt ist | ||
ColVarNames | VECTOR<STRING> | Rückgabe der Spaltennamen | ||
ColVarNumbers | VECTOR<INTEGER> | Rückgabe der Spaltennummern | ||
ColVarTypes | VECTOR<INTEGER> | Rückgabe der Spalten-Typen | ||
Delete | (OBJECT) | Formel-Bedingung aus der Tabelle löschen | ||
Evaluate | OBJECT | Rückgabe des ersten Objektes, dessen Bedingung erfüllt ist | ||
Exchange | ||||
FindAll | COLL | Rückgabe aller Formel-Bedingung Objekte | ||
First | OBJECT | |||
GetInputAccessPaths 233188 |
VECTOR<STRING> | Rückgabe aller Zugriffspafde in einem Vektor | ||
GetInputVarNames | (OBJECT) | VECTOR<STRING> | Rückgabe aller Variablen-Namen in einem Vektor | |
InsertAfter | OBJECT, OBJECT | |||
InsertBefore | ||||
InsertFirst | OBJECT | |||
InsertLast | OBJECT | |||
Last | OBJECT | |||
NColumnVars | INTEGER | Anzahl an Spalten ermitteln | ||
Pick | OBJECT | Rückgabe des ersten Objektes, dessen Bedingung erfüllt ist | ||
Pick über Zugriffsausdruck | Rückgabe des ersten Objektes, dessen Bedingung erfüllt ist | |||
Query | COLL | Rückgabe aller Objekte, deren Bedingung erfüllt ist | ||
RemoveColVar | (STRING) | Eine Spalte aus den definierten entfernen | ||
Repair | entfernt Objekte, die NICHT Formel-Bedingung Objekte (CX_FCONDITION) sind, aus der Tabelle | |||
Revert | Vertauscht die Reihenfolge der Elemente (CX_FCONDITIONE-Objekte) | |||
SanityCheck | INTEGER | Konsistenz der Tabelle prüfen | ||
Add | CX_AMOUNT | CX_AMOUNT | Operator + als Funktion | |
AddAssign | CX_AMOUNT | Operator += als Funktion | ||
AmountWeak | ||||
Autoformat | INTEGER, INTEGER | CX_AMOUNT | Liefert ein, entsprechend der gegeben Anzahl von Vor- und Nachkommastellen, formatiertes Objekt zurück (nur bei CX_VALUE, sonst das Objekt selbst). | |
DivAssign | CX_AMOUNT | Operator /= als Funktion | ||
Divide | CX_AMOUNT | CX_AMOUNT | Operator / als Funktion | |
MulAssign | CX_AMOUNT | Operator *= als Funktion | ||
Multiply | CX_AMOUNT | CX_AMOUNT | Operator * als Funktion | |
string | INTEGER | CX_STRING | Liefert die String-Darstellung des Objektes | |
SubAssign | CX_AMOUNT | Operator -= als Funktion | ||
Subtract | CX_AMOUNT | CX_AMOUNT | Operator - als Funktion |
* MA = Member-Access-Funktion
Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung |
---|---|---|---|---|
this | CX_CONDITIONED_BAG | Die bedingte Objekttabelle | ||
flags | SHORT / INTEGER (?) | Steuern der Auswertung über Flags |
* I = Indizierbares Datenfeld
Modul | Kurzbeschreibung |
---|---|
testform.mod | Formel testen |
columvar.mod | Tabellenspalten Editiermodul |
cxConditionedBag.mod | Tabellen Basismodul |
PriceDiscountTable.mod | Preistabellen Basismodul |