Variante 1 (Einfaches Popup-Fenster mit Eingabefeld)
* Button Pos 2 Länge 20, sendet Kommando 'CMD_SHOW'
SELECTION-SCREEN: PUSHBUTTON 2(20) btn1 USER-COMMAND cmd_show.
* Popup-Fenster (Selektionsbild 100) deklarieren
SELECTION-SCREEN BEGIN OF SCREEN 100 TITLE title.
PARAMETERS: p_text TYPE string.
SELECTION-SCREEN END OF SCREEN 100.
INITIALIZATION.
* Fenstertitel
title = 'Popup'.
* Button-Text setzen
btn1 = |{ icon_activity }Popup anzeigen|.
AT SELECTION-SCREEN.
* wenn Button-Kommando 'CMD_SHOW'
IF sy-ucomm = 'CMD_SHOW'.
* Popup-Fenster (Selektionsbild 100) anzeigen
CALL SELECTION-SCREEN 100 STARTING AT 10 5.
ENDIF.
START-OF-SELECTION.
* Datenausgabe
WRITE: / p_text.
Variante 2 (Passwortdialog mit eigenem PF-Status)
* Inspiriert (Quelle) von: http://www.abapgit.org
DATA: gv_user TYPE string.
DATA: gv_pass TYPE string.
**********************************************************************
*
* Dynproelemente für Standard-Selektionbild
*
**********************************************************************
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(30) b_pop USER-COMMAND pop.
SELECTION-SCREEN END OF LINE.
**********************************************************************
*
* Dynproelemente für Popup
*
**********************************************************************
SELECTION-SCREEN BEGIN OF SCREEN 3000 TITLE s_title.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) s_user FOR FIELD p_user.
PARAMETERS: p_user TYPE string LOWER CASE.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) s_pass FOR FIELD p_pass.
PARAMETERS: p_pass TYPE string LOWER CASE.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF SCREEN 3000.
**********************************************************************
*
* Klasse zur Anzeige des Popup-Fensters
*
**********************************************************************
CLASS lcl_pwdlg DEFINITION FINAL.
PUBLIC SECTION.
CONSTANTS: co_dynnr TYPE char4 VALUE '3000'.
CLASS-METHODS on_initialization.
CLASS-METHODS on_output.
CLASS-METHODS on_event
IMPORTING
i_ucomm TYPE sy-ucomm.
CLASS-METHODS show
IMPORTING
i_user TYPE string
EXPORTING
e_user TYPE string
e_pass TYPE string.
PRIVATE SECTION.
CLASS-DATA: gv_ok TYPE abap_bool.
ENDCLASS.
CLASS lcl_pwdlg IMPLEMENTATION.
METHOD on_initialization.
s_title = 'Loginfenster'.
s_user = 'Benutzer'.
s_pass = 'Passwort'.
ENDMETHOD.
METHOD on_output.
IF sy-dynnr = lcl_pwdlg=>co_dynnr.
* Wenn Popup angezeigt werden soll
* GUI Status aus Program RSDBRUNT setzen (Ausführen- und Schließen-Button)
PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND.
DATA: it_ucomm TYPE STANDARD TABLE OF sy-ucomm WITH DEFAULT KEY.
* Prüfen-Button entfernen
APPEND 'NONE' TO it_ucomm.
* Variante-Speichern-Button entfernen
APPEND 'SPOS' TO it_ucomm.
CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
EXPORTING
p_status = sy-pfkey
TABLES
p_exclude = it_ucomm.
IF NOT p_user IS INITIAL.
* Cursor in Passwort-Feld setzen
SET CURSOR FIELD 'P_PASS'.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD show.
* User + Passwort setzen
p_user = i_user.
CLEAR: p_pass.
gv_ok = abap_false.
* Selektionsbild CO_DYNNR (das Popup) anzeigen
CALL SELECTION-SCREEN co_dynnr STARTING AT 15 10 ENDING AT 75 12.
IF gv_ok = abap_true.
* wenn Popup per Ausführen (F8) oder ENTER geschlossen wird, dann Werte übernehmen
e_user = p_user.
e_pass = p_pass.
ENDIF.
CLEAR: p_user.
CLEAR: p_pass.
ENDMETHOD.
METHOD on_event.
* Tastendrücke vom Popup abfangen
IF sy-dynnr = co_dynnr.
CASE i_ucomm.
WHEN 'CRET'.
* für Ausführen (F8)
gv_ok = abap_true.
WHEN OTHERS.
* für ENTER
gv_ok = abap_true.
LEAVE TO SCREEN 0.
ENDCASE.
ENDIF.
ENDMETHOD.
ENDCLASS.
INITIALIZATION.
b_pop = 'Popup öffnen'.
* Popup initialisieren
lcl_pwdlg=>on_initialization( ).
AT SELECTION-SCREEN OUTPUT.
CASE sy-dynnr.
WHEN 1000.
* wenn Ereignis aus dem Standart-Selektionsbild (Dynpro 1000) getriggert wird
WHEN lcl_pwdlg=>co_dynnr.
* wenn Ereignis aus dem Popup (Dynpro CO_DYNNR) getriggert wird
lcl_pwdlg=>on_output( ).
WHEN OTHERS.
ENDCASE.
AT SELECTION-SCREEN.
CASE sy-dynnr.
WHEN 1000.
* wenn Ereignis aus dem Standart-Selektionsbild (Dynpro 1000) getriggert wird
CASE sy-ucomm.
* Button "Popup öffnen" geklickt
WHEN 'POP'.
* Popup anzeigen
lcl_pwdlg=>show( EXPORTING i_user = CONV #( sy-uname )
IMPORTING e_user = gv_user
e_pass = gv_pass ).
ENDCASE.
WHEN lcl_pwdlg=>co_dynnr.
* wenn Ereignis aus dem Popup (Dynpro CO_DYNNR) getriggert wird
lcl_pwdlg=>on_event( sy-ucomm ).
ENDCASE.
START-OF-SELECTION.
WRITE: / gv_user.
WRITE: / gv_pass.