Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt Filter verwenden  Dokument im Navigationsbaum lokalisieren

Wie bereits im vorherigen Schritt angesprochen (BAdIs implementieren), müssen Sie nun einen Weg finden, wie Sie zwischen verschiedenen BAdI-Implementierungen wählen können. Dazu benötigen Sie den BAdI-Filter.

Sie müssen dazu die BAdI-Definition ändern. Für ein BAdI können Sie einen oder viele Filter definieren. Für unsere Zwecke reicht es, nur einen Filter anzulegen. In diesem Schritt werden Sie den Filter in der BAdI-Definition anlegen, Filterwerte für die entsprechende BAdI-Implementierung festlegen und den Filter in der Instanziierung des BAdI-Handles benutzen.

Hinweis

Wenn Sie Änderungen an Ihrem Beispiel vornehmen, berücksichtigen Sie nicht die Unterscheidung in BAdI-Provider und BAdI-Implementierer. In der Praxis definiert der BAdI-Provider den Filter eines BAdIs oder fügt einem bestehenden BAdI einen Filter hinzu. In dieser Rolle wird auch die Filterbedingung benutzt, um die entsprechende BAdI-Implementierung im ABAP-Quelltext auszuwählen. Die Implementier-Rolle legt die Filterwerte oder ein Intervall für eine oder viele BAdI-Implementierungen fest.

...

       1.      Navigieren Sie zu Ihrem Erweiterungsspot und öffnen Sie das Register Erw.spot-Elementdefinitionen, das eine Liste mit allen Erweiterungselementen des Spots anzeigt.

       2.      Wechseln Sie in den Bearbeitungsmodus, wählen Sie Ihr BAdI aus der Liste und wählen Sie in der kleinen Symbolleiste BadI-Teilobjekt anlegen und anschließend Filter.

Diese Grafik wird im zugehörigen Text erklärt

       3.      Das folgende Dialogfenster wird angezeigt. Füllen Sie die entsprechenden Felder aus:

Diese Grafik wird im zugehörigen Text erklärt

       4.      Bestätigen Sie Ihre Eingaben.

Der Filter ist nun als Eigenschaft unter dem BAdI sichtbar.

       5.      Aktiveren Sie den Erweiterungsspot, öffnen Sie die Implementierung mit einem Doppelklick und navigieren Sie zu der gewünschten BAdI-Implementierung, indem Sie die entsprechende Zeile in der Tabelle der BAdI-Implementierungen doppelt anklicken.

Diese Grafik wird im zugehörigen Text erklärt

       6.      Wechseln Sie in den Bearbeitungsmodus. Öffnen Sie dann in der Baumstruktur das Dreieck vor der BAdI-Implementierung mit einem Doppelklick und doppelklicken Sie ebenfalls auf das darunter liegende Filter-Symbol.

       7.      Auf dem Bild Filterwerte wählen Sie die Drucktaste Filterkombination anlegen.

       8.      In diesem Fall soll nach Ländern gefiltert werden. Bestätigen Sie.

       9.      Öffnen Sie die Zeile unter Kombination 1 mit einem Doppelklick.

Diese Grafik wird im zugehörigen Text erklärt

Ein neues Dialogfenster wird geöffnet:

Diese Grafik wird im zugehörigen Text erklärt

 

   10.      Aktivieren Sie die (einfache) Erweiterungsimplementierung und gehen Sie zurück zu dem Spot.

Sie müssen auch für die andere Implementierung (USA) entsprechende Filterwerte definieren. Gehen Sie daher zur entsprechenden (einfachen) Erweiterungsimplementierung und ändern Sie die BAdI-Implementierung genau so, wie Sie es vorher getan haben. Der Filterwert für dieses Land ist 'US’.

   11.      Gehen Sie zurück in Ihr Programm und passen Sie es an das modifizierte BAdI an. Die Syntaxprüfung zeigt Ihnen, dass Sie einen Filterparameter im Befehl GET BADI benötigen, wenn für das zu instanzierende BAdI ein Filter gesetzt wurde. Ergänzen Sie den Befehl GET BADI mit FILTERS. Fügen Sie nach diesem Schlüsselwort den Namen des BAdI-Filters ein und einen Wert, mit dem der Filter verglichen wird. Achten Sie auch darauf, dass ein passender Wert an die Routine GET BADI übergeben wird:

REPORT  Z_DEMO_ENH.

parameters: ctry(2) type c.

DATA: handle TYPE REF TO z_badi_calc_vat,

sum TYPE p,

vat TYPE p,

percent TYPE p.

sum = 50.

GET BADI handle FILTERS Country = ctry.

CALL BADI handle->get_vat

  EXPORTING im_amount = sum

  IMPORTING ex_amount_vat = vat

         ex_percent_vat = percent.

WRITE: 'percentage:', percent, 'VAT:' ,vat.

Wenn Sie GB an den Parameter ctry übergeben, ergibt sich eine Mehrwertsteuer von 17,5 Prozent. Ist US der Wert des Parameters ctry, ergibt sich eine Mehrwertsteuer von 4 Prozent. Hat der Parameter ctry einen anderen Wert, wird trotzdem ein Wert für das Datenfeld Prozent berechnet. Der Grund dafür ist die Fallback-Klasse Ihres BAdIs. Die Fallback-Klasse wird nicht nur dann ausgewählt, wenn keine BAdI-Implementierung verfügbar ist, sondern auch, wenn keine der vorhandenen BAdI-Implementierungen die Filterbedingungen im Befehl GET BADI erfüllt. Dementsprechend erhalten Sie eine Mehrwertsteuer von 20 Prozent, die dem Satz, den Sie in der Methode get_vat in der Fallback-Klasse implementiert haben, entspricht.

 

 

 

Ende des Inhaltsbereichs