Wat is BADI in SAP ABAP?

โšก Slimme samenvatting

BADI in SAP ABAP staat voor Business Add-In, een objectgeoriรซnteerde uitbreiding die aangepaste logica koppelt aan standaardfunctionaliteit. SAP Functionaliteit. Deze pagina legt uit wat een BADI is, de functies ervan, de klassieke en nieuwe typen, de SE18- en SE19-workflow en hoe deze zich verhoudt tot exits.

  • ๐Ÿงฉ Kerndefinitie: Een Business Add-In is een uitbreidingselement, vergelijkbaar met een klantuitgang, waarmee aangepaste functionaliteit aan standaardfunctionaliteit wordt toegevoegd. SAP zonder het te wijzigen.
  • ๐Ÿงฑ Objectgeoriรซnteerd: Een BADI definieert een interface, en de uitbreiding bevindt zich in een klasse die deze implementeert, in plaats van in een gereserveerde include.
  • ๐Ÿ” Meerdere implementaties: In tegenstelling tot een klantuitgang kan een BADI meerdere keren worden geรฏmplementeerd, wat geschikt is voor branchespecifieke oplossingen en landspecifieke versies.
  • ๐Ÿ”“ Upgrade Veilig: Een BADI heeft geen SAP Softwarewijzigingsregistratie wordt niet beรฏnvloed door een release-upgrade.
  • ๏ธ Definitie en implementatie: De definitie en interface worden aangemaakt in SE18, en de implementatie met de bijbehorende klasse wordt aangemaakt in SE19.
  • ๐Ÿ†• Klassiek en nieuw: De klassieke BADI is gebaseerd op uitbreidingen, terwijl de nieuwe kernel-BADI die in NetWeaver is geรฏntroduceerd, filters, fallback-klassen en betere prestaties toevoegt.

Wat is BADI in SAP ABAP

Wat is BADI?

BADI staat voor B Add INet als klantuitgangen helpen BADI's bij het koppelen van aangepaste verbeteringen aan SAP functionaliteit. Voorbeeld van een BADI: In transactie CAT2 โ€“ Time Sheet Entry wil HR een interactieve erkenning opnemen dat het willens en wetens indienen van onjuiste gegevens reden is voor ontslag. Dit kan worden bereikt met behulp van BADI

Voorbeeld van een BADI

Het verschil met een klassieke exit is technisch. Een BADI is gebouwd op ABAP-objecten, waardoor het standaardprogramma een interfacemethode aanroept en de aangepaste code zich bevindt in een klasse die die methode implementeert. Daarom wordt een BADI vaak beschreven als de objectgeoriรซnteerde opvolger van de klassieke exit. klantuitgang.

Kenmerken

  • BADI's zijn objectgeoriรซnteerd
  • Ze kunnen meerdere keren worden geรฏmplementeerd
  • Het vereist niet SAP Software Registratie wijzigen
  • Geen effect op de werking van BADI's na de release-upgrade

Deze vier kenmerken verklaren waarom SAP Het wordt aanbevolen om een โ€‹โ€‹BADI te gebruiken in plaats van een klassieke exit. Omdat de verbetering zich in een aparte klasse bevindt, blijft deze ongewijzigd na een upgrade. Bovendien kan een BADI voor meervoudig gebruik worden gedefinieerd, waardoor meerdere teams hetzelfde punt kunnen verbeteren zonder elkaar te overschrijven.

Soorten BADI

SAP biedt twee generaties Business Add-Ins. De klassieke BADI is de op uitbreidingen gebaseerde versie die hierboven is beschreven, en de nieuwe BADI, geรฏntroduceerd met SAP NetWeaver maakt deel uit van het Enhancement Framework en is sneller en flexibeler.

criteria Klassieke BADI Nieuwe (Kernel) BADI
Onderhouden in SE18 en SE19 De verbeteringsbouwer binnen een verbeteringsgebied
Filters Eenvoudige filterwaarden Filter combinaties met logische expressies
fallback Niet beschikbaar Een standaard fallback-klasse wordt uitgevoerd wanneer er geen implementatie actief is.
Instantie CL_EXITHANDLER=>GET_INSTANCE De GET BADI- en CALL BADI-verklaringen
Prestaties Trager, object wordt bij elke aanroep aangemaakt Sneller, beheerd door de kernel

Beide generaties worden op een vergelijkbare manier gevonden en geรฏmplementeerd, zoals hierna wordt beschreven.

Hoe definieer en implementeer je een BADI?

Dit omvatte drie stappen

Stap 1) Het definiรซren van een BADI en de bijbehorende interface: Transactie SE18.

Definieer en implementeer een BADI

Stap 2) Maak de BADI-implementatie aan: transactie SE19

Definieer en implementeer een BADI

Stap 3) Definieer een klasse die de interface implementeert: Tijdens het aanmaken van de implementatie wordt ook een klasse aangemaakt die de interface van de uitbreiding implementeert.

In de code bereikt het standaardprogramma de implementatie via de exit-handler. Het klassieke patroon instantieert de BADI-referentie en roept vervolgens de interfacemethode aan.

* Reference typed with the BADI interface
DATA: lo_badi TYPE REF TO zif_ex_badi_demo.

* Get the active implementation(s)
CALL METHOD cl_exithandler=>get_instance
  CHANGING
    instance = lo_badi.

* Call the interface method that carries the custom logic
CALL METHOD lo_badi->check_data
  EXPORTING
    is_input = ls_input.

๐Ÿ’กTip: Een nieuwe, kernel-BADI wordt eenvoudiger aangeroepen met GET BADI en CALL BADI, die ook de filterwaarden automatisch verwerken. Gebruik SE18 om te controleren of het uitbreidingspunt een klassieke of een nieuwe BADI is voordat u de aanroep schrijft.

โš ๏ธ Waarschuwing: Transactie SE18 bevat de definitie en de interface, terwijl SE19 de implementatie bevat. Het aanmaken van de implementatie in SE18 of de definitie in SE19 is een veelgemaakte fout die ertoe leidt dat de BADI inactief blijft.

BADI versus klantuitgang versus gebruikersuitgang

Alle drie de technieken verbeteren de standaard. SAPMaar ze verschillen in technologie en flexibiliteit. In de onderstaande tabel wordt de BADI naast de twee oudere modellen geplaatst. exit-technieken.

criteria Gebruikersuitgang Klanten verlaten BADI
Technologie Subroutine (FORMULIER) Functiemodule, scherm of menu Objectgeoriรซnteerde interface en klasse
strekking Alleen SD-module Alle modules Alle modules
Aantal implementaties One One Meerdere, wanneer gedefinieerd als meervoudig gebruik
Onderhouden met Directe bewerking van de include SMOD en CMOD SE18 en SE19
Upgrade veilig Gecontroleerd met SPAU Ja Ja

De praktische regel is om een โ€‹โ€‹BADI te gebruiken wanneer deze beschikbaar is, omdat deze objectgeoriรซnteerd is, upgradebestendig en meermaals geรฏmplementeerd kan worden.

Veelgestelde vragen

SE18 is de BADI Builder, waar de definitie en de bijbehorende interface worden gemaakt. SE19 is de Implementation Builder, waar een implementerende klasse aan die definitie wordt gekoppeld. De ene definieert de hook, de andere vult deze in.

Een BADI voor meervoudig gebruik maakt het mogelijk dat er meer dan รฉรฉn actieve implementatie tegelijk actief is, en deze worden allemaal uitgevoerd wanneer de methode wordt aangeroepen. Een BADI voor eenmalig gebruik staat slechts รฉรฉn actieve implementatie toe.

Plaats een breakpoint op CL_EXITHANDLER=>GET_INSTANCE, voer de transactie uit en lees de BADI-naam uit de parameter EXIT_NAME. Zoek voor nieuwe BADI's naar de uitbreidingslocaties van het programma in het Repository Information System.

Ja. AI-assistenten in ABAP-ontwikkeltools stellen de implementerende klasse, de methodebody en de filterlogica op basis van een beschrijving van de vereisten samen. Een ontwikkelaar activeert de implementatie vervolgens nog in SE19 en test deze.

AI-adviseurs analyseren het standaardprogramma en rapporteren welke verbeteringsmogelijkheden er zijn. Vervolgens bevelen ze de nieuwe BADI aan binnen een verbeteringsgebied voor nieuwe taken.ping De klassieke BADI, waar alleen die optie wordt aangeboden.

Vat dit bericht samen met: