Was Sie schon immer über die Verarbeitung von Customer Exit-Variablen wissen wollten, aber …

In diesem Blog möchte ich versuchen etwas Klarheit in die Verarbeitung von Exit-Variablen (EXIT_SAPLRRS0_001) zu bringen. Der mit BW 7.30 aufgetauchte BAdI RSROA_VARIABLES_EXIT_BADI hat den Umgang mit Exit Variablen auch nicht gerade vereinfacht. Hinzu kommt, dass der BAdI in der SAP Hilfe leider gar nicht dokumentiert ist. Des Weiteren wurde mit 7.4 nun auch noch die Domain RSCHAVL von CHAR 60 auf SSTRING geändert.

Alle hier beschriebenen Exit-Variablen dienen dazu den Wertebereich eines Berichtes einzuschränken bzw. im Rahmen von Berechtigungen zu erweitern. Des Weiteren gelten die hier beschriebenen Eigenschaften von Exit Variablen auch für Exit Variablen die im Rahmen des Staging, in DTP’s oder InfoPackages, verwendet werden.

Zunächst wollen wir uns aber erst einmal mit den unterschiedlichen Typen von Exit Variablen und deren Verarbeitungsreihenfolge beschäftigen.

1.1      Variablentypen

Wenn ich von Exit-Variablen spreche unterscheiden ich folgende Verwendungsarten:

  • Eingabebereit
  • Nicht eingabebereit
  • Verwendung in Berechtigungen und im Staging

Eingabebereite Variablen kommen dann zum Einsatz wenn dem Anwender die Möglichkeit gegeben werden soll das Berichtsergebnis individuell zu beeinflussen. Das Grundkonzept einer eingabebereiten Variablen sieht vor das der Anwender den Wert für die Variable bestimmt und dieser nicht durch interne Verarbeitungsprozesse (Customer-Exit) verändert werden darf. In Abschnitt 1.3 »Überschreiben von eingegebenen Werten« beschreibe ich wie dieses Konzept umgangen werden kann und auch der vom Benutzer eingegebene Wert einer eingabebereiten Variablen im Customer-Exit überschrieben werden kann.

Eingabebereite Variablen werden im I_STEP = 1 und I_STEP = 3 prozessiert, siehe Abschnitt 1.2 »Verarbeitungsschritte (I_STEP)«.

Nicht eingabebereite Variablen kommen dann zum Einsatz wenn der Wert mittels Regeln bestimmt werden soll. Häufig werden hier Regeln definiert (implementiert) bei denen die Variablenwerte für nicht eingabebereite Variablen in Abhängigkeit von eingabebereiten Variablen ermittelt werden.

Nicht eingabebereite Variablen werden im I_STEP = 1 und I_STEP = 2 prozessiert, siehe Abschnitt 1.2 »Verarbeitungsschritte (I_STEP)«.

Exit Variablen können auch im Rahmen der Berechtigung oder im Staging verwendet. Bei Exit Variablen die hier zum Einsatz kommen muss berücksichtigt werden, dass hier in der Regel keine Interaktion mit einem Benutzer statt findet. Das heißt hier ist die Verarbeitungsreihenfolge eine andere.

Daher muss hier sichergestellt sein, dass Kombinationen wie eingabebereit, verpflichtend und keinen Vorschlagswert (Default value) dazu führen dass ein Variablendialog benötigt wird. Prozesses des Staging (DTP, InfoPackage) finden in der Regel in eingeplanten Prozessen statt die von Hintergrund-Benutzern ausgeführt werden.

Variablen der Verwendungsart Berechtigung und Staging werden nur im I_STEP = 0 prozessiert, siehe Abschnitt 1.2 »Verarbeitungsschritte (I_STEP)«.

1.2      Verarbeitungsschritte (I_STEP)

Exit Variablen werden je nach Verwendungsart und Verwendungszweck in ein oder mehreren Schritten, den I_STEP’s, verarbeitet. Im Abschnitt »Abhängigkeiten bei Variablen vom Typ Customer-Exit« der SAP Hilfe werden die I_STEP’s kurz erläutert. Die Beschreibung in der Online-Hilfe ist leider unvollständig und verzichtet vollkommen auf Beispiele. Ich werde die einzelnen Schritte daher noch einmal kurz an Hand von Beispielen erläutern.

1.2.1       Berechtigung und Staging (I_STEP = 0)

Im I_STEP = 0 werden Exit-Variablen verarbeitet die in der Berechtigung und die im Staging verwendet werden. Figure 1.1 zeigt die Verwendung einer Exit Variablen innerhalb der Berechtigung. Für die Verarbeitung von Exit Variablen innerhalb der Berechtigung wird nur der I_STEP = 0 durchlaufen.

Figure_1_1

Figure 1.1: Exit Variablen innerhalb der Berechtigung

Figure 1.2 zeigt die Verwendung einer Exit-Variablen im Staging am Beispiel der Selektion innerhalb eines InfoPackage.

Figure_1_2

Figure 1.2: Exit Variablen innerhalb des Staging

1.2.2       Initialisierung (I_STEP = 1)

Der I_STEP = 1 dient zur Initialisierung von Exit Variablen und wird für jede Exit Variable separat durchlaufen. Hierbei werden zuerst die eingabebereiten Variablen und anschließend die nicht eingabebereiten Variablen verarbeitet, siehe Figure 1.7.

Figure 1.3 zeigt ein typisches Beispiel zur Initialisierung einer eingabebereiten Variablen. Hier wird die Variable mit dem aktuellen Monat des letzten Jahres vorbelegt.

Figure_1_3

Figure 1.3: Initialisierung

1.2.3       Ableitung von Variablenwerten (I_STEP = 2)

Der I_STEP = 2 dient der Ableitung der Werte für die nicht eingabebereiten Exit Variablen. Auch hier werden analog zum I_STEP = 1 die Variablen separat prozessiert. Zur Ableitung der Werte für nicht eingabebereiten Exit Variablen stehen alle bisher erfassten Variablenwerte im Parameter I_T_VAR_RANGE zur Verfügung. In Abschnitt 1.3 »Überschreiben von eingegebenen Werten« beschreibe ich wie auch eingabebereite Variable hier prozessiert werden können.

Figure 1.4 zeigt wie für die aktuelle Variable (Prüfung des Variablennamen ist hier nicht abgebildet) der Wert basierend auf dem Wert der Variablen ZTKE_MONTH abgeleitet wird.

Figure_1_4

Figure 1.4: Ableitung von Variablen

1.2.4       Validierung (I_STEP = 3)

Der I_STEP = 3 dient der Validierung aller erfassten Variablenwerte. Im I_STEP = 3 stehen alle bisher erfassten Werte im Parameter I_T_VAR_RANGE zur Validierung zur Verfügung.

Der Parameter I_T_VAR_RANGE enthält nur die Variablen die einen Wert enthalten. D.h. hier sind nur Variablen enthalten die:

  • Einen Default Wert haben oder
  • Für die per Implementierung (I_STEP = 1 oder I_STEP = 3) ein Wert erfasst wurde oder
  • Der Anwender hat im Variablendialog einen Wert eingegeben

Im I_STEP = 3 können die Werte der einzelnen Variablen nicht verändert werden. Es besteht die Möglichkeit Nachrichten (Messages) zu generieren die mit dem Berichts-Ergebnis angezeigt werden. Für den Fall, dass die Validierung der Variablen dazu führt, dass es keinen Sinn macht den Bericht auszuführen kann durch das Werfen einer Exception (RAISE EXCEPTION) verhindert werden, dass der Bericht ausgeführt wird. Die Exception führt dazu, dass der Anwender erneut zum Variablendialog gelangt.

Figure 1.5 zeigt wie im I_STEP = 3 die Werte für die beiden Variablen ZYEARFROM und ZYEARTO ermittelt und anschließend verglichen werden. Ist der FROM Wert größer als der TO Wert wird eine Meldung ausgegeben und mit der Anweisung RAISE wrong_value verhindert, dass der Bericht ausgeführt wird. Der Anwender hat so die Möglichkeit den Wert im Variablendialog zu korrigieren.

Figure_1_5

Figure 1.5: Validierung – Customer Exit

Figure 1.6 zeigt analog zu dem Beispiel in Figure 1.5 wie im objektorientierten Kontext das Ausführen des Berichtes verhindert werden kann. Die Exception muss hier im objektorientierten Kontext geworfen werden.

Figure_1_6

Figure 1.6: Validierung – BAdI

1.3      Ausführungsreihenfolge der I_STEP

Figure 1.7 zeigt die Aufrufreihenfolge der einzelnen I_STEP’s im Rahmen eines BEx Reports. Ich unterscheide hier die beiden Phasen:

  • Präparation (Preparation Phase) und
  • Validierung (Validation Phase)

Die I_STEP’s der Präparation Phase werden vor dem Variablendialog durchlaufen und die I_STEP’s der Validierungsphase werden nur dann durchlaufen wenn die Werte der eingabebereiten Variablen im Variablendialog ändern.

Figure_1_7

Figure 1.7: Verarbeitung von Exit-Variablen (I_STEP’s)

Das heißt der aufrufende SAP Standard Verarbeitungsprozess geht zunächst davon aus, dass der Anwender die Default Werte des Variablendialoges ohne zu verändern akzeptiert. In diesem Fall wird die Validierungsphase nicht noch einmal durchlaufen!

Die Prozessschritte der Validierungsphase werden nur dann durchlaufen wenn die Werte im Variablendialog vom Anwender geändert wurden.

1.4      Verarbeitungsprozess von Exit Variablen

Mit BW 7.3 wurde der BAdI RSROA_VARIABLES_EXIT_BADI eingeführt und dem Customer Exit EXIT_SAPLRRS0_001 vorgestellt. Der Blog Koexistenz von BAdI RSROA_VARIABLES_EXIT_BADI und Customer-Exit EXIT_SAPLRRS0_001 zeigt auf wie der BAdI und der Customer Exit sich in einem BW 7.3 System verhalten.

Figure 1.8 zeigt die einzelnen Verarbeitungsblöcke die im Rahmen der Variablenverarbeitung von Exit Variablen durchlaufen werden.

Figure_1_8

Figure 1.8: Variablen Verarbeitung

Der Standard Verarbeitungsprozess prüft zunächst ob eine aktive BAdI Implementierung vom Type RSROA_VARIABLES_EXIT_BADI vorhanden ist. Als Filterwert wird hier der technische Name des InfoObjektes verwendet auf dem die Exit-Variable basiert die aktuell verarbeitet wird. Aus technischer Sicht erfolgt diese Prüfung innerhalb des Funktionsbausteins RRS_VAR_EXIT mittels GET BADI.

Der Blog BAdI RSROA_VARIABLES_EXIT_BADI beschreibt den Verarbeitungsprozess des BAdI‘s im Detail.

1.5      Überschreiben von eingegebenen Werten

Das Grundprinzip für eingabebereite Variablen war zunächst, dass vom Anwender eingegebene Werte nicht überschrieben werden dürfen. Eine eingabebereite Variable wird per Standard nach dem Variablendialog nicht mehr als Einzelvariable prozessiert.

Im I_STEP = 3 kann die Variable zwar validiert aber nicht mehr geändert werden. Wird im Rahmen der Validierung festgestellt, dass der vom Benutzer eingegebene Wert nicht sinnvoll ist kann im I_STEP = 3 eine Meldung generiert werden die den Anwender darüber informiert. Zusätzlich kann eine Exception geworfen werden. Die Exception sorgt dafür, dass der Variablendialog erneut erscheint.

Mit Einführung des Parameters E_CHECK_AGAIN (siehe Hinweis 1272242 – Erneute Variablenverprobung im I_STEP = 2) wurde das Konzept aufgehoben. Der Parameter erlaubt es dem Entwickler dem vom Anwender eingegebenen Wert einer eingabebereite Variable nach dem Variablendialog im I_STEP = 2 bei Bedarf zu überschreiben.

Wie in Abschnitt 1.2 »Verarbeitungsschritte (I_STEP)« beschrieben wird eine eingabebereite Variable nur im I_TEP = 1 und I_STEP = 3 verarbeitet, wobei der Wert nur im I_STEP = 1 verändert (initialiesiert) werden kann. Um zu erreichen, dass eine eingabebereite Variable im I_STEP = 2 noch einmal verarbeitet wird muss im I_STEP = 1 für diese Variable der Export Parameter E_CHECK_AGAIN (E_CHECK_AGAIN = ‘X‘) gesetzt werden. Ist der Parameter E_CHECK_AGAIN gesetzt so wird diese eingabebereite Variable nach dem Variablendialog analog zu einer nicht eingabebereiten Variablen im I_STEP = 2 verarbeitet.

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

Schreibe einen Kommentar