[ABAP] GUI-Elemente ohne Dynprodefinition anzeigen

Variante 1 (Listausgabe mit WRITE erzwingen)

START-OF-SELECTION.

  DATA: it_sflight TYPE STANDARD TABLE OF sflight.

  SELECT * FROM sflight INTO TABLE @it_sflight.

* ALV-Grid in Standarddynpro cl_gui_container=>default_screen einbetten
  DATA(o_alv) = NEW cl_gui_alv_grid( i_parent = cl_gui_container=>default_screen ).

  o_alv->set_table_for_first_display( EXPORTING
                                        i_structure_name = 'SFLIGHT'
                                      CHANGING
                                        it_outtab        = it_sflight ).

* Ausgabe von cl_gui_container=>default_screen erzwingen
  WRITE space.

Variante 2 (Aufruf leeres Dynpro 100)

SELECTION-SCREEN BEGIN OF SCREEN 100.
SELECTION-SCREEN END OF SCREEN 100.

START-OF-SELECTION.

  DATA: it_sflight TYPE STANDARD TABLE OF sflight.

  SELECT * FROM sflight INTO TABLE @it_sflight.

* ALV-Grid in Standarddynpro cl_gui_container=>default_screen einbetten
  DATA(o_alv) = NEW cl_gui_alv_grid( i_parent = cl_gui_container=>default_screen ).

  o_alv->set_table_for_first_display( EXPORTING
                                        i_structure_name = 'SFLIGHT'
                                      CHANGING
                                        it_outtab        = it_sflight ).

* leeres Dynpro anzeigen und Ausgabe von cl_gui_container=>default_screen erzwingen
  CALL SCREEN 100.

[ABAP] Anzeige der Toolbar unterdrücken / ausschalten

Variante 1 (cl_abap_list_layout)

PARAMETERS: p_matnr TYPE matnr.

AT SELECTION-SCREEN OUTPUT.
* Unterdrückt die Applikationszeile auf dem Listdynpro
  cl_abap_list_layout=>suppress_toolbar( ).

START-OF-SELECTION.
  WRITE: / p_matnr.

Variante 2 (RPY_DYNPRO_READ, RPY_DYNPRO_INSERT)

PARAMETERS: p_matnr TYPE matnr.

AT SELECTION-SCREEN OUTPUT.

  DATA: lv_header               TYPE rpy_dyhead.
  DATA: it_containers           TYPE dycatt_tab.
  DATA: it_fields_to_containers TYPE dyfatc_tab.
  DATA: it_flow_logic           TYPE swydyflow.

* Lesen eines Dynpros
  CALL FUNCTION 'RPY_DYNPRO_READ'
    EXPORTING
      progname             = sy-cprog
      dynnr                = sy-dynnr
    IMPORTING
      header               = lv_header
    TABLES
      containers           = it_containers
      fields_to_containers = it_fields_to_containers
      flow_logic           = it_flow_logic
    EXCEPTIONS
      cancelled            = 1
      not_found            = 2
      permission_error     = 3
      OTHERS               = 4.

  IF sy-subrc = 0.
* Anzeige der Toolbar prüfen
    IF lv_header-no_toolbar = abap_false.
      lv_header-no_toolbar = abap_true.

* Einfügen eines Dynpros
      CALL FUNCTION 'RPY_DYNPRO_INSERT'
        EXPORTING
          header                 = lv_header
          suppress_exist_checks  = abap_true
        TABLES
          containers             = it_containers
          fields_to_containers   = it_fields_to_containers
          flow_logic             = it_flow_logic
        EXCEPTIONS
          cancelled              = 1
          already_exists         = 2
          program_not_exists     = 3
          not_executed           = 4
          missing_required_field = 5
          illegal_field_value    = 6
          field_not_allowed      = 7
          not_generated          = 8
          illegal_field_position = 9
          OTHERS                 = 10.
    ENDIF.
  ENDIF.

START-OF-SELECTION.
  WRITE: / p_matnr.

[ABAP] Grundstruktur für Report mit Dynpro

DATA: ok_code TYPE sy-ucomm.                      " OK-CODE für Benutzer-Kommandos (Buttons, Menü, ...)
DATA: o_cont TYPE REF TO cl_gui_custom_container. " Containerobjekt für andere GUI-Elemente

START-OF-SELECTION.
  " Screen 100 aufrufen, auf diesen muss sich ein
  " Custom-Control 'CNT_MAIN' befinden (Screenpainter)
  " und es muss ein PF-STATUS 'ST_100' und
  " ein GUI-TITLE 'ST_100_TITLE' vorhanden sein
  CALL SCREEN 100.

*---------------------------------------------------------------------*
*      Module  STATUS_0100  OUTPUT
*---------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'ST_100'.
  SET TITLEBAR 'ST_100_TITLE'.

  " cl_gui_custom_container erzeugen und in Container 'CNT_MAIN' ablegen
  " cl_gui_custom_container kann andere GUI-Elemente tragen
  IF o_cont IS NOT BOUND.
    o_cont = NEW cl_gui_custom_container( container_name = 'CNT_MAIN' ).
  ENDIF.
ENDMODULE.
*---------------------------------------------------------------------*
*      Module  USER_COMMAND_0100  INPUT
*---------------------------------------------------------------------*
*      text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    " wenn im PF-STATUS die Kommandos 'BACK' / 'CANCEL' / 'EXIT
    " gesetzt wurden, hier darau reagieren
    WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
      " Container freigeben
      IF o_cont IS BOUND.
        o_cont->free( ).
      ENDIF.

      " Programm beenden
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.

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