Stammdaten formeln makroeditor makroaufbau
Makroeditor - Aufbau
zurück Übersicht Makroverwaltung , Makroeditor Quelltext
Makros sind Texte im ASCII-Format und können mit einem einfachen Texteditor bearbeitet werden. Ein Makro kann mehrere Funktionen enthalten. Diese Funktionen können von außerhalb des Makros aufgerufen werden, sowie von Funktionen innerhalb des Makros.e
Richtlinien:
-
Jede Funktion beginnt mit [Funktionsname]. Es dürfen keine weiteren Zeichen vor [ und nach ] in dieser Zeile stehen. Der Funktionsname darf Leerzeichen enthalten. (Bsp:[Funktion 1]) Eine Funktion endet beim Beginn der nächsten bzw. mit dem Ende des Textes.Jede Zeile kann höchstens einen Befehl aufnehmen.Eine Anweisung kann beliebig viele Fortsetzungszeilen haben. Die Fortsetzungszeilen müssen unmittelbar auf die fortzusetzende Zeile folgen. Das erste lesbare Zeichen einer F-Zeile muss ein Doppelpunkt sein, Blanks und Tabs können vor dem Doppelpunkt stehen. Der Interpreter fügt dann diese Zeile ab dem Zeichen, das dem Doppelpunkt folgt, mit einem Zeilenumbruch an die vorhergehende Zeile an.Auf diese Weise können große Anweisungen mehrzeilig erfasst werden, bzw. können Textkonstanten auch mit Zeilenumbrüchen erfasst werden.Sprungmarken müssen am Zeilenanfang stehen und sind durch Doppelpunkt abzuschließen. Einer Sprungmarke kann eine Anweisung folgen. Hinweise:
-
Sal- oder Vis-Funktionen, die 0 als Rückgabewert liefern, sollten immer zusammen mit einer Set- oder einer Bedingung-Anweisung verwendet werden, da sonst im Falle 0 als Rückgabewert die Fehlerbehandlung ausgelöst wird. Sonderfunktion Definitionen Die Funktion [Definitionen] ist nicht aufrufbar und hat eine besondere Bedeutung. Es handelt sich dabei um eine Funktion, mit der Ersetzungszeichenfolgen für den Makroquelltext hinterlegt werden können. Man könnte es auch als Preprozessor-Anweisungen verstehen. Die Syntax lautet: Ersetzungs-ZF: EchterName
Nach dem Laden der Makrodatei in den HS werden die Ersetzungen laut den Definitionen in einem Pass durchgeführt.
Damit kann man kryptische Variablenamen oder auch Ausdrücke definieren, um Sie in Funktionen zu verwenden und den Makro dadurch leserlicher zu gestalten.
Bsp. 1:Intern wird $Meldung durch SalMessageBox ersetzt.
[Funktion 1]
$Meldung("Hallo Welt", "", 0)
[Definitionen]
$Meldung:SalMessageBox
Bsp. 2:Intern wird $Sql-Ok durch (gnSqlError = 0) und $Meldung durch SalMessageBox ersetzt.
[Funktion 1]
Bedingung( $Sql-Ok "$Meldung(' Sql-Anweisung war in Ordnung', '', 0)",
:"$Meldung('Sql-Anweisung ging schief', '', 0) ")
[Definitionen]
$Meldung:SalMessageBox
$Sql-Ok:(gnSqlError = 0)
Wichtig: Es ist darauf zu achten, dass eine Ersetzungszeichenfolge nicht in einer anderen Ersetzungszeichenfolge vorkommt. Es könnten sonst fehlerhafte Ersetzungen auftreten.
Bsp.:
$Sql:"Select count(*) from dual;"
$Sql-Ok:(gnSqlError = 0)
In diesem Falle würden alle $Sql und ebenfalls alle $Sql-Ok – Zeichenfolgen durch "Select count(*) from dual;" ersetzt.
Am Besten ist die Syntax $Name$ geeignet. Bei dieser Notation sollte es kaum zu Ersetzungsfehlern kommen.
Die Dollar-Zeichen sind nicht erforderlich. Sie können auch weggelassen werden. Es ist dann allerdings darauf zu achten, dass die richtigen Zeichenfolgen im Quelltext ersetzt werden.
Variable
Es ist möglich in den Definitionen auch frei verwendbare Variable zu definieren. Dazu sind im Makro “Definitionen” die Marken DefNumber, DefString und DefDate zu verwenden. Diese Marken werden vom Makrointerpreter erkannt und gesondert behandelt.
Bsp.:
[Definitionen]
DefNumber:$Zahl1, $Zahl2
[Funktion 1]
Set $Zahl1 = $Zahl2 * 2
Variablennamen müssen immer mit einem $-Zeichen beginnen, sonst wird eine Fehlermeldung generiert.
Befehle
Im folgenden sind die gebräuchlichsten Befehle beschrieben.
AusführenMakro( Funktionsname)Startet die Funktion mit dem übergebenen Namen. Der Parameter kann eine String-Variable oder eine String-Konstante sein. Damit kann man auch Unterfunktionen aufrufen. Die Verschachtelungstiefe ist nicht beschränkt.
| Funktionsname | String |
|---|---|
Bedingung (Bedingung, True-Part, False-Part)Mit diesem Befehl ist die IF – Anweisung implementiert.
| Bedingung | Boolean | beliebiger boolscher Ausdruck |
|---|---|---|
| True-Part | String | ein beliebiger Befehl |
| False-Part | String | ein beliebiger Befehl |
Bsp: Bedingung( sHHJahr = “2000”, “GeheZu( ‚Marke1‘)”, “AusführenMakro(‚Fehler‘)”)
BeiFehler (Marke)De- bzw. aktiviert die Fehlerbehandlung in der akt. Funktion. Falls ein Fehler in der Makroabarbeitung auftritt, verzweigt der Interpreter zu dieser Marke. Eine leere Marke (Parameter = “”) deaktiviert die Fehlerbehandlung.
| Marke | String | Sprungmarke in aktueller Funktion |
|---|---|---|
FehlerAuslösen (Text)Zum expliziten Auslösen der Fehlerbehandlungsroutine in einer Funktion. Dieser Befehl setzt die interne Fehlertextvariable auf den Parameter Text und liefert FALSE als Ergebnis. Der Fehlertext wird bei jedem Aufruf des Befehls gesetzt.
Ein Fehler wird nicht ausgelöst, wenn der Befehl FehlerAuslösen (Text) in einer Set-Anweisung oder in der Bedingung beim Befehl Bedingung (...) verwendet wird.
| Text | String | Fehlertext, siehe fnLastMakroError |
|---|---|---|
Eingabe (Titel, Prompt, Default)Mit diesem Befehl können Benutzereingaben mit Hilfe einer vordefinierten Dialogbox realisiert werden. Die Eingaben sind auf Zeichenfolgen beschränkt.
| Titel | String | Fenstertitel der Dialogbox |
|---|---|---|
| Prompt | String | Text vor dem Eingabefeld |
| Default | String | Standardwert des Eingabefeldes |
| Rückgabe | String | Eingegebener Text. Wenn leer, wurde eine leere ZF eingegeben |
| oder Abbruch gedrückt. |
EndeMakro () Beendet die aktuelle Funktion sofort und kehrt zur rufenden Funktion zurück.
fnGetD (Variable, Wert)Ermittelt den Inhalt einer Date/Time-Variablen, die in der Funktion Definitionen angelegt wurde (DefDate)
| Variable | String | Name der Variablen im Makro (Bsp.: $Datum_Soll) |
|---|---|---|
| Wert | Receive Date | Programmvariable, die den Wert aufnimmt. |
fnGetN( Variable, Wert)Ermittelt den Inhalt einer Number-Variablen, die in der Funktion Definitionen angelegt wurde (DefNumber)
| Variable | String | Name der Variablen im Makro (Bsp.: $SummeGesamt) |
|---|---|---|
| Wert | Receive Number | Programmvariable, die den Wert aufnimmt. |
fnGetS( Variable, Wert)Ermittelt den Inhalt einer String-Variablen, die in der Funktion Definitionen angelegt wurde (DefString)
| Variable | String | Name der Variablen im Makro (Bsp.: $Buchungstext) |
|---|---|---|
| Wert | Receive String | Programmvariable, die den Wert aufnimmt. |
fnSetD (Variable, Wert)Setzt den Inhalt einer Date/Time-Variablen, die in der Funktion Definitionen angelegt wurde (DefDate)
| Variable | String | Name der Variablen im Makro (Bsp.: $Datum_Soll) |
|---|---|---|
| Wert | Date | Wert der gesetzt werden soll. |
fnSetN (Variable, Wert)Setzt den Inhalt einer Number-Variablen, die in der Funktion Definitionen angelegt wurde (DefNumber)
| Variable | String | Name der Variablen im Makro (Bsp.: $SummeGesamt) |
|---|---|---|
| Wert | Number | Wert der gesetzt werden soll. |
fnSetS (Variable, Wert)Setzt den Inhalt einer String-Variablen, die im Makro Definitionen angelegt wurde (DefString)
| Variable | String | Name der Variablen im Makro (Bsp.: $Buchungstext) |
|---|---|---|
| Wert | String | Wert der gesetzt werden soll. |
fnLastMakroError (Text)Liefert bzw. setzt den Inhalt der Variable für die letzte Fehlermeldung.
| Text | String | Wenn leer, wird die letzte Fehlermeldung zurück geliefert. |
|---|---|---|
| Wenn nicht leer, wird die letzte Fehlermeldung gesetzt. | ||
| Rückgabe | String | Nur wenn Parameter Text leer ist. |
fnStopMakro() Stoppt die Makrobearbeitung und kehrt zum allerersten Aufruf von AusführenMakro zurück, egal in welcher Ebene fnStopMakro() gerufen wurde. Dieser Befehl kann von anwendungsspezifischen Funktionen verwendet werden, um z.B. bei einem schweren Fehler die Makros abzubrechen.
Fortsetzen () Wird in der Fehlerbehandlungsroutine der Funktion verwendet, um bei der Anweisung fortzusetzen, die der fehlerauslösenden Anweisung folgt.
FortsetzenBei (Marke)Wird in der Fehlerbehandlungsroutine der Funktion verwendet, um bei einer definierten Anweisung fortzusetzen.
| Marke | String | Marke im Makro |
|---|---|---|
GeheZu (Marke)Einfacher Sprungbefehl, um zu einer bestimmten Marke in der akt. Funktion zu verzweigen.
| Marke | String | Marke in Funktion |
|---|---|---|
Wiederholen ()
Wird in der Fehlerbehandlungsroutine der Funktion verwendet, um bei der Anweisung fortzusetzen, die den Fehler ausgelöst hat.
Fehlerbehandlung
Tritt während des Ablaufs einer Funktion ein Fehler auf, verzweigt der Makrointerpreter zur Fehlerbehandlungsroutine in der akt. Funktion. Ist keine Fehlerbehandlung in der akt. Funktion aktiv, durchsucht der Interpreter alle rufenden Funktionen nach Fehlerbehandlungsroutinen und verzweigt dann zur ersten Routine, die er findet. Ist überhaupt keine Fehlerbehandlung implementiert, wird die Makroabarbeitung sofort abgebrochen und zum allerersten Aufruf von “AusführenMakro” zurückgekehrt.
Bsp.
| Funktion 1 (ohne Fehlerbeh.) | |||
|---|---|---|---|
| ruft Funktion 2 (mit Fehlerbeh.) | |||
| ruft Funktion 3 (ohne Fehlerbeh.) | |||
| ruft Funktion 4 (ohne Fehlerbeh.) |
In Funktion 4 tritt ein Fehler auf. Der Interpreter stellt fest, dass die Fehlerbeh. in Funktion 4 und 3 nicht aktiv ist und verzweigt schließlich in die Funktion 2 zur Fehlerbeh.-Routine. Die fehlerauslösende Anweisung ist in diesem Fall die Anweisung “AusführenMakro( “Funktion 3”) und die Befehle “Fortsetzen”, “FortsetzenBei” und “Wiederholen” beziehen sich auf diese Anweisung.