[ABAP] Detaildaten eines Benutzers lesen

DATA: ls_address TYPE bapiaddr3.
DATA: ls_admindata TYPE bapiuseradmin.
DATA: ls_userdefault TYPE bapidefaul.
DATA: ls_company TYPE bapiuscomp.
DATA: lt_message TYPE bapirettab.

" Userdaten auslesen
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
  EXPORTING
    username  = sy-uname
  IMPORTING
    address   = ls_address
    admindata = ls_admindata
    company   = ls_company
    defaults  = ls_userdefault
  TABLES
    return    = lt_message.

" einige der gelesenen Daten ausgeben
WRITE: / ls_address-firstname.
WRITE: / ls_address-lastname.
WRITE: / ls_address-e_mail.

WRITE: / ls_admindata-aname.

WRITE: / ls_company-company.

[ABAP] Eigene F4-Suchhilfe anzeigen (Funktionsbaustein)

TYPES: BEGIN OF ty_mara,
         matnr TYPE mara-matnr,
         ernam TYPE mara-ernam,
       END OF ty_mara.

DATA: it_mara TYPE TABLE OF ty_mara.
DATA: it_return TYPE TABLE OF ddshretval.

PARAMETERS: p_matnr TYPE mara-matnr.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.

  CLEAR: it_mara.

  SELECT matnr, ernam FROM mara
    INTO CORRESPONDING FIELDS OF TABLE @it_mara
    UP TO 20 ROWS
    ORDER BY matnr.

* F4-Hilfe mit Übergabe der anzuzeigenden Werte in interner Tabelle
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'MATNR'       " Spalte der internen Tabelle bei value_tab
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'P_MATNR'     " Name des Dynpro-Feldes für die automatische Werterückgabe
      value_org       = 'S'           " Werteübergabe: C: zellenweise, S: strukturiert
      window_title    = 'Auswahl'
    TABLES
      value_tab       = it_mara       " Übergabe-Tabelle mit Werten für die Anzeige und Auswahl
      return_tab      = it_return     " Rückgabe-Tabelle mit den ausgewählten (geklickten) Elementen
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc = 0.
    IF lines( it_return ) > 0.
      MESSAGE it_return[ 1 ]-fieldval TYPE 'S'.
    ENDIF.
  ENDIF.

[ABAP] Popup-Dialog anzeigen

DATA: ret TYPE string.

* Ersetzt alle anderen obsoleten 'POPUP_TO_...' Funktionsbausteine
* kann für Ja, Nein, Abbrechen, Zurück, Weiter, Infos usw. genutzt werden
CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
    titlebar              = 'Frage'
    text_question         = 'Alles klar?'
    display_cancel_button = abap_true
  IMPORTING
    answer                = ret.

CASE ret.
  WHEN '1'.
* Ja
  WHEN '2'.
* Nein
  WHEN 'A'.
* Abbruch
ENDCASE.

Weiterführender Link: Link

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

[ABAP] SMTP-Email-Adresse von Benutzer (User) lesen

Variante 1 (Select)

PARAMETERS: p_uname TYPE usr21-bname.

SELECT u~bname,
       u~persnumber,
       u~addrnumber,
       a~smtp_addr
  FROM usr21 AS u
  INNER JOIN adr6 AS a  ON ( a~persnumber = u~persnumber AND a~addrnumber = u~addrnumber )
  INTO TABLE @DATA(it_userdata)
  WHERE u~bname = @p_uname.

LOOP AT it_userdata ASSIGNING FIELD-SYMBOL(<u>).
  WRITE:/ <u>-bname, <u>-smtp_addr.
ENDLOOP.

Variante 2 (Funktionsbaustein)

DATA: rc    TYPE                   sy-subrc,
      email TYPE                   string,
      err   TYPE STANDARD TABLE OF rpbenerr.

CALL FUNCTION 'HR_FBN_GET_USER_EMAIL_ADDRESS'
  EXPORTING
    user_id       = sy-uname
    reaction      = sy-msgty
  IMPORTING
    subrc         = rc
    email_address = email
  TABLES
    error_table   = err.

WRITE: / sy-uname, email.

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