Benutzerdefinierte FunktionenÜber Funktionen ist es möglich, selbstentwickelte Funktionsbausteine für Werteprüfungen und Werteherleitungen von Merkmalen einzusetzen.
In einer Funktion beziehen Sie sich auf einen ABAP-Funktionsbaustein. Über den Funktionsbaustein werden die Merkmale und Merkmalwerte als Tabelleninhalte übergeben. In dem Funktionsbaustein stehen Ihnen alle Möglichkeiten einer weiteren Verarbeitung offen.
Achtung
Mit dem Aufruf eines benutzerdefinierten Funktionsbausteins verliert die SAP - Variantenkonfiguration die Kontrolle über mögliche Fehlersituationen: der Modellierer hat in seinem Baustein freien Zugang zu allen ABAP - Sprachelementen, muß dafür aber auch die alleinige Verantwortung für seinen Code tragen.
Gegenstand solcher externen Funktionen können z.B. sein:
komplexe Berechnungen auf Grund von Merkmalswerten der Konfiguration
aufwendige Gültigkeitsprüfungen für einen Wertebereich
Beispiel
Über eine Funktion können Sie die Werte von Merkmalen zu einem Textstring zusammenfassen. Der Wert für ein Merkmal Tuer_ID soll eine Zeichenkette sein, die aus den Werten der Merkmale Tuer_Material , Tuer_Breite und Tuer_Hoehe gebildet wird.
Sie können in einem Funktionsbaustein festlegen, daß die Werte der Merkmale Tuer_Material , Tuer_Breite und Tuer_Hoehe zur Tuer_ID verkettet werden. Dazu haben Sie einen Funktionsbaustein mit folgendem Aufruf definiert:
‘concatenate Tuer_Material Tuer_Breite Tuer_Hoehe into Tuer_ID’
Diesen Funktionsbaustein verwenden Sie in der Funktion, die Sie anschließend anlegen. In der Funktion nehmen Sie die Merkmale Tuer_Material , Tuer_Breite , Tuer_Hoehe und Tuer_ID auf und definieren die Auswertungsalternativen. In diesem Fall muß Tuer_ID als Datenfeld definiert werden, da für dieses Merkmal Werte hergeleitet werden sollen.
Funktionen können Sie bei Auswahl- und Vorbedingungen, in Aktionen, Prozeduren und Constraints nutzen:
In Auswahl- und Vorbedingungen, in Constraints und im Bedingungsteil von Aktionen und Prozeduren dienen Funktionen dazu, die Konsistenz der eingegeben Werte zu überprüfen.
Bei Aktionen, Prozeduren und Constraints können sie dazu dienen, Werte herzuleiten.
Für Funktionen sind zwei Arbeitsschritte notwendig:
Sie definieren einen Funktionsbaustein, in dem die Merkmale, die über eine Schnittstelle übergeben werden, verarbeitet werden.
Sie legen eine Funktion an, in der Sie den Funktionsbaustein und die Merkmale angeben. Wenn die Funktion zur Herleitung von Werten verwendet wird, definieren Sie Auswertungsalternativen.
Die Merkmale der Funktion und der Klasse können identisch sein, wenn die Merkmale einwertig sind. Wenn die Merkmale der Klasse mehrwertig sind, müssen Sie für die Funktion eigene einwertige Merkmale anlegen.
Die Funktion geben Sie in Beziehungswissen an. Die Merkmale der Funktion werden mit den Merkmalen der Variantenklasse verglichen:
FUNCTION <Funktionsname>
(<Merkmal der Funktion> = <Merkmal der Klasse>,
<Merkmal der Funktion> = <Merkmal der Klasse>)
Aufruf in einer Vor- oder Auswahlbedingung
Hier werden alle angegebenen Merkmale als Eingabeparameter für den Funktionsbaustein interpretiert. Der Baustein kann nur dazu dienen, aufgrund dieser Eingabeparameter ein ja/nein-Ergebnis zu ermitteln. Falls die Bedingung nicht erfüllt ist, muß der Baustein dies durch die vordefinierte Ausnahme FAIL signalisieren. Eine Herleitung von Werten ist in diesem Umfeld nicht möglich.
Aufruf in einer Aktion oder Prozedur
In einer Aktion oder Prozedur kann ein Funktionsaufruf für die Herleitung von Werten genutzt werden. In der Auswertungsalternative geben Sie an, welche Merkmale als Importparameter und welche als Exportparameter des Bausteins gelten. Ausgabeparameter (Rückgabewerte) müssen dabei auf ein- oder mehrwertige Merkmale der Klasse verweisen. Wenn einer der angegebenen Eingabeparameter in der Konfiguration nicht bewertet ist, so erfolgt der Funktionsaufruf nicht.
Wie in Tabellenaufrufen wird bei Funktionsaufrufen in Aktionen oder Prozeduren die erste Auswertungsalternative berücksichtigt.
Aufruf in Constraints
In einem Constraint kann ein Funktionsaufruf im Bedingungsteil (Test auf die Ausnahme FAIL) und im Restriktionsteil (Test und Herleitung) verwendet werden.
Funktionen, die in Constraints oder Aktionen verwendet werden sollen, dürfen keine Seiteneffekte auf die Konfiguration haben, d.h. Eingabedaten und Ausgabedaten müssen ausschließlich über die Funktionsschnittstelle transportiert werden.
Die Merkmale einer Funktion, die Sie in einer Beziehung ansprechen, müssen immer einwertig sein, d. h. in der Schnittstelle dürfen hier nur einwertige Merkmale referenziert werden.