Lade...
 

CX_CONDITIONED_BAG - Bedingte Objekttabellen

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.

Methodenverzeichnis (MDI)
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

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
this CX_CONDITIONED_BAG     Die bedingte Objekttabelle
flags SHORT / INTEGER (?)     Steuern der Auswertung über Flags

* I = Indizierbares Datenfeld

Verwendung in AppsWH
Modul Kurzbeschreibung
testform.mod Formel testen
columvar.mod Tabellenspalten Editiermodul
cxConditionedBag.mod Tabellen Basismodul
PriceDiscountTable.mod Preistabellen Basismodul