BAdI RSROA_VARIABLES_EXIT_BADI

Zur Prüfung und Manipulation von Exit-Variablen stand bisher nur Erweiterung RSR00001 (Customer-Exit globale Variablen im Reporting), Transaktion SMOD, zur Verfügung. Über den Funktionsbaustein EXIT_SAPLRRS0_001 kann hier zur Laufzeit (Ausführungszeit eines Berichtes) mittels ABAP Programmierung auf die Variablenwerte zugegriffen und diese ggf. angepasst werden. Der Funktionsbaustein EXIT_SAPLRRS0_001 ruft den Include ZXRSRU01, der im Kundennamensraum liegt auf.

Im Rahmen der Verarbeitung muss neben dem Namen der Variablen (I_VNAM) noch der Ausführungszeitpunkt (I_STEP) unterschieden werden. Diese doppelte Verschachtelung führt sehr schnell zu unübersichtlichen und unstrukturierten Quelltext.  Typische Ansätze sind hier:

  • Verschachtelter Einsatz zweier CASE (I_VNAM und I_STEP) Anweisung
  • Kombination von CASE (I_VNAM) und IF ELSEIF (I_STEP) Anweisungen
  • Auslagerung von Sourcecode durch den Einsatz von Includes, dynamischen Funktionsbausteinen, dynamische Methodenaufrufe in ABAP-OO Klassen

Mit  BW 7.3 liefert SAP den BAdI RSROA_VARIABLES_EXIT_BADI (BADI zum Füllen von Variablen) aus. Der BAdI ist dem Customer Exit vorgeschaltet, das heißt der BAdI ruft den Customer Exit auf. Abbildung 1.1 zeigt die Aufrufreihenfolge und die Verwendung des BAdI’s in Kombination mit dem Customer Exit und BAdI Implementierungen durch den Kunden.

 BAdU RSROA_VARIABLES_EXIT_BADI Aufruf
Abbildung 1.1 BAdI RSROA_VARIABLES_EXIT_BADI Aufruf und Verwendung

Der SAP Standard Variablen Verarbeitungsprozess ermittelt über den Befehl GET BADI alle aktiven BAdI Implementierungen.

Bei dem BAdI RSROA_VARIABLES_EXIT_BADI handelt es sich um einen filterbasierten BAdI. Als Filter Objekt verwendet der BAdI das InfoObjekt auf dem die Variable basiert die aktuell prozessiert wird.

Achtung: Im I_STEP 3 haben wir keine eindeutige Variable und somit auch keinen eindeutigen InfoObjekt Namen. Der BAdI wird in den I_STEPs 0, 1 und 2 pro Variable aufgerufen. Eine Variable basiert immer auf einem Merkmal. Im I_STEP 3 stehen alle Variablen des aktuellen Berichtes in Form eines Tabellen-Parameters zur Verfügung. Wenn die BAdI Implementierung auch für die Verarbeitung im I_STEP 3 genutzt werden soll muss der Filter um den Wert IOBJNM = ‘‘ erweitert werden.

Die BAdI Klasse, die alle aktiven Implementierungen ermittelt, ermittelt zunächst alle aktiven Implementierungen des BAdI und stellt zusätzlich sicher, dass die Filterwerte der BAdI Implementierung mit den aktuell prozessierten Werten übereinstimmen.

Anschließend wird von jeder aktiven Implementierung eine Instanz erzeugt und mit dem Befehl CALL BADI die Methode IF_RSROA_VARIABLES_EXIT_BADI~PROCESS der einzelnen Implementierungen aufgerufen.

SAP liefert mit der BAdI Definition direkt die Default Implementierung SMOD_EXIT_CALL. Diese Implementierung ist aktiv und hat als Filterkombination IOBJNM = ‘‘ OR IOBJNM <> ‘‘. Die Filterkombination ist so gewählt, dass die BAdI Implementierung für alle I_STEP (0, 1, 2 und 3) als aktiv gewertet wird. Die Default BAdI Implementierung hat die Aufgabe den Customer Exit  (Funktionsbaustein) EXIT_SAPLRRS0_001 der Erweiterung RSR00001 aufzurufen, siehe Abbildung 1.1. Der Aufruf des Customer Exit erfolgt nur wenn die Komponente in der Erweiterung aktiv ist.

Es Empfiehlt sich die Verwendung von BAdI und Customer Exit nicht zu mischen.

Die Schnittstelle der Methode PROCESS des BAdI Interfaces ist identisch mit der Schnittstelle des Funktionsbausteins EXIT_SAPLRRS0_001 des Customer Exit. Das heißt der Quelltext des Customer Exit kann vollständig übernommen werden, dies reduziert den Migrationsaufwand.

Achtung: Eine Migration ist nicht notwendig! Der Customer Exit bleibt weiter bestehen. Mit dem BAdI stellt SAP eine zusätzliche parallele Objektorientierte Möglichkeit für die Verarbeitung von Exit Variablen zur Verfügung. Vorteil der BAdI Variante gegenüber dem Customer Exit ist die besser Strukturierung und Verwaltung der Implementierungen.

Bei dem BAdI RSROA_VARIABLES_EXIT_BADI handelt es sich um einen BAdI der neuen BAdI Technologie, das heißt der BAdI ist in einem Erweiterungsspot organisiert.

Im Folgenden will ich kurz die einzelnen Schritte aufzeigen die notwendig sind um eine Implementierung für eine Variable anzulegen. Für das Beispiel habe ich eine Variable (ZTKE_FISCPER) basierend auf dem Merkmal 0FISCPER angelegt. Die Variable ist vom Typ Customer Exit und hat als Selektionsmöglichkeit Selektions-Option.

Für das Anlegen einer BAdI Implementierung der neuen BAdI Technologie, existieren mehrere Wege.

  1. Über die BAdI Definition (Transaktion SE18)
  2. Über die BAdI Implementierung (Transaktion SE19)
  3. Über die ABAP Workbench (Transaktion SE80)

Für 3. Benötigen wir als Einstieg den Namen des Entwicklungspaketes den wir zunächst nicht haben. Für 1) und 2) benötigen wir lediglich den Namen der BAdI Definition. Da wir zunächst nur den Namen der BAdI Definition (RSROA_VARIABLES_EXIT_BADI) haben  empfiehlt sich der Weg über die SE18, siehe Abbildung 1.2.

Abbildung 1.2 Anlegen einer neuen BAdI Implementierung- Schritt 1

Zur Anzeige der BAdI Definition wechselt die Ansicht von der SE18 automatisch in die SE80 und öffnet dort den Erweiterungsspot RSROA_VARIABLES_EXIT. Durch klicken auf  (siehe Markierung in Abbildung 1.2.) kann eine neue BAdI Implementierung angelegt werden.

Eine BAdI Implementierung kann nicht direkt innerhalb einer BAdI Definition angelegt werden. Hierzu muss zunächst eine Erweiterungsimplementierung angelegt werden. Abbildung 1.3 zeigt in (1) den Dialog zur Auswahl einer Erweiterungsimplementierung. Nach Auswahl der Erweiterungsimplementierung kann innerhalb dieser die BAdI Implementierung angelegt werden, siehe (2).

BAdI Implementierung anlegen II
Abbildung 1.3 Anlegen einer neuen BAdI Implementierung – Schritt 2

(3) zeigt die Definition der Filterwerte in der neu angelegten BAdI Implementierung.

Anschließend kann die Implementierung der Methode PROCESS erfolgen, siehe (1) in Abbildung 1.4.

BAdI Implementierung anlegen III
Abbildung 1.4 Anlegen einer neuen BAdI Implementierung – Schritt 3

Nachdem die Implementierung abgeschlossen ist muss noch sichergestellt werden, dass alle beteiligten Objekte aktiv sind. Folgende Objekte müssen aktiviert werden:

  • ABAP-OO Klasse
  • BAdI Implementierung
  • Erweiterungsimplementierung

Bei aktivieren der ABAP-OO Klassen muss darauf geachtet werden, dass die gesamte Klasse aktiv ist. Beim aktiveren einer Methode wird lediglich die Deklaration und die Definition der Methode nicht aber die ABAP Klasse selbst aktiviert. Darum empfehle ich beim Aktivieren auf die Klassenebene zu wechseln (Goto è Class Definition).

Nachdem alles aktiviert  ist kann das Verhalten der Variablen über eine BEx Query getestet werden.

Veröffentlicht unter SAP | Hinterlasse einen Kommentar

Veröffentlichungen hinzugefügt

Seite Veröffentlichungen hinzugefügt!

Veröffentlicht unter Uncategorized | Hinterlasse einen Kommentar

BEx webbasierten Variablendialog kundenindividuell anpassen

1      Einführung

Die Möglichkeiten der Anpassung des Variablendialoges eines webbasierten Berichtes waren bisher stark eingeschränkt. Über Parameter des WebTemplate und mit Hilfe der Web Design API kann das zwar das Verhalten des WebTemplates bezüglich der Variablen beeinflusst werden aber nicht das Layout und die Verarbeitungslogik der Eingabe.

 SAP_Standard_Variable_Dialog
Abbildung 1.1: SAP Standard Variable Dialog

Mit dem Patch NW730 BI JAVA SP08 Patch 30 (siehe auch Hinweis 1622306) bietet SAP eine Möglichkeit das Layout und die Verarbeitungslogik für folgende Dialoge, bezüglich der Variablenverarbeitung,  anzupassen:

  • Variablendialog
  • Dialog für die F4 Hilfe einzelner Variablen
  • Filterdialog einzelner Merkmale

Für die kundenindividuelle Anpassung des Variablendialoges stehen zwei alternative Wege zur Verfügung:

  • Kundenindividuelle Formatierung und Positionierung
  • Kundenindividuelles Layout und Verarbeitungslogik

Das Prinzip der Implementierung ist für alle Arten der Anpassung identisch. Über ein Web Item vom Typen Individuelle Erweiterung wird der BEx Web-Laufzeitumgebung ein HTML und/oder JavaScript Codesegment (Snipplte) übergeben. Die BEx Web-Laufzeitumgebung ersetzt den SAP Standard Code durch die übergebenen Codesegmente. Damit die BEx Web-Laufzeitumgebung diesen Ersetzungsprozess durchführt müssen bestimmte Rahmenbedingungen erfüllt sein.

Ich gehe weiter unten noch im Detail auf die Implementierung ein.

2      Kundenindividuelle Formatierung und Positionierung

Die erste Möglichkeit den Variablendialog kundenindividuell anzupassen ist, die einzelnen Elemente des Variablendialoges kundenindividuell zu Positionieren. Zur Bestimmung der Positionen der einzelnen Elemente können beliebige HTML Tags verwendet werden. Für die einzelnen Elemente stehen Muster (Pattern) zur Verfügung die innerhalb eines kundenindividuellen HTML Textes platziert werden können.

Folgende Elemente stehen zur Verfügung:

  • Bereich Varianten
  • Bereich Personalisieren
  • Jede einzelne Variable des Berichtes
  • OK-Button
  • Check-Button

Die Pattern werden als individuelle XML-Tags im kundenindividuelle HTML Coding platziert. Die BEx Web-Laufzeitumgebung erkennt die Pattern und ersetzt sie durch das benötigte Coding.

Abbildung 2.2 zeigt in (1) einen angepassten Variablendialog in dem die Bereiche Varianten und Personalisieren so wie die Button OK und Check analog zum Standard Variablendialog positioniert wurden. Die Variablen wurden unterteilt in zeitbezogene Variablen und nicht zeitbezogene Variablen. Um diese Gliederung besser hervorzuheben wurde für die einzelnen Typen jeweils eine eigene Gruppe erzeugt.

customer_individual_variabledialog
Abbildung 2.1: Kundenindividuelle Formatierung und Positionierung

Die Anpassung in (2) zeigt die Verwendung von komplexeren HTML Komponenten. Hier werden nur die zeitbezogenen Variablen direkt dargestellt und alle weiteren Variablen werden über einen Tray ausgeblendet. Hierdurch kann der Variablendialog für Berichten mit sehr vielen Variablen übersichtlicher gestaltet werden und somit der Bedienungskomfort erhöht werden.

Die Implementierung der hier verwendeten Tray Komponente erfolgt rein über HTML und JavaScript und Bedarf keinen Round-Trip.

Diese Darstellung könnte auch über eine Personalisierung erreicht werden, die könnte aber nicht zentral gesteuert werden.

3      Kundenindividueller Variablendialog

Eine weitere Möglichkeit den Variablendialog anzupassen ist es das Layout und die Verarbeitungslogik für die einzelnen Variablen kundenindividuell zu gestalten.

Bei dieser Variante wird nicht das SAP Standard HTML Coding des gesamten Variablendialoges durch kundenindividuelles HTML Coding ersetzt sondern nur die Bereiche für die Eingabe der Variablenwerte. Im Variablendialog in Abbildung 3.1 wurde das SAP Standard HTML Coding für die beiden Variablen Current Yera Period und Previous Year Period durch kundenindividuelle HMTL Coding ersetzt.

customer_individual_variabledialog_2
Abbildung 3.1: Kundenindividueller Variablendialog

Für die Beispielimplementierung in Abbildung 3.1 wurde neben der sehr individuellen Oberfläche zur Eingabe einer Periode noch zusätzliches JavaScript Coding hinterlegt, über das eine Abhängigkeit der beiden Variablen Current Yera Period und Previous Year Period implementiert wurde.

Validierung und Anpassung von Variablenwerten

Bei der Eingabe eines Periodenwertes für eine der beiden Variablen wird automatisch geprüft ob der Variablenwert der anderen Periode, nach kundenspezifischen Regeln, noch gültig ist. Ist dies nicht der Fall wird der Wert entsprechend der Regeln direkt angepasst.

Eine solche Validierung und Anpassung ist ohne diese Erweiterung nicht möglich, da es im Customer Exit im I_STEP 3 nicht möglich ist die Werte des Anwenders zu überschreiben.

Analog zur Implementierung eines kundenindividuellen Variablendialoges muss auch hier über ein Web Item vom Typen Individuelle Erweiterung der SAP Standard HTML Code ersetzt werden. Bei dieser Variante muss für jede Variable ein Web Item vom Typen Individuelle Erweiterung im WebTemplate hinterlegt werden.

Für die Implementierung des kundenspezifischen HTML Coding werden für einige HTML Elemente auch hier Pattern zur Verfügung gestellt. Für folgende HTML Elemente stehen Pattern zur Verfügung:

  • Input Feld
  • Dropdown-Box
  • Label

Die Pattern dienen der Erleichterung zur Erstellung eines Portal Layout konformen HTML Codes, sie müssen aber nicht zwingend verwendet werden.

Einige Eigenschaften der Erweiterung können über die Parameter des Web Item vom Typen Individuelle Erweiterung im WebTemplate angepasst werden.

Bei jeder Erweiterung wird zusätzlich, durch die BEx Web-Laufzeitumgebung, ein Standard Variablen Eingabefeld in das Layout hineingeneriert. Über die Web Item Parameter können Sie steuern ob das Eingabefeld oberhalb oder unterhalb des kundeneigenen Layouts dargestellt werden soll.

Standard Eingabefeld

Mit Hilfe von JavaScript ist es auch möglich das Standard Eingabefeld auszublenden. Wichtig ist aber das es innerhalb der HTML Seite verfügbar ist. Auch der Button für die F4-Wertehilfe kann mit Hilfe von JavaScript ausgeblendet werden wenn dies nicht benötigt wird.

Ziel der Implementierung ist es dieses Eingabefeld mit dem Variablenwert zu füllen.

Layout

In der aktuellen Version müssen gerade in Bezug auf das Layout noch einige Anpassungen vorgenommen werden. Dies gilt zum Beispiel für die Breite des Variablendialoges, die Höhe der Zeile in der eine kundenindividuelle Anpassung eingebettet wird und die Positionierung des Standard Eingabefeldes für den Variablenwert.

4      Kundenindividuelle F4- und Filterdialoge

Eine weitere Möglichkeit der Variablendarstellung ist die kundenindividuelle Anpassung der F4- und Filterdialoge. Abbildung 4.1 zeigt zwei unterschiedliche Implementierungen zu einem F4 Wertehilfedialog für die Variable ZTK_0I0DAYS. Im oberen Beispiel werden die Werte einer Bezugsperiode mit angezeigt.

Abhängigkeiten zwischen Variablen

Der F4-Wertehilfe-Dialog steht dient explizit für eine Variable. Bei dieser Variante ist es nicht möglich die Werte einer anderen mit zu beeinflussen. Technisch gesehen enthält der Dialog ein zusätzliches Eingabefeld das den Wert der Variablen enthält. Dieses Feld ist genau der Variablen zugeordnet. Der Wert dieses Feldes wird beim Schließen des Dialoges über den OK-Button dem Variablendialog für genau diese Variable übergeben. Die Erweiterung ersetzt lediglich das HTML Coding innerhalb des F4-Wertehilfedialoges.

customer_individual_F4_and_filterdialog
Abbildung 4.1: Kundenindividueller F4- und Filterdialog

Für jeden Dialog muss ein eigenes Web Item vom Typen Individuelle Erweiterung im WebTemplate bereitgestellt werden. Hierbei ist es möglich die Implementierung wiederzuverwenden. Sie wollen einen individuellen F4-Wertehilfedialog für die Variabel 0I_CALMONTH (basiert auf 0CALMONTH) Implementieren. Gleichzeitig möchten Sie aber auch, dass wenn der Anwender im Bericht einen Filter auf das Merkmal 0CALMONTH anwendet der Filterdialog das analoge Verhalten hat wie der F4-Wertehilfedialog. Dies können Sie erreichen in dem Sie für beide Web Item die gleiche Implementierungsklasse verwenden. Genauso gut ist es möglich unterschiedliche Dialoge zu implementieren.

5      Implementierung

Die Implementierung aller beschriebenen Erweiterungen erfolgt immer über das gleiche Prinzip. Abbildung 5.1 zeigt die Architektur der einzelnen Erweiterungen.

Architecture_SAP_Standard
Abbildung 5.1: Architektur – SAP Standard

Die Anzahl der Implementierungen des Web Item vom Typen Individuelle Erweiterung kann auf Grund der vielen Kombinationsmöglichkeiten sehr schnell ansteigen. Zu jeder  Implementierung eines Web Item vom Typen Individuelle Erweiterung gehört immer eine implementierende ABAP-OO Klasse.

Mit Hilfe eines BAdIs können die unterschiedlichen Implementierungen besser organisiert und strukturiert werden. Des Weiteren bietet die erweiterte Architektur durch das BAdI Framework die Möglichkeit Implementierungstemplates zu erstellen die den Aufwand neuer Implementierungen stark vereinfachen und verkürzen. Zusätzlich kann eine Fallback Implementierung hinterlegt werden für den Fall, dass eine Implementierung nicht verfügbar ist.

Architecture_SAP_Standard_with_BAdI
Abbildung 5.2: Architektur – SAP Standard mit BAdI

 

Veröffentlicht unter SAP | Hinterlasse einen Kommentar

Coming soon

Dieser Blog wird aktuell überarbeitet.

Veröffentlicht unter Uncategorized | Hinterlasse einen Kommentar