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.

Dieser Beitrag wurde unter SAP veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar