[ABAP] Breakpoints im Code setzen

Variante 1 (nutzerspezifischer Breakpoint)

* BREAK ist ein vordefiniertes Makro aus der Tabelle TRMAC
* Breakpoint wird nur getriggert, wenn Benutzer eingeloggt und Debugger-Rechte besitzt
BREAK <username>.

Variante 2 (Checkpoint-Gruppe mit Transaktion SAAB)

* flexibel in der Transaktion SAAB aktivierbar oder deaktivierbar
* Entwickler muss Berechtigung für Transaktion SAAB haben
BREAK-POINT ID <checkpoint>

Links

[ABAP] Quellcode Scan / Analyse

* https://blogs.sap.com/2019/04/22/how-to-scan-abap-code/

PARAMETERS: p_prog TYPE trdir-name DEFAULT 'SAPLSD_ENTRY'. " (SE11)

START-OF-SELECTION.

* Code Inspector: Quelltext für Include
  DATA(o_si) = cl_ci_source_include=>create( p_name = p_prog ).
* Code Inspector: Quelltext für SCAN  erzeugen
  DATA(o_scan) = NEW cl_ci_scan( p_include = o_si ).

* Include-Zeilen
  cl_demo_output=>write_data( o_si->lines ).
* Tokens
  cl_demo_output=>write_data( o_scan->tokens ).
* Anweisungen
  cl_demo_output=>write_data( o_scan->statements ).

* Verknüpfung Statements -> Tokens
* Statements
  LOOP AT o_scan->statements ASSIGNING FIELD-SYMBOL(<s>).

    DATA(idx) = sy-tabix.

* Tokens
    LOOP AT o_scan->tokens ASSIGNING FIELD-SYMBOL(<t>) FROM <s>-from TO <s>-to.
      cl_demo_output=>write_data( value = <t>-str name = |Statement { idx }| ).
    ENDLOOP.

    cl_demo_output=>line( ).

  ENDLOOP.

*   HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

*   Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING
                                title        = 'Code'
                                html_string  = lv_html
                                container    = cl_gui_container=>default_screen ).

*   cl_gui_container=>default_screen erzwingen
  WRITE: space.

[ABAP] ABAP Programmdokumentation

SE80

  • Menü -> Springen -> Dokumentation

Abschnitte

  • Kurztext (Programmeigenschaften -> Titel (Kurztext))
  • Verwendung (&PURPOSE&)
  • Integration (&INTEGRATION&)
  • Voraussetzungen (&PREREQUISITES&)
  • Funktionsumfang (&FEATURES&)
  • Selektion (&SELECTION&)
  • Standardvarianten (&STANDARD_VARIANTS&)
  • Ausgabe (&OUTPUT&)
  • Aktivitäten (&ACTIVITIES&)
  • Beispiel (&EXAMPLE&)

[ABAP] Code-Vorlagen (ABAP Code Templates)

Im ABAP-Code Editor kann man sich Vorlagen (Templates) definieren: Using Code Templates oder auch berater-wiki.de

ifs (if mit sy-subrc)

IF sy-subrc = 0.
%SurroundedText%  |
ENDIF.

wri

WRITE: / |.

loop (einfacher LOOP it Feldsymbol)

LOOP AT %TABLE NAME% ASSIGNING FIELD-SYMBOL(<e>).
  |
ENDLOOP.

types (Struktur- und Tabellentyp)

TYPES : BEGIN OF ty_s_%TYPE NAME%,
%SurroundedText%          |
        END OF ty_s_%TYPE NAME%.

TYPES: ty_it_%TYPE NAME% TYPE STANDARD TABLE OF ty_s_%TYPE NAME% WITH DEFAULT KEY.

cla (lokale Klasse mit Constructor)

CLASS lcl_%CLASS_NAME% DEFINITION.
  PUBLIC SECTION.

    METHODS: constructor.

    METHODS: set_value
      IMPORTING
        par1 TYPE string.

    METHODS: get_value
      RETURNING VALUE(rv_ret) TYPE i.

  PRIVATE SECTION.
    DATA: gv_data TYPE i.
ENDCLASS.

CLASS lcl_%CLASS_NAME% IMPLEMENTATION.
  METHOD constructor.
  ENDMETHOD.

  METHOD set_value.
    gv_data = par1.
  ENDMETHOD.

  METHOD get_value.
    rv_ret = gv_data.
  ENDMETHOD.
ENDCLASS.

salv (SALV-Table mit Grundeinstellungen)

|
TRY.
* SALV-Table
    DATA: o_salv TYPE REF TO cl_salv_table.
  
    cl_salv_table=>factory( IMPORTING
                              r_salv_table   = o_salv
                            CHANGING
                              t_table        = %TABLE NAME% ).
  
* Grundeinstellungen
    o_salv->get_functions( )->set_all( abap_true ).
    o_salv->get_columns( )->set_optimize( abap_true ).
    o_salv->get_display_settings( )->set_list_header( 'Überschrift' ).
    o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
    o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).
  
* Spaltenüberschriften: technischer Name und Beschreibungstexte, Short Text und Medium Text leer lassen für Autosize
    LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
      DATA(o_col) = <c>-r_column.
      o_col->set_short_text( || ).
      o_col->set_medium_text( || ).
      o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
    ENDLOOP.
  
    o_salv->display( ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

rem (Methodensignatur aus Eclipse)

|
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Public Method methodname - Text1
* |                            Text2
* |                            Text3
* +-------------------------------------------------------------------------------------------------+
* | [--->] i_var1  - Text1
* | [--->] i_var2  - Text2
* | [<---] ret_var - Text3
* +--------------------------------------------------------------------------------------</SIGNATURE>

cld (cl_demo_output in Vollbilddarstellung)

* Hier Objekte für die Ausgabe hinzufügen
cl_demo_output=>write_data( | ).

* HTML-Code vom Demo-Output holen
DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING
                              title        = 'Daten'
                              html_string  = lv_html
                              container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
WRITE: space.

[ABAP] Eclipse-ADT Codeschnipsel für Methoden-Signatur

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Public Method methodname - Text1
* |                            Text2
* |                            Text3
* +-------------------------------------------------------------------------------------------------+
* | [--->] i_var1  - Text1
* | [--->] i_var2  - Text2
* | [<---] ret_var - Text3
* +--------------------------------------------------------------------------------------</SIGNATURE>

[ABAP] Debuggen in Popup-Fenstern

  1. Text-Datei auf dem Desktop erstellen mit folgendem Inhalt
    [FUNCTION]
    Command=/H
    Title=Debugger
    Type=SystemCommand
    
  2. zu debuggendes ABAP-Programm ausführen und wenn das zu debuggende Popup hoch kommt -> per Drag&Drop die Text-Datei auf das Popupfenster ziehen

Links

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