*FUNCTION / *ENDFUNCTION
Benutzerdefinierte Funktionen können als Platzhalter für entsprechende MDX-Anweisungen (oder Teilanweisungen) in Formeln eingefügt werden. Dadurch kann die Lesbarkeit einer Logikanweisung deutlich verbessert werden.
Die Definitionen der Logikfunktionen können an einer beliebigen Stelle in eine Logikdatei oder eine eingebundene Datei eingefügt werden. Ihre Syntax ist:
Für einzeilige Funktionen:
*FUNCTION {functionname}({Param1}[,{Param2}…]) = {Function Text}
Für mehrzeilige Funktionen:
*FUNCTION {functionname}({Param1}[,{Param2}…])
{Function text}
{Function text}
*ENDFUNCTION
Innerhalb einer Skriptlogikdatei können beliebig viele Funktionen definiert werden.
Einer Funktion können beliebig viele Parameter übergeben werden, um den entsprechenden MDX-String dynamisch zu ändern.
Momentan können Funktionen jedoch nicht geschachtelt werden; d. h., eine Funktion kann keine weiteren Funktionen enthalten.
Die Position der Funktion in einer Logikdatei ist irrelevant, solange dieselbe Funktion nicht neu definiert wird. In diesem Fall ist die Neudefinition erst von der Stelle der Neudefinition ab gültig.
Die Werte der übergebenen Parameter werden im Funktionstext ohne Validierung ersetzt, selbst wenn sie in längere Wörter eingebettet sind.
Seien Sie vorsichtig bei der Definition der Parameternamen, um Konflikte mit reservierten MDX-Begriffen und mit dem umgebenden Text in der Logik zu vermeiden. Es wird empfohlen, Parameternamen wie im folgenden Beispiel stets mit einem Trennzeichen zu umgeben:
*FUNCTION Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION[#CE0661000] = Price([CE0004000],[CE0652000])
In diesem Beispiel wird der Preis berechnet. Sie müssen nicht überprüfen, ob der Nenner Null ist, um den Fehler einer Division durch Null zu vermeiden. Die Skriptlogik-Engine ersetzt den Fehler einer Division durch Null automatisch mit der Zahl Null.
Mithilfe von *FUNCTION können Sie auch Elemente oder Dimensionen ersetzen, um Skripte besser lesbar zu machen.
*FUNCTION PERSONAL_COST = CE0004000
*FUNCTION LAB_HOUR = CE0652000
*FUNCTION PER_PRICE = CE0661000
*FUNCTION ACCOUNT = P_ACCT
Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION
[ACCOUNT].[#PER_PRICE] = Price([ACCOUNT].[PERSONAL_COST],[ACCOUNT].[LAB_HOUR])
Folgende Zeichen und das Leerzeichen dürfen im Namen von Logikfunktionen nicht verwendet werden:
+ - / * ^ % > < = ( ) [ ] { } , . ; ' : & \ | # ~ "
Alle in dieser Dokumentation enthaltenen Software-Quelltextzeilen und/oder -Strings („Code“) dienen nur als Beispiele und sind nicht für die Anwendung in einem Produktivsystem vorgesehen. Der Code soll lediglich dazu dienen, die Syntax- und die Phrasierungsregeln bestimmter Kodierungen besser zu erklären und zu veranschaulichen. SAP übernimmt keine Verantwortung für die Richtigkeit und Vollständigkeit des angegebenen Quelltextes und übernimmt keine Haftung für Fehler oder Schäden, die aus dessen Anwendung entstehen könnten; es sei denn, derartige Schäden wurden von SAP vorsätzlich oder fahrlässig hervorgerufen.