Queryvariablen vom Typ SAP HANA Exit

Queryvariablen vom Typ SAP HANA Exit

Veröffentlicht am 21. Oktober 2018 von

Jörg Brandeis

| BW/4HANA | SQLScript | BEx Query Variables |

Ab SAP BW 7.50 besteht die Möglichkeit, Queryvariablen auch durch einen SAP HANA Exit in SQLScript zu implementieren. Damit kann die Variable vorbelegt oder berechnet werden, ohne dass der ABAP-Stack involviert ist. Das Vorgehen dazu habe ich in der aktuellen Ausgabe meines Buches "SQLScript für SAP HANA" noch nicht beschrieben, weshalb ich es hier nachholen will.

Der große Vorteil dieser Queryvariablen liegt darin, dass die Ausführung komplett in der SAP HANA erfolgen kann. Damit ist es möglich, die Variablenlogik auch in den zu einer Query generierten, externen Views zu nutzen. Der Verarbeitungstyp SAP HANA Exit ist nur für Merkmalsvariablen mit genau einem Wert möglich. Diese können in den BW-Modeling Tools im BW angelegt werden. Der zughörige Code wird in einer AMDP-Klasse hinterlegt, die den BAdI RSROA_VAR_HANA_EXIT_BADI implementiert. Zuvor muss eine entsprechende Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT erfolgen. Das Vorgehen dazu ist am Ende dieses Beitrags unter "Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT" erklärt.

Der Verarbeitungszeitpunkt des Exits hängt von der Eingabebereitschaft der Variablen ab. Im Falle einer eingabebereiten Variablen berechnet der Exit einen Vorschlagswert vor der Anzeige der Parameterscreens. Falls die Variable nicht eingabebereit ist, so wird der Exit nach Erfassung der Input-Variablen durchlaufen. Entsprechend kann sich die Logik im Exit darauf beziehen.

Beschreibung des Konzepts

Ein Exit sie alle zu berechnen

Leider erinnert das Konzept der SAP HANA Exits für Queryvariablen wieder stark an das alte, ABAP-basierte Vorgehen. Hierbei gab es genau einen Exit für alle Variablen. Entsprechend musste dann irgend wie verzweigt werden, je nachdem, welche Variable gerade gefüllt werden soll.

Das gleiche Konzept wurde auch bei der SAP HANA Variante umgesetzt. Das bedeutet, es muss stets abgefragt werden, für welche Variable jetzt die Werte beschafft werden sollen. Aber immerhin, es kann mehrere BAdI-Implementierungen geben.

Die AMDP-Methoden

IF_RSROA_VAR_HANA_EXIT~PROCESS

Die AMDP-Methode PROCESS berechnet den Wert der Variablen und liefert ihn im Parameter C_VALUE zurück. Dazu können die Informationen aus den IMPORT-Parametern verwenden werden. Allerdings sind die Parameter mit den anderen Variablen relativ generisch gehalten. Dies können Sie auch gut an dem Screenshot mit der Signatur der Methode sehen:

Schnittstelle / Signatur der AMDP-Methode PROCESS

Ab SAP BW 7.50 besteht die Möglichkeit, Queryvariablen auch durch einen SAP HANA Exit in SQLScript zu implementieren. Damit kann die Variable vorbelegt oder berechnet werden, ohne dass der ABAP-Stack involviert ist. Das Vorgehen dazu habe ich in der aktuellen Ausgabe meines Buches “SQLScript für SAP HANA” noch nicht beschrieben, weshalb ich es hier nachholen will.

Der große Vorteil dieser Queryvariablen liegt darin, dass die Ausführung komplett in der SAP HANA erfolgen kann. Damit ist es möglich, die Variablenlogik auch in den zu einer Query generierten, externen Views zu nutzen. Der Verarbeitungstyp SAP HANA Exit ist nur für Merkmalsvariablen mit genau einem Wert möglich. Diese können in den BW-Modeling Tools im BW angelegt werden. Der zughörige Code wird in einer AMDP-Klasse hinterlegt, die den BAdI RSROA_VAR_HANA_EXIT_BADI implementiert. Zuvor muss eine entsprechende Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT erfolgen. Das Vorgehen dazu ist am Ende dieses Beitrags unter “Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT” erklärt.

Der Verarbeitungszeitpunkt des Exits hängt von der Eingabebereitschaft der Variablen ab. Im Falle einer eingabebereiten Variablen berechnet der Exit einen Vorschlagswert vor der Anzeige der Parameterscreens. Falls die Variable nicht eingabebereit ist, so wird der Exit nach Erfassung der Input-Variablen durchlaufen. Entsprechend kann sich die Logik im Exit darauf beziehen.

Beschreibung des Konzepts

Ein Exit sie alle zu berechnen

Leider erinnert das Konzept der SAP HANA Exits für Queryvariablen wieder stark an das alte, ABAP-basierte Vorgehen. Hierbei gab es genau einen Exit für alle Variablen. Entsprechend musste dann irgend wie verzweigt werden, je nachdem, welche Variable gerade gefüllt werden soll.

Das gleiche Konzept wurde auch bei der SAP HANA Variante umgesetzt. Das bedeutet, es muss stets abgefragt werden, für welche Variable jetzt die Werte beschafft werden sollen. Aber immerhin, es kann mehrere BAdI-Implementierungen geben.

Die AMDP-Methoden

IF_RSROA_VAR_HANA_EXIT~PROCESS

Die AMDP-Methode PROCESS berechnet den Wert der Variablen und liefert ihn im Parameter C_VALUE zurück. Dazu können die Informationen aus den IMPORT-Parametern verwenden werden. Allerdings sind die Parameter mit den anderen Variablen relativ generisch gehalten. Dies können Sie auch gut an dem Screenshot mit der Signatur der Methode sehen:

![Schnittstelle / Signatur der AMDP-Methode PROCESS](/wp-content/uploads/2018/10/01_Parameter_von_Process.png)
Parameter der Methode IF_RSROA_VAR_HANA_EXIT~PROCESS

Neben den üblichen Informationen aus dem Kontext der Variablen kommen auch noch die Werte von bis zu 20 anderen Variablen mit in diesen Exit. Welche das genau sind, hängt wiederum von dem anderen Exit ab.

IF_RSROA_VAR_HANA_EXIT~GET_PROPERTIES

Diese AMDP-Prozedur liefert für jede Variable vom Typ SAP HANA Exit das passende Mapping von anderen Variablen zu den Parametern I_VAR_VALUE_XX der AMDP-Prozedur PROCESS. Die Signatur dafür sieht so aus:

![Parameter der Methode IF_RSROA_VAR_HANA_EXIT~GET_PROPERTIES](/wp-content/uploads/2018/10/01_parameter_von_get_properties.png)
Parameter der Methode IF_RSROA_VAR_HANA_EXIT~GET_PROPERTIES

Die Tabelle C_TS_VNAM_INDEX besteht aus zwei Spalten:

  • VNAM ist der Name der Variable, deren Wert in PROCESS übergeben werden soll
  • INDEX ist die zugehörige Nummer XX des Parameters I_VAR_VALUE_XX

Darüber hinaus wird dieser SAP HANA Exit noch aufgerufen, um zu ermitteln, ob die Implementierung für eine Kombination aus Reportingkomponente (I_COMPID) und Variable (I_VNAM) überhaupt aktiv ist. Entsprechend wird das Flag C_IS_ACTIVE gefüllt.

Ein einfaches Beispiel für einen SAP HANA Exit für eine Queryvariable

Die Bearbeitung des Quellcodes on AMDP-Prozeduren erfolge immer in den ABAP Development Tools (ADT) in der Eclipse Entwicklungsumgebung. Das folgende Beispiel bildet die Variable ZJB_CONCAT durch Verketteung der beiden Variablen ZJB_VAL1 und ZJB_VAL2 mit dem Präfix “Concatenated: “.

Die zugehörigen Variablen werden in den BW-Modeling Tools angelegt. Bei ZJB_CONCAT ist wichtig, den Verarbeitungstyp SAP HANA Exit zu wählen: 

![Parameterabfrage für einen neue Variable](/wp-content/uploads/2018/10/01_Variableneigenschaften.png)
Parameterabfrage für einen neue Variable

Danach muss für unser Beispiel noch die Eingabebereitschaft ausgestellt werden, da wir uns auf zwei eingabebereite Variablen beziehen.

Implementierung des Erweiterungsspots RSROA_VARIABLES_HANA_EXIT

Benötigte Zeit: 20 Minuten.

Der Erweiterungsspot RSROA_VARIABLES_HANA_EXIT muss genau einmal implementiert werden. Dazu wird eine Erweiterungsimplementierung angelegt, ein BAdI sammt zugehöriger BAdI-Klasse implementiert. Das Vorgehen ist im Folgenden beschrieben.

  1. Implementierung des Erweiterungsspots**

    Rufen Sie die Transaktion SE80 auf und wählen Sie das Erweiterungs-Infosystem. Wählen Sie den Objekttyp Erweiterungsspot aus und geben sie den Namen RSROAVARIABLES_HANA_EXIT ein.
    Durch Rechtsklick auf den Namen öffnet sich ein Kontextmenü (siehe Screenshot). Wählen Sie dort _Implementieren
    aus.

  2. Informationen für die Erweiterungsimplementierung erfassen

    Geben Sie einen Namen für die Erweiterungsimplementierung ein

  3. Implementierung des BAdI RSROA_VAR_HANA_EXIT_BADI anlegen

    Als nächstes müssen Sie die BAdI-Implementierung anlegen. Dazu geben Sie in dem Fenster einen geeigneten Namen für die BAdI-Implementierung und die zu generierende Klasse an.

  4. Implementierungsklasse für das Interface IF_RSROA_VAR_HANA EXIT anlegen

    In dem folgenden Pop-Up wählen Sie bitte aus, dass die Beispielklasse kopiert werden soll. Damit haben Sie alle notwendigen Interfaces samt etwas Beispielcode bereits in Ihrer BAdI-Klasse.

  5. Erweiterungsimplementierung aktivieren

    Jetzt müssen Sie Ihre Erweiterungsimplementierung samt BAdI-Klasse nur noch aktivieren.

  6. Status der Erweiterungsimplementierung prüfen

    Über die Checkbox können Sie festlegen, ob Ihre Erweiterungsimplementierung aktiv sein soll. Der aktuelle Status steht darunter.