Hvad er BADI i SAP ABAP?
⚡ Smart opsummering
BADI i SAP ABAP står for Business Add-In, en objektorienteret forbedring, der kobler brugerdefineret logik til standard SAP funktionalitet. Denne side forklarer, hvad en BADI er, dens funktioner, de klassiske og nye typer, SE18- og SE19-arbejdsgangen, og hvordan den kan sammenlignes med exits.
Hvad er BADI?
BADI står for Business Add Ins. Ligesom kundeudgange hjælper BADI med at koble brugerdefinerede forbedringer til SAP funktionalitet. Eksempel på en BADI: I transaktion CAT2 – Time Sheet Entry ønsker HR at inkludere en interaktiv anerkendelse af, at bevidst indsendelse af ukorrekte data er grund til afskedigelse. Dette kan opnås ved hjælp af BADI
Forskellen fra en klassisk exit er teknisk. En BADI er bygget på ABAP-objekter, så standardprogrammet kalder en interface-metode, og den brugerdefinerede kode findes i en klasse, der implementerer den metode. Derfor beskrives en BADI ofte som den objektorienterede efterfølger til kundeudgang.
Funktionalitet
- BADI'er er objektorienterede
- De kan implementeres flere gange
- Det kræver ikke SAP Software Skift registrering
- Ingen effekt på udgivelse opgraderet på funktionen af BADI'er
Disse fire funktioner forklarer hvorfor SAP anbefaler en BADI frem for en klassisk exit. Fordi forbedringen sidder i en separat klasse, overlever den en opgradering uberørt, og fordi en BADI kan defineres som flergangsbrug, kan flere teams forbedre det samme punkt uden at overskrive hinanden.
Typer af BADI
SAP tilbyder to generationer af Business Add-Ins. Den klassiske BADI er den forbedringsbaserede version beskrevet ovenfor, og den nye BADI, introduceret med SAP NetWeaver er en del af Enhancement Framework og er hurtigere og mere fleksibel.
| Kriterier | Klassisk BADI | Ny (kerne) BADI |
|---|---|---|
| Vedligeholdt i | SE18 og SE19 | Forbedringsværktøjet i et forbedringspunkt |
| Filtre | Enkle filterværdier | Filterkombinationer med logiske udtryk |
| Falde tilbage | Ikke tilgængelig | En standard fallback-klasse kører, når der ikke er nogen aktiv implementering |
| Instantiation | CL_EXITHANDLER=>GET_INSTANCE | GET BADI- og CALL BADI-sætningerne |
| Ydeevne | Langsommere, objekt oprettet ved hvert kald | Hurtigere, administreret af kernen |
Begge generationer findes og implementeres på en lignende måde, som beskrevet nedenfor.
Sådan definerer og implementerer du en BADI
Dette involverede tre trin
Trin 1) Oprettelse af BADI-definition og dens grænseflade: Transaktion SE18.
Trin 2) Opret BADI-implementeringen: Transaktion SE19
Trin 3) Definer en klasse, der implementerer grænsefladen: Under oprettelsen af implementeringen oprettes der også en klasse til implementering af forbedringens grænseflade.
I kode når standardprogrammet implementeringen gennem exit-handleren. Det klassiske mønster instantierer BADI-referencen og kalder derefter interface-metoden.
* 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: En ny, kernel BADI kaldes enklere med GET BADI og CALL BADI, som også håndterer filterværdierne automatisk. Brug SE18 til at kontrollere, om forbedringspunktet er en klassisk eller en ny BADI, før du skriver kaldet.
⚠️ Advarsel: Transaktion SE18 indeholder definitionen og grænsefladen, mens SE19 indeholder implementeringen. Oprettelse af implementeringen i SE18, eller definitionen i SE19, er en almindelig fejl, der efterlader BADI inaktiv.
BADI vs. kundeexit vs. brugerexit
Alle tre teknikker forbedrer standarden SAP, men de adskiller sig i teknologi og fleksibilitet. Tabellen nedenfor placerer BADI ved siden af de to ældre exit-teknikker.
| Kriterier | Brugerafslutning | Kundeudgang | BADI |
|---|---|---|---|
| Teknologier | Subrutine (FORM) | Funktionsmodul, skærm eller menu | Objektorienteret grænseflade og klasse |
| Anvendelsesområde | Kun SD-modul | Alle moduler | Alle moduler |
| Antal implementeringer | Én | Én | Multiple, når defineret som multipel brug |
| Vedligeholdt med | Direkte redigering af inkluderingen | SMOD og CMOD | SE18 og SE19 |
| Upgrade sikker | Tjekket med SPAU | Ja | Ja |
Den praktiske regel er at bruge en BADI, når en sådan findes, fordi den er objektorienteret, opgraderingssikker og kan implementeres mere end én gang.




