[ABAP] Übersicht SAP-Programmerweiterungen

Übersicht

Typ                         Objekt                Transaktion       Bemerkung

User-Exit                   Unterprogramm (FORM)  SPDD, SPAM, SPAU  Modifikation
Customer-Exit               Funktionsbaustein     SMOD, CMOD        Erweiterung
Business Transaction Event  Funktionsbaustein                       Erweiterung
Business Add In (BAdI)      Interface, Klasse     SE18, SE19        Erweiterung
Enhancement Points          Interface, Klasse     SE18, SE19        Erweiterung, Verwaltung durch Enhancement Framework (+neue und alte BAdIs)

User-Exit

PERFORM userexit_<name>.

* z.B. Include MV45AFZB (vom SAP-Entwickler bereitgestellt)
FORM userexit_<name>.
ENDFORM.

Customer-Exit

Infos zu Customer-Exits: Link

CALL CUSTOMER-FUNCTION '001'
  EXPORTING
    ...
  IMPORTING
    ...

* Aufruf Include mit Quelltext
FUNCTION-POOL XYZ.
  FUNCTION exit_<programm_name>_001.
    ...
    INCLUDE zxaaau01.
    ...
  ENDFUNCTION.

BAdI

Infos zu BAdIs: Link
Infos zu BADI_SORTER: Link

* Objektreferenz für Methoden des BAdI-Interfaces
cl_exithandler=>get_instance( )
* Methoden der BAdI-Erweiterung aufrufen
o_badi->method_abc( )

* Tabellen
* SXS_ATTR (Feld EXIT_NAME, ACTIVE = 'X')
* SXC_ATTR (Feld EXIT_NAME)
* SXS_ATTRT (Feld EXIT_NAME)
* SXC_EXIT (Feld EXIT_NAME, IMP_NAME)

* Abarbeitungsrreihenfolge über Implementierung von BADI_SORTER erzwingen

Enhancement-Points

Infos zu Enhancement-Points: Link

* keine Import/Export-Schnittstelle
* implizit: automatisch vorhandene Absprungpunkte (z.B. Anfang/Ende des Quellcodes)
*           im Menu einblendbar
* explizit: von SAP vorbereitete Absprungpunkte
ENHANCEMENT-POINT EP_A SPOTS ESPOT_X.
  ...

ENHANCEMENT-SECTION ES_B SPOTS ESPOT_X.
  ...
END-ENHANCEMENT-SECTION.

[SAP] BAdIs für eine Transaktion ermitteln

SE24

  • Klassenname ‚CL_EXITHANDLER‘ als Objekttyp eingeben
  • Button ‚Anzeigen‘ klicken
  • Tab ‚Methoden‘ -> Methode ‚GET_INSTANCE‘ doppelklicken
  • im Code bei ‚CALL METHOD cl_exithandler=>get_class_name_by_interface‘ einen Breakpoint setzen
  • gewünschte Transaktion in neuem Modus ausführen
  • der Debugger hält dann ggf. an -> Parameter ‚EXIT_NAME‘ beinhaltet den BAdI-Namen

SE80

  • Funktionsbaustein: SXV_GET_CLIF_BY_NAME
  • Breakpoint bei Funktionsbaustein SXV_ADD_PREFIX
  • neuer Modus
  • entsprechenden Transaktionscode aufrufen
  • die Parameter von SXV_ADD_PREFIX beinhalten die entspr. BAdI-Name und deren Klassen