[ABAP] SAP GUI-Version auslesen

DATA: v_tab  TYPE filetable,
      v_info TYPE file_table,
      rc     TYPE i.

TRY.
    cl_gui_frontend_services=>get_gui_version(
      CHANGING
        version_table            = v_tab
        rc                       = rc ).

  CATCH cx_root INTO DATA(e_text).        " Oberklasse für Exceptions abfangen und Kurztext übergeben
    MESSAGE e_text->get_text( ) TYPE 'I'. " Exception Kurztext ausgeben
ENDTRY.

LOOP AT v_tab INTO v_info.
  WRITE: / v_info-filename.
ENDLOOP.

[ABAP] DirectoryBrowser-Dialog aufrufen

DATA: fldr TYPE string.

TRY.
    cl_gui_frontend_services=>directory_browse(
        EXPORTING
          initial_folder  = 'c:\'
        CHANGING
          selected_folder = fldr ).

    WRITE: / fldr.

  CATCH cx_root INTO DATA(e_txt).          " Oberklasse für Exceptions abfangen und Kurztext übergeben
    MESSAGE e_txt->get_text( ) TYPE 'I'.   " Exception Kurztext ausgeben
ENDTRY.

[ABAP] SaveFile-Dialog anzeigen

Variante 1 (cl_gui_frontend_services)

PARAMETERS: p_fname TYPE file_table-filename OBLIGATORY DEFAULT 'c:\test.xlsx'.

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  DATA: lv_action TYPE i.
  DATA: lv_filename TYPE string.
  DATA: lv_fullpath TYPE string.
  DATA: lv_path TYPE string.

* FileSave-Dialog aufrufen
  TRY.
      cl_gui_frontend_services=>file_save_dialog( EXPORTING
                                                    default_extension   = 'xlsx'        " default Dateinnamenerweiterung
                                                    default_file_name   = |{ p_fname }| " default Dateiname
                                                    file_filter         = |xlsx (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|
                                                    prompt_on_overwrite = abap_true
                                                  CHANGING
                                                    filename          = lv_filename     " Dateiname
                                                    path              = lv_path         " Pfad
                                                    fullpath          = lv_fullpath     " Pfad + Dateiname
                                                    user_action       = lv_action ).    " Benutzeraktion

      IF lv_action EQ cl_gui_frontend_services=>action_ok.
        p_fname = lv_fullpath.
      ENDIF.

    CATCH cx_root INTO DATA(e_text).          " Oberklasse für Exceptions abfangen und Kurztext übergeben
      MESSAGE e_text->get_text( ) TYPE 'I'.   " Exception Kurztext ausgeben
  ENDTRY.

Variante 2 (cl_openxml_helper)

DATA(lv_default_filename) = |Excelfile.xlsx|.
DATA(lv_filterpattern) = |Excel-Datei (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|.

DATA(lv_savefile) = cl_openxml_helper=>browse_local_file_save( iv_title      = 'Datei speichern'
                                                               iv_filename   = lv_default_filename
                                                               iv_extpattern = lv_filterpattern ).

WRITE: / lv_savefile.

[ABAP] OpenFile-Dialog anzeigen

Variante 1 (cl_gui_frontend_services)

PARAMETERS: p_fname TYPE file_table-filename OBLIGATORY.

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  
  DATA: lv_rc TYPE i.
  DATA: it_files TYPE filetable.
  DATA: lv_action TYPE i.
    
* File-Tabelle leeren, da hier noch alte Einträge von vorherigen Aufrufen drin stehen können  
  CLEAR it_files.

* FileOpen-Dialog aufrufen
  TRY.
      cl_gui_frontend_services=>file_open_dialog( EXPORTING
                                                    file_filter    = |txt (*.txt)\|*.txt\|{ cl_gui_frontend_services=>filetype_all }|
                                                    multiselection = abap_false
                                                  CHANGING
                                                    file_table  = it_files
                                                    rc          = lv_rc
                                                    user_action = lv_action ).

      IF lv_action = cl_gui_frontend_services=>action_ok.
* wenn Datei ausgewählt wurde
        IF lines( it_files ) > 0.
* ersten Tabelleneintrag lesen
          p_fname = it_files[ 1 ]-filename.
        ENDIF.
      ENDIF.
      
    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'I'.
  ENDTRY.

Variante 2 (cl_openxml_helper)

DATA(lv_default_filename) = ||.
DATA(lv_filterpattern) = |Excel-Datei (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|.

DATA(lv_selected_file) = cl_openxml_helper=>browse_local_file_open( iv_title      = 'Dateiauswahl'
                                                                    iv_filename   = lv_default_filename
                                                                    iv_extpattern = lv_filterpattern ).

WRITE: / lv_selected_file.

Variante 3 (cl_rsan_ut_files)

* F4-Auswahldialog (PopUp) für Auswahl einer Datei auf dem Applikationsserver
PARAMETERS : p_filenm LIKE ibipparms-path OBLIGATORY.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filenm.

  DATA: lv_canceled TYPE boolean.
  DATA: lv_file_name TYPE string.

  TRY.
      cl_rsan_ut_files=>f4( EXPORTING
                              i_applserv         = abap_true " Dateiauswahl vom Appl.-Server holen, sonst GUI
                              i_title            = 'Dateiauswahl auf dem Applikationsserver'
                              i_gui_extension    = ''
                              i_gui_ext_filter   = ''
                              i_applserv_logical = abap_false
                              i_applserv_al11    = abap_true
                            IMPORTING
                              e_canceled         = lv_canceled
                            CHANGING
                              c_file_name        = lv_file_name ).

      IF lv_canceled NE abap_true.
        p_filenm = lv_file_name.
      ENDIF.
    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'I'.
  ENDTRY.

Variante 4 (cl_secxml_helper)

TRY.
    cl_secxml_helper=>file_f4( EXPORTING initial_directory = ''
                                         window_title      = 'Dateiauswahl'
                               IMPORTING filename          = DATA(lv_xfile) ).


  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

Variante 5 (F4_DXFILENAME_4_DYNP)

* Flexibles Dateiauswahl-Popup für die F4-Suchhilfe
PARAMETERS p_file TYPE dxfile-filename.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

* F4-Hilfe für Dateien; Aufruf für Dynpro
  CALL FUNCTION 'F4_DXFILENAME_4_DYNP'
    EXPORTING
      dynpfield_filename = 'P_FILE' " Dynprofeld für Rückgabewert
      dyname             = sy-repid
      dynumb             = sy-dynnr
      filetype           = 'P'  " P -> Physical, L -> Logical
      location           = 'A'  " A -> Application Server, P -> Presentation Server
      server             = '?'. " leer -> Default-Anmeldeserver, ? -> Auswahl-Popup für Serverauswahl

Variante 6 (F4_DXFILENAME_TOPRECURSION)

* Auswahldialog für Dateien auf dem Applikationsserver
* siehe auch: cl_rsan_ut_files=>f4( ).
DATA: lv_location_flag TYPE dxfields-location.
DATA: lv_server TYPE msxxlist-name.
DATA: lv_path TYPE dxfields-longpath.
DATA: lv_abend_flag TYPE dxfields-abendflag.

* F4-Hilfe für Dateien
CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
  EXPORTING
    i_location_flag       = 'A' " A - Applikationsserver, P - Presentationsserver
    i_server              = '?' " ? - Abfragedialog für Servername anzeigen, ' ' - akt. Anmeldeserver, sonst Servernamen eintragen
    i_path                = '/usr/sap' " Startpfad
  IMPORTING
    o_location_flag       = lv_location_flag
    o_server              = lv_server
    o_path                = lv_path
    abend_flag            = lv_abend_flag
  EXCEPTIONS
    communication_failure = 1
    system_failure        = 2
    rfc_error             = 3.

IF sy-subrc = 0.

  WRITE: / 'Location flag:', lv_location_flag.
  WRITE: / '       Server:', lv_server.
  WRITE: / ' Pfad + Datei:', lv_path.
  WRITE: / '   Abend Flag:', lv_abend_flag.

ENDIF.

Variante 7 (F4_FILENAME – Obsolet)

* Eingabefeld für Dateinamen auf dem Selektionsbild, Eingabe ist Pflicht
PARAMETERS : p_file LIKE ibipparms-path OBLIGATORY.

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CLEAR p_file.

* F4 for filename / Filemanager support to locate file in a directory
  CALL FUNCTION 'F4_FILENAME' " File-Dialog aufrufen
    EXPORTING
      field_name = 'P_FILE'
    IMPORTING
      file_name  = p_file.

[ABAP] ComboBoxen / Listboxen auf dem Selektionsbild anzeigen

DATA: it_cbval TYPE STANDARD TABLE OF vrm_value WITH DEFAULT KEY.

* TYPE / Länge des Typs hat Einfluss auf key
PARAMETERS: p_l_lang TYPE char3 AS LISTBOX VISIBLE LENGTH 20 USER-COMMAND lb_cmd.

INITIALIZATION.

  it_cbval = VALUE #( ( key = 'A_1' text = 'Punkt eins' )
                      ( key = 'A_2' text = 'Punkt zwei' ) ).

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id              = 'P_L_LANG'
      values          = it_cbval
    EXCEPTIONS
      id_illegal_name = 1
      OTHERS          = 2.

  IF sy-subrc = 0.
    IF lines( it_cbval ) > 0.
* Vorselektion 'Punkt eins'
      p_l_lang = 'A_1'.
    ENDIF.
  ENDIF.

START-OF-SELECTION.
* akt. Selektion der ComboBox heraussuchen
  TRY.
      DATA(s) = it_cbval[ key = p_l_lang ].

      WRITE: / s-text.
    CATCH cx_root.
  ENDTRY.

[ABAP] Checkboxen, Selektionsbildschirm Oberflächenelemente An- und Ausschalten

PARAMETERS show_all AS CHECKBOX DEFAULT 'X' USER-COMMAND show. " Checkbox namens 'show_all' welche das USRCMD 'SHOW' sendet

SELECTION-SCREEN BEGIN OF BLOCK select2 WITH FRAME.
PARAMETERS: p1 TYPE c LENGTH 10 MODIF ID grp1, " Eingabefelder zu Gruppe 'grp1' zusammenfassen
            p2 TYPE c LENGTH 10 MODIF ID grp1,
            p3 TYPE c LENGTH 10 MODIF ID grp1.
SELECTION-SCREEN END OF BLOCK select2.

AT SELECTION-SCREEN.
  IF sy-ucomm = 'SHOW'                  " Kommandoflag 'flag' der Checkbox abfangen
    MESSAGE 'Switch.' TYPE 'I'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN INTO DATA(screen_wa).  " SCREEN-Elemente durchgehen
    IF screen_wa-group1 = 'GRP1'.       " wenn Element in Gruppe 'grp1'
      IF show_all = 'X'.                " wenn Groupbox-Haken gesetzt
        screen_wa-active = '1'.         " Gruppenelement aktivieren (visible == true)
                                        " nicht unbedingt nötig, da screen_wa-active hier immer automatisch auf '1' gesetzt wird
      ELSE.
        screen_wa-active = '0'.         " Gruppenelement aktivieren (visible == false)
      ENDIF.

      MODIFY SCREEN FROM screen_wa.     " Änderung übernehmen
    ENDIF.
  ENDLOOP.

[ABAP] Button mit Icon erstellen

Variante 1

* Button mit Icon erstellen - Variante 3 
SELECTION-SCREEN PUSHBUTTON (10) btn1 USER-COMMAND btn_back.

INITIALIZATION. 
  btn1 = |{ icon_column_left }Zurück|.

Variante 2

TABLES: sscrfields.
SELECTION-SCREEN PUSHBUTTON 2(8) btn1 USER-COMMAND cmd1.

INITIALIZATION.
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
	  name = icon_information
	  text = 'Text'
	  info = 'Quickinfo'
    IMPORTING
	  result = btn1
	EXCEPTIONS
	  others = 1.

  IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

Variante 3

TABLES: sscrfields.
SELECTION-SCREEN PUSHBUTTON 2(8) btn1 USER-COMMAND cmd1.

INITIALIZATION.
  WRITE icon_execute_object TO btn1.  " Icon über WRITE in Button schreiben
  btn1+4 = 'Btn-Text'.                " Text eintragen