
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.
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.
Der Filter ist nun als Eigenschaft unter dem BAdI sichtbar.
Ein neues Dialogfenster wird geöffnet:
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'.
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.