Vad är BADI i SAP ABAP?
⚡ Smart sammanfattning
BADI i SAP ABAP står för Business Add-In, en objektorienterad förbättring som kopplar anpassad logik till standard SAP funktionalitet. Den här sidan förklarar vad en BADI är, dess funktioner, de klassiska och nya typerna, arbetsflödena SE18 och SE19 och hur den jämförs med utgångar.
Vad är BADI?
BADI står för Banvändbarhet Add Ins. Precis som kundutgångar hjälper BADI till att koppla anpassade förbättringar till SAP funktionalitet. Exempel på en BADI: I transaktionen CAT2 – Time Sheet Entry vill HR inkludera en interaktiv bekräftelse på att att medvetet skicka in felaktiga uppgifter är skäl för uppsägning. Detta kan uppnås med BADI
Skillnaden från en klassisk exit är teknisk. En BADI är byggd på ABAP-objekt, så standardprogrammet anropar en gränssnittsmetod, och den anpassade koden finns i en klass som implementerar den metoden. Det är därför en BADI ofta beskrivs som den objektorienterade efterföljaren till den kundutgång.
Funktioner
- BADI:s är objektorienterade
- De kan implementeras flera gånger
- Det kräver inte SAP Mjukvara Ändra registrering
- Ingen effekt på uppgraderad version på BADI:s funktion
Dessa fyra egenskaper förklarar varför SAP rekommenderar en BADI framför en klassisk exit. Eftersom förbättringen sitter i en separat klass, överlever den en uppgradering orörd, och eftersom en BADI kan definieras som multipel användning kan flera team förbättra samma punkt utan att skriva över varandra.
Typer av BADI
SAP erbjuder två generationer av Business Add-ins. Den klassiska BADI är den förbättringsbaserade versionen som beskrivs ovan, och den nya BADI, som introduceras med SAP NetWeaver är en del av Enhancement Framework och är snabbare och mer flexibelt.
| Kriterier | Klassisk BADI | Ny (kärna) BADI |
|---|---|---|
| Underhålls i | SE18 och SE19 | Förbättringsverktyget inuti en förbättringspunkt |
| Filter | Enkla filtervärden | Filterkombinationer med logiska uttryck |
| Retirera | Ej tillgänglig | En standardmässig reservklass körs när ingen implementering är aktiv |
| Instantiering | CL_EXITHANDLER=>HÄMTA_INSTANS | GET BADI- och CALL BADI-satserna |
| Prestanda | Långsammare, objekt skapas vid varje anrop | Snabbare, hanteras av kärnan |
Båda generationerna hittas och implementeras på ett liknande sätt, vilket beskrivs nedan.
Hur man definierar och implementerar en BADI
Detta innebar tre steg
Steg 1) Skapa BADI-definition och dess gränssnitt: Transaktion SE18.
Steg 2) Skapa BADI-implementeringen: Transaktion SE19
Steg 3) Definiera en klass som implementerar gränssnittet: Under skapandet av implementeringen skapas även en klass för att implementera förbättringens gränssnitt.
I kod når standardprogrammet implementeringen via exit handler. Det klassiska mönstret instansierar BADI-referensen och anropar sedan 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.
💡 Tips: En ny, kärnbaserad BADI anropas enklare med GET BADI och CALL BADI, vilka också hanterar filtervärdena automatiskt. Använd SE18 för att kontrollera om förbättringspunkten är en klassisk eller en ny BADI innan anropet skrivs.
⚠️ Varning: Transaktion SE18 innehåller definitionen och gränssnittet, medan SE19 innehåller implementeringen. Att skapa implementeringen i SE18, eller definitionen i SE19, är ett vanligt misstag som lämnar BADI inaktiv.
BADI vs Kundutgång vs Användarutgång
Alla tre teknikerna förbättrar standarden SAP, men de skiljer sig åt i teknik och flexibilitet. Tabellen nedan placerar BADI bredvid de två äldre exittekniker.
| Kriterier | Användarutgång | Kundutgång | BADI |
|---|---|---|---|
| Teknologi | Subrutin (FORM) | Funktionsmodul, skärm eller meny | Objektorienterat gränssnitt och klass |
| Omfattning | Endast SD-modul | Alla moduler | Alla moduler |
| Antal implementeringar | One | One | Flera, när de definieras som flerfaldig användning |
| Underhålls med | Direkt redigering av inkluderingen | SMOD och CMOD | SE18 och SE19 |
| Upgrade säker | Kontrollerad med SPAU | Ja | Ja |
Den praktiska regeln är att använda en BADI närhelst en sådan finns, eftersom den är objektorienterad, uppgraderingssäker och kan implementeras mer än en gång.




