Lade...
 

CX_FORMULA - Formeln

CX_FORMULA

Klassenhierarchie
Beschreibung:

Berechnungsvorschriften, die nicht als Bestandteil eines Programms sondern als vom Anwender erzeugte und verwaltete Daten existieren, werden im ClassiX®-System durch Objekte der Klasse CX_FORMULA repräsentiert.
Ein Formel-Objekt enthält einen arithmetischen Ausdruck in der externen, vom Menschen lesbaren Form und gleichzeitig eine interne Darstellung, die eine sehr schnelle Auswertung der Ausdrücke erlaubt.
Das Ergebnis der Auswertung einer Formel kann ein beliebiges Objekt sein (ein numerischen Wert, ein Wahrheitswert, Datum, Zeichenkette usw...).

Die Elemente einer Formel sind Operanden, Operatoren, InstantView® Makros und Funktionsaufrufe. Operanden sind Variablen oder Konstanten

Hinweis: Die Operanden sind immer Objekte. Die in einer Formel erlaubten Operationen rufen entsprechende virtuelle Funktionen der Operanden auf, und damit bestimmt das Objekt die Semantik der Operatoren.

Die Syntax der Formelausdrücke entspricht der Syntax für die Beschreibung arithmetischer Ausdrücke in BASIC, FORTRAN und anderen üblichen (prozeduralen) Programmiersprachen. Terme können in Klammern zusammengefasst werden, um die Reihenfolge der Operationen zu beeinflussen. Die vollständige Grammatik ist hier in EBNF-Notation dokumentiert.
Mehrere Funktionsparameter werden durch Komma getrennt. Einzelne Ausdrücke, die unabhängig voneinander ausgewertet werden sollen, sind durch Semikolon zu trennen (das ist sinnvoll bei Zuweisungen mit :=).
Im Formelausdruck dürfen Kommentare in der in C++ üblichen Form untergebracht werden, d.h. an beliebiger Stelle mit /* ... */ und am Ende mit // 

Variablen und externe Funktionen beziehen sich auf bisher noch nicht näher bestimmte Objekte. Erst bei der Auswertung der Formel werden diesen Operanden Datenfelder bzw. Methoden bestimmter Objekte zugeordnet und damit ihr Wert festgelegt. Zu diesem Zweck werden im ClassiX®-System Objekte registriert (PlugSpace), und so entsteht ein aktueller Kontext, durch den die Variablen der Formel eine konkrete Bedeutung erhalten (Beispiel).

Beispiele 
Formel Beschreibung Elemente
0.5 * (x + y) die Hälfte der Summe aus x und y x und y sind Variablen, 0.5 eine Konstante
x < y & x >= 2   Ist x kleiner als y und größer als "2", so ist das Ergebnis der Wahrheitswert TRUE, ansonsten FALSE x und y sind Variablen, 2 eine Konstante
Previous(::Day(24,12),6)
Berechnet den 4. Advent eines Jahres, das durch ein Objekt CX_DATE im PlugSpace bestimmt ist  Previous ist eine interne Funktion, Day eine externe, 6, 12 und 24 sind Konstanten
  weiter Beispiele finden sie hier!
Darstellung am Bildschirm

Zur Darstellung von Objekten dieser Klasse wird ein Oberflächenobjekt vom Typ String verwendet. Die folgende Abbildung zeigt ein Beispiel (Programmcode):

 

Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
Amount     OBJECT Auswerten der Formel Rückgabe des Wertes des Ergebnis-Objekts
Evaluate     OBJECT Auswerten der Formel
Evaluate1     OBJECT Auswerten der Formel, ungebundene Variable führt zu Fehler 
Evaluate2     OBJECT Auswerten der Formel, bei ungebundenen Variablen erhält man als Ergebnis 0.0 (CX_NUMERIC) 
Evaluate3     OBJECT Auswerten der Formel, ungebundene Variablen werden mit SendMsg / Waitoninput abgefragt, wenn keine InstantView®-Message angemeldet ist: Fehler 
Evaluate4     OBJECT Auswerten der Formel, für ungebundenen Variablen geht ein dem Type entsprechendes Objekt mit Wert Null in die Berechnung ein.
EvaluateWeak     OBJECT Auswerten der Formel-Bedingung, wie beim Evaluate1,  Fehler werden in ein CX_VESSEL Objekt geschrieben
GetInputAccessPaths
233188  
    VECTOR<STRING> Liefert alle Zugriffspfade dieser Formel zurück
GetInputVarNames   (OBJECT) VECTOR<STRING> liefert die Namen aller für die Berechnung der Formel benötigten Variablen, wenn ein Container-Objekt angegeben wird, werden in diesem die entsprechenden dynamische Datenfelder erzeugt 
RawFormula     STRING Formel in String-Form
SetMessage   (INTEGER)   Anmelden InstantView®-Message (für Evaluate3
ShowIPN     STRING Anzeigen der Formel in der IP-Notation
XMLExport     STRING Formel in der XML-Form (lokaler Zeichensatz)
XMLExportUTF8     STRING Formel in der XML-Form (UTF-8)
Add   CX_AMOUNT CX_AMOUNT Operator + als Funktion
AddAssign   CX_AMOUNT   Operator += als Funktion
AmountWeak   CX_AMOUNT    
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
SubAssign   CX_AMOUNT   Operator -= als Funktion
Subtract   CX_AMOUNT CX_AMOUNT Operator - als Funktion

* MA = Member-Access-Funktion

 

Spezielle Funktionen innerhalb eines Formelausdrucks
Funktion Parameter Rückgabe Kurzbeschreibung
available (OBJECT) OBJECT testet, ob die als Parameter angegebene Variable (d.h. ein dynamisches Datenfeld oder ein Zugriffsausdruck) gebunden ist. Im Gegensatz zu has(...) wird die Variable locker gebunden (der Normalfall).
get (OBJECT) OBJECT fordert, dass die Variable eng gebunden wird.
has (OBJECT) OBJECT testet, ob die als Parameter angegebene Variable (d.h. ein dynamisches Datenfeld oder ein Zugriffsausdruck) gebunden ist, wobei die Variable eng gebunden wird (siehe Funktion get)
inherited (OBJECT, OBJECT) OBJECT testet, ob das mit Variable bezeichnetet Objekt von der mit dem zweiten Parameter bezeichneten Klasse abgeleitet ist. Der Name einer Klasse kann als Parameter angegeben werden (Typkonstante)
type (OBJECT) OBJECT liefert den Typ einer Variablen. Das Ergebnis kann mit einer Typkonstanten verglichen werden.
var (OBJECT) OBJECT liefert den Wert einer InstantView®-Variablen, deren Name als Parameter anzugeben ist. var(...) kann auch am Anfang einer Zugriffsausdrucks stehen.

 

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
this CX_FORMULA     Die Formel

* I = Indizierbares Datenfeld

 

Verwendung in AppsWH
Modul Kurzbeschreibung
formula.mod Berechnungsformel Basismodul
formuedt.mod Berechnungsformel Editiermodul
formusel.mod Berechnungsformel Selektionsmodul
formsamp.mod Berechnungsformel Beispielmodul
testform.mod Formel testen