[ABAP] Eigener Startbutton (PUSHBUTTON) für START-OF-SELECTION auf dem Selektionsbild

* http://havliczech.blogspot.com/2017/04/how-to-trigger-start-of-selection-event.html
PARAMETERS: p_string TYPE string DEFAULT 'abc' LOWER CASE.

SELECTION-SCREEN SKIP.

* PUSHBUTTON triggert Test-Kommando 'SHOW'
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(30) btn1 USER-COMMAND show.
SELECTION-SCREEN END OF LINE.

* PUSHBUTTON triggert Kommando 'ONLI' (Ausführen) auf dem Selektionsbild
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(30) bstart USER-COMMAND onli.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  btn1 = 'Show'.
  bstart = 'Start'.

AT SELECTION-SCREEN.
* User-Command prüfen
  CASE sy-ucomm.
    WHEN 'ONLI'.
      MESSAGE 'Springe jetzt zu START-OF-SELECTION.' TYPE 'S'.
    WHEN 'SHOW'.
      MESSAGE p_string TYPE 'I'.
  ENDCASE.

START-OF-SELECTION.
* Wenn User-Command 'ONLI' (Ausführen) getriggert wurde
  WRITE: 'Fertig.'.

[ABAP] Button Ausführen (F8) entfernen und eigenen Startbutton auf dem Selektionbild anzeigen

* http://zevolving.com/2014/07/selection-screen-disable-standard-toolbar-button/
* https://www.saptutorial.org/hide-execute-button-selection-screen/
PARAMETERS: p_string TYPE string DEFAULT 'Test'.

* Eigener Startbutton: Triggert das Kommando 'ONLI' (Ausführen (F8)) -> START-OF-SELECTION
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(30) b_start USER-COMMAND onli.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
  b_start   = 'Start'.

AT SELECTION-SCREEN OUTPUT.
  DATA: it_ucomm TYPE STANDARD TABLE OF sy-ucomm WITH DEFAULT KEY.
* Standard-Button Ausführen (F8) in der Toolbar entfernen
  APPEND 'ONLI' TO it_ucomm.

  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
    EXPORTING
      p_status  = sy-pfkey
    TABLES
      p_exclude = it_ucomm.

START-OF-SELECTION.
  WRITE: / p_string.

[ABAP] Popup-Fenster mit Eingabefeldern anzeigen

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.

[ABAP] Oberflächenelemente per Button ausblenden

TABLES: sscrfields.

CONSTANTS: BEGIN OF e_status,
             open  TYPE i VALUE 0,
             close TYPE i VALUE 1,
           END OF e_status.

DATA: status_blk2 TYPE i.

SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE title1.
PARAMETERS: p1 TYPE string.
SELECTION-SCREEN: END OF BLOCK blk1.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (4) btn_oc USER-COMMAND btn_cmd_oc.
SELECTION-SCREEN COMMENT 6(25) lbl_oc.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN: BEGIN OF BLOCK blk2 WITH FRAME TITLE title2.
PARAMETERS: s1 TYPE string MODIF ID b2.
PARAMETERS: s2 TYPE string MODIF ID b2.
SELECTION-SCREEN: END OF BLOCK blk2.

INITIALIZATION.
  title1 = 'Kundennummer'.
  title2 = 'Eingabe'.

  lbl_oc  = 'Eingabe'.

  status_blk2 = e_status-close.

  PERFORM set_btn_icon USING status_blk2 CHANGING btn_oc.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN INTO DATA(wa).
    CASE wa-group1.       " Name der Modifikationsgruppe
      WHEN 'B2'.          " wenn in Modifikationsgruppe 'B2'
        IF status_blk2 = e_status-open.
          wa-active = '1'.
        ELSE.
          wa-active = '0'.
        ENDIF.
    ENDCASE.

    MODIFY SCREEN FROM wa.
  ENDLOOP.

  PERFORM set_btn_icon USING status_blk2 CHANGING btn_oc.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'BTN_CMD_OC'.
      IF status_blk2 = e_status-open.
        status_blk2 = e_status-close.
      ELSE.
        status_blk2 = e_status-open.
      ENDIF.
  ENDCASE.

FORM set_btn_icon USING iv_status TYPE i CHANGING btn_icon TYPE any.
  CASE iv_status.
    WHEN e_status-close.
      btn_icon = icon_data_area_expand.
    WHEN e_status-open.
      btn_icon = icon_data_area_collapse.
  ENDCASE.
ENDFORM.

[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

[ABAP] Buttons auf dem Selektionsbildschirm

* Testparameter: Pflichtfeld mit Groß-Kleinschreibung
PARAMETERS: p_text TYPE string LOWER CASE OBLIGATORY DEFAULT 'Test'. " Testtext für Ausgabe

* 1. Button sendet Kommando CMD1
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(20) btn1 USER-COMMAND cmd1.    " Button Pos 2 Länge 20, sendet Kommando 'CMD1'
SELECTION-SCREEN END OF LINE.

* 2. Button sendet Kommando CMD2
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(20) btn2 USER-COMMAND cmd2.    " Button Pos 2 Länge 20, sendet Kommando 'CMD2'
SELECTION-SCREEN END OF LINE.

* 3. Button sendet Kommando ONLI
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 2(20) btn3 USER-COMMAND onli.    " Button Pos 2 Länge 20, sendet Kommando 'ONLI'
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
* Button-Texte mit Icons festlegen
  btn1 = |{ icon_abap } CMD1 - Weiter|.
  btn2 = |{ icon_activity } CMD2 - Ende|.

* Buttonbeschriftung mit Icon und Quickinfo für btn3 generieren lassen
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name                  = icon_information
      text                  = 'ONLI - Weiter'
      info                  = 'Quickinfo'
    IMPORTING
      result                = btn3
    EXCEPTIONS
      icon_not_found        = 1
      outputfield_too_short = 2
      OTHERS                = 3.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

AT SELECTION-SCREEN.

* Benutzer-Kommandos des Selektionsbildes abfangen und prüfen
  CASE sy-ucomm.
    WHEN 'CMD1'.
* OK-Code 'ONLI' per Funktionsbaustein setzen
      CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE' " FktBaustein zum setzen von Funktionscodes aufrufen
        EXPORTING
          functioncode           = 'ONLI'     " dann bei START-OF-SELECTION weiter
        EXCEPTIONS
          function_not_supported = 1.
    WHEN 'CMD2'.
* bei Kommando CMD2 das Programm beenden
      LEAVE PROGRAM.
    WHEN 'ONLI'.
* wenn Kommando ONLI (Ausführen (F8)) kommt, dann ohne Aktion gleich zu START-OF-SELECTION weiter
  ENDCASE.

START-OF-SELECTION.
  WRITE: p_text.