Czym jest BADI SAP ABAP?
⚡ Inteligentne podsumowanie
BADI w SAP ABAP to skrót od Business Add-In, czyli obiektowego rozszerzenia, które łączy niestandardową logikę ze standardową SAP Funkcjonalność. Ta strona wyjaśnia, czym jest BADI, jakie ma funkcje, jakie są klasyczne i nowe typy, przepływy pracy SE18 i SE19 oraz jak wypada w porównaniu z wyjściami.

Co to jest BADI?
BADI oznacza Business Add Ins. Podobnie jak wyjścia klientów, BADI pomaga w podłączaniu niestandardowych ulepszeń SAP funkcjonalność. Przykład BADI: W transakcji CAT2 – Time Sheet Entry, HR chce uwzględnić interaktywne potwierdzenie, że świadome przesłanie nieprawidłowych danych jest podstawą do zwolnienia. Można to osiągnąć za pomocą BADI
Różnica w stosunku do klasycznego wyjścia ma charakter techniczny. BADI jest zbudowane na obiektach ABAP, więc standardowy program wywołuje metodę interfejsu, a kod niestandardowy znajduje się w klasie, która implementuje tę metodę. Dlatego BADI jest często określane jako obiektowy następca wyjście klienta.
Udogodnienia
- BADI są zorientowane obiektowo
- Można je realizować wielokrotnie
- Nie wymaga SAP Oprogramowanie Zmień rejestrację
- Brak wpływu uaktualnionej wersji na funkcjonowanie BADI
Te cztery cechy wyjaśniają dlaczego SAP Zaleca BADI zamiast klasycznego wyjścia. Ponieważ ulepszenie znajduje się w osobnej klasie, przetrwa ono ulepszenie bez zmian, a ponieważ BADI można zdefiniować jako wielokrotnego użytku, kilka zespołów może ulepszyć ten sam punkt bez nadpisywania się nawzajem.
Rodzaje BADI
SAP oferuje dwie generacje dodatków biznesowych. Klasyczny BADI to wersja oparta na ulepszeniach opisana powyżej, a nowy BADI, wprowadzony wraz z SAP NetWeaver jest częścią Enhancement Framework i jest szybszy i bardziej elastyczny.
| kryteria | Klasyczny BADI | Nowy (jądro) BADI |
|---|---|---|
| Utrzymywane w | SE18 i SE19 | Konstruktor ulepszeń w miejscu ulepszeń |
| Filtry | Proste wartości filtrów | Kombinacje filtrów z wyrażeniami logicznymi |
| awaryjna | Niedostępne | Domyślna klasa zapasowa jest uruchamiana, gdy żadna implementacja nie jest aktywna |
| Instancja | CL_EXITHANDLER=>GET_INSTANCE | Polecenia GET BADI i CALL BADI |
| Wydajność | Wolniej, obiekt tworzony przy każdym wywołaniu | Szybciej, zarządzane przez jądro |
Oba pokolenia są odnajdywane i wdrażane w podobny sposób, co opisano poniżej.
Jak zdefiniować i wdrożyć BADI
Wymagało to trzech kroków
Krok 1) Tworzenie definicji BADI i jej interfejsu: Transakcja SE18.
Krok 2) Utwórz implementację BADI: Transakcja SE19
Krok 3) Zdefiniuj klasę implementującą interfejs: Podczas tworzenia implementacji tworzona jest również klasa implementująca interfejs rozszerzenia.
W kodzie standardowy program dociera do implementacji poprzez procedurę obsługi wyjścia. Klasyczny wzorzec tworzy instancję referencji BADI, a następnie wywołuje metodę interfejsu.
* 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.
💡 Wskazówka: Nowy, kernelowy BADI jest wywoływany prościej za pomocą GET BADI i CALL BADI, które również automatycznie obsługują wartości filtrów. Użyj SE18, aby sprawdzić, czy punkt rozszerzenia jest klasycznym, czy nowym BADI przed napisaniem wywołania.
⚠️ Ostrzeżenie: Transakcja SE18 zawiera definicję i interfejs, natomiast SE19 zawiera implementację. Tworzenie implementacji w SE18 lub definicji w SE19 to częsty błąd, który powoduje, że BADI pozostaje nieaktywne.
BADI vs. wyjście klienta vs. wyjście użytkownika
Wszystkie trzy techniki podnoszą standard SAP, ale różnią się technologią i elastycznością. Poniższa tabela umieszcza BADI obok dwóch starszych techniki wyjścia.
| kryteria | Wyjście użytkownika | Wyjście klienta | BADI |
|---|---|---|---|
| Technologia | Podprogram (FORMULARZ) | Moduł funkcyjny, ekran lub menu | Obiektowo zorientowany interfejs i klasa |
| Zakres | Tylko moduł SD | Wszystkie moduły | Wszystkie moduły |
| Liczba wdrożeń | jeden | jeden | Wielokrotny, gdy jest zdefiniowany jako wielokrotne użycie |
| Utrzymywane z | Bezpośrednia edycja dołączonego elementu | SMOD i CMOD | SE18 i SE19 |
| Upgrade "bezpiecznym" | Sprawdzono w SPAU | Tak | Tak |
Praktyczną zasadą jest używanie BADI, jeśli takie istnieje, ponieważ jest zorientowane obiektowo, można je uaktualniać i można je zaimplementować więcej niż jeden raz.



