[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.

[ABAP] OO: Implementation einer Singleton-Klasse

* Singleton-Klasse, kann durch den Zusatz CREATE PRIVATE nur sich selbst instanziieren
* stellt einen Spezialfall einer Factory-Klasse dar
CLASS lcl_singleton DEFINITION CREATE PRIVATE.
  PUBLIC SECTION.
* Statischer Konstruktor, wird nur einmal aufgerufen
* erzeugt genau eine Referenz auf Singleton-Objekt
    CLASS-METHODS:
      class_constructor.

* Factory-Methode -> Gibt immer die gleiche Referenz auf Singleton-Objekt zurück
    CLASS-METHODS:
      get_instance RETURNING VALUE(ret_singleton) TYPE REF TO lcl_singleton.

* Testmethode, gibt eine GUID zurück
    METHODS:
      get_guid RETURNING VALUE(ret_guid) TYPE sysuuid_c32.

  PRIVATE SECTION.
* Referenz auf Singleton-Objekt
    CLASS-DATA: o_singleton TYPE REF TO lcl_singleton.
ENDCLASS.

CLASS lcl_singleton IMPLEMENTATION.
* Statischer Konstruktor, wird nur einmal aufgerufen
* erzeugt genau eine Referenz auf Singleton-Objekt
  METHOD class_constructor.
    o_singleton = NEW #( ).
  ENDMETHOD.

* Factory-Methode -> Gibt immer die gleiche Referenz auf Singleton-Objekt zurück
  METHOD get_instance.
    ret_singleton = o_singleton.
  ENDMETHOD.

* Testmethode, gibt eine GUID zurück
  METHOD get_guid.
    TRY.
        ret_guid = cl_system_uuid=>create_uuid_c32_static( ).
      CATCH cx_root.
    ENDTRY.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  DATA(o_ref) = lcl_singleton=>get_instance( ).

  WRITE: / |{ o_ref->get_guid( ) }|.

[ABAP] Fortschrittsanzeige anzeigen

Variante 1 (cl_progress_indicator)

PARAMETERS: p_times1 TYPE i DEFAULT 15.

DO p_times1 TIMES.
  cl_progress_indicator=>progress_indicate( i_text               = |Fortschritt { sy-index } / { p_times1 }|
                                            i_processed          = sy-index     " Wert
                                            i_total              = p_times1     " Maximum
                                            i_output_immediately = abap_true ). " true -> sofort, false -> aller 10s darstellen

  WAIT UP TO 1 SECONDS.
ENDDO.

Variante 2 (cl_akb_progress_indicator)

CONSTANTS: co_max TYPE i VALUE 1000000.

START-OF-SELECTION.
  DATA(o_progress) = cl_akb_progress_indicator=>get_instance( ).

  DO co_max TIMES.
    o_progress->display( force_display = abap_false
                         total         = co_max
                         processed     = sy-index
                         message       = 'Bitte warten...' ).
  ENDDO.

Variante 3 (SAPGUI_PROGRESS_INDICATOR)

DATA: index TYPE i.
DO 20 TIMES.
  index = sy-index * 5.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = index
      text       = 'Bitte warten ...'.

  WAIT UP TO 1 SECONDS.
ENDDO.