[ABAP] Breakpoints im Code setzen

* Breakpoint im Code setzen, immer aktivieren
BREAK-POINT.

* wenn Benutzer 'XYZ' angemeldet ist, Breakpoint auslösen 
BREAK XYZ.

* wenn Benutzer 'XYZ' angemeldet ist, Breakpoint auslösen
IF sy-uname EQ 'XYZ'.
  BREAK-POINT.
ENDIF.

* Transaktion SAAB: Editieren von Checkpoint-Gruppen und zugehörigen Aktivierungsvarianten.
BREAK-POINT ID ZTEST.

[ABAP] Referenzen, Dereferenzierung, Feldsymbole, Typecast

* allg. Referenz auf irgendwas (data)
DATA: lo_data TYPE REF TO data.

* Referenz auf den allg. Typ object
DATA: lo_obj TYPE REF TO object.

* allg. Feldsymbol
FIELD-SYMBOLS: <fs_any> TYPE ANY.

* dynamic Typecast
lo_obj ?= <fs_any>.

IF lo_obj IS BOUND. " != null
  " lo_obj ist instanziiert

  " Dereferenzierung, Wert an der Stelle der Referenz
  lo_obj->* ...
ELSE.
  " lo_obj ist nicht instanziiert
ENDIF.

[ABAP] Interne Tabelle nach XML exportieren

DATA: ti_t100 TYPE STANDARD TABLE OF t100.
DATA: lv_xml TYPE string.

* Daten abfragen
SELECT * FROM t100 INTO TABLE ti_t100 UP TO 10 ROWS.

* interne Tabelle in XML-String wandeln
CALL TRANSFORMATION id SOURCE data_node = ti_t100 RESULT XML lv_xml.

* Versionsinfo wegschneiden, damit in Excel die Spalte "Version" nicht erscheint
REPLACE FIRST OCCURRENCE OF | version="1.0">| IN ls_xml WITH '>'.

* XML-String in XML-Document wandeln
DATA(lo_xml_doc) = NEW cl_xml_document( ).
lo_xml_doc->parse_string( lv_xml ).

* XML-Document als Datei speichern
lo_xml_doc->export_to_file( 'c:\temp\test.xml' ).

WRITE: / |XML-Datei exportiert.|.

[ABAP] SALV-Table: Funktionsbuttons hinzufügen

Variante 1 (nur wenn in eigenem Dynpro + Container)

SELECT * FROM sflights INTO TABLE @DATA(it_data).

DATA: o_salv TYPE REF TO cl_salv_table.

cl_salv_table=>factory( EXPORTING
                          r_container  = cl_gui_container=>default_screen " Standard-Container der Listausgabe nutzen
                        IMPORTING
                          r_salv_table = o_salv
                        CHANGING
                          t_table      = it_data ).

o_salv->get_functions( )->set_all( ).

* Für diesen Button muss zus. noch ein Event-Handler ausgeprägt werden
o_salv->get_functions( )->add_function( name     = 'MYFUNC'
                                        icon     = |{ icon_complete }|
                                        text     = 'Funktionstext'
                                        tooltip  = 'ToolTipText'
                                        position = if_salv_c_function_position=>right_of_salv_functions ).

o_salv->display( ).

* Erzwingen von cl_gui_container=>default_screen (Listausgabe)
WRITE space.

Variante 2 (PF_STATUS)

* ohne Angabe eines Containers in der factory-Methode:
SELECT * FROM sflights INTO TABLE @DATA(it_data).

DATA: o_salv TYPE REF TO cl_salv_table.

cl_salv_table=>factory( IMPORTING
                          r_salv_table = o_salv
                        CHANGING
                          t_table      = it_data ).

* PF-Status aus Programm SAPLSLVC_FULLSCREEN benutzen
o_salv->set_screen_status( pfstatus      = 'STANDARD_FULLSCREEN'
                           report        = 'SAPLSLVC_FULLSCREEN'
                           set_functions = cl_salv_model_base=>c_functions_all ).

o_salv->display( ).

oder

SELECT * FROM sflights INTO TABLE @DATA(it_data).

DATA: o_salv TYPE REF TO cl_salv_table.

cl_salv_table=>factory( IMPORTING
                          r_salv_table = o_salv
                        CHANGING
                          t_table      = it_data ).

* PF-Status manuelle aus Funktionsgruppe SALV_METADATA_STATUS kopieren
* im lokalen Programm (sy-repid) aufrufen
o_salv->set_screen_status( pfstatus      = 'SALV_TABLE_STANDARD'
                           report        = sy-repid
                           set_functions = cl_salv_model_base=>c_functions_all ).

o_salv->display( ).

[ABAP] SALV-Table Eventhandling

* mögliche Events sind:
* SET HANDLER gr_events->on_user_command FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_before_user_command FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_after_user_command FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_double_click FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_top_of_page FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_end_of_page FOR o_alv->get_event( ).
 
* Klasse für Eventhandling definieren
CLASS lcl_events DEFINITION.
  PUBLIC SECTION.
* Doppelklick
    CLASS-METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING
          row
          column
          sender.
* Link-Klick
    CLASS-METHODS: on_link_click FOR EVENT link_click OF cl_salv_events_table
      IMPORTING
          row
          column
          sender.
ENDCLASS.
 
CLASS lcl_events IMPLEMENTATION.
  METHOD on_double_click.
    MESSAGE | { row } , { column } | TYPE 'I'.
  ENDMETHOD.
  METHOD on_link_click.
    MESSAGE | { row } , { column } | TYPE 'I'.
  ENDMETHOD.
ENDCLASS.
 
DATA: o_salv TYPE REF TO cl_salv_table.

...
 
* Handler registrieren
SET HANDLER lcl_events=>on_double_click FOR o_salv->get_event( ).
SET HANDLER lcl_events=>on_link_click FOR o_salv->get_event( ).