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 Variable oder Konstanten.
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.
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 //
Variable 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 Variable, 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 Variable, 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):

| 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 | ||
| 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 |
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. |
| Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung |
|---|---|---|---|---|
| this | CX_FORMULA | Die Formel |
| Modul | Kurzbeschreibung |
|---|---|
| formula.mod | Berechnungsformel Basismodul |
| formuedt.mod | Berechnungsformel Editiermodul |
| formusel.mod | Berechnungsformel Selektionsmodul |
| formsamp.mod | Berechnungsformel Beispielmodul |
| testform.mod | Formel testen |