[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] SM30 mit Pflegedialog aufrufen

* Tabelle / Pflegeview
DATA(lv_tab) = CONV dd02v-tabname( 'V_T001' ).

* U - Ändern
* S - Anzeigen, Subset
* T - Transport
* X - gesetztes Flag
* R - read-only
DATA(lv_action) = 'U'.

* SM30: Aufruf der erweiterten Tabellenpflege (Viewpflege) oberste Einstiegsebene
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
  EXPORTING
    action                       = lv_action
    view_name                    = lv_tab
  EXCEPTIONS
    client_reference             = 1
    foreign_lock                 = 2
    invalid_action               = 3
    no_clientindependent_auth    = 4
    no_database_function         = 5
    no_editor_function           = 6
    no_show_auth                 = 7
    no_tvdir_entry               = 8
    no_upd_auth                  = 9
    only_show_allowed            = 10
    system_failure               = 11
    unknown_field_in_dba_sellist = 12
    view_not_found               = 13
    maintenance_prohibited       = 14
    OTHERS                       = 15.

IF sy-subrc <> 0.
  WRITE: / sy-subrc.
ENDIF.

[ABAP] Eigene SET/GET-Parameter-ID im Programm verwenden

Oft ist es hilfreich, wenn man sich eigene Parameter festlegen kann, über die man in einem Programm Funktionen steuert.

Anlegen eines Parameters

  • SE80 -> Paket -> Rechtsklick -> Anlegen -> Weitere (1) -> SET/GET-Parameter-ID
  • Parameter-ID (z.B. ‘ZADM_SHOW_PARAMS’) und Kurzbeschreibung eingeben

Wert für Parameter setzen

  • SU3 -> Reiter “Parameter”
  • Set-/Get-Parameter-Id: zuvor angelegten Parameter (z.B. ‘ZADM_SHOW_PARAMS’) auswählen
  • Parameterwert: beliebigen Wert zur späteren Auswertung eintragen, z.B. ‘X’

Werte werden in folgenden Tabelle abgelegt

  • TPARA (Verzeichnis der Memory-Id’s (vorlaeufig))
  • TPARAT (Kurztexte zu den Memory-Id’s)
  • USR05 (Benutzerstamm Parameter-ID)

Auslesen eines Parameters im Code

* Konstante für angelegten Parameter 'ZADM_SHOW_PARAMS'
CONSTANTS: co_parameter_id TYPE usr05-parid VALUE 'ZADM_SHOW_PARAMS'.

* Parameter mit einer Modifikationsgruppe namens 'ADM'
PARAMETERS: p_matnr TYPE matnr MODIF ID adm.
PARAMETERS: p_bukrs TYPE bukrs MODIF ID adm.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN INTO DATA(lv_scr).
* Name der Modifikationsgruppe ermitteln
    CASE lv_scr-group1.
* wenn in Modifikationsgruppe 'ADM'
      WHEN 'ADM'.
* Wert vorbelegen
        DATA(lv_adm_show_params) = CONV usr05-parva( abap_false ).

* Benutzerparameter lesen, muss in Tabelle TPARA enthalten sein
        GET PARAMETER ID co_parameter_id FIELD lv_adm_show_params.
* wenn Parameter vorhanden
        IF sy-subrc = 0.
* anhand des Benutzerparameters die Anzeige der Modifikationsgruppe namens 'ADM' aktivieren / deaktivieren
          lv_scr-active = COND #( WHEN lv_adm_show_params = abap_true THEN '1' ELSE '0' ).
* Adminparameter zur Info als hervorgehoben darstellen
          lv_scr-intensified = 1.
        ENDIF.
    ENDCASE.

* geänderte Anzeigewerte setzen
    MODIFY screen FROM lv_scr.
  ENDLOOP.

Links

[ABAP] SELECT-OPTIONS: Einschränkung der Mehrfachauswahl

* https://www.consolut.com/s/sap-ides-zugriff/d/e/doc/E-SELECT_OPTIONS_RESTRICT/
* http://saptechnical.com/Tips/ABAP/restrict.htm

DATA: lv_matnr TYPE matnr.
SELECT-OPTIONS: so_matnr FOR lv_matnr.

INITIALIZATION.
* Name einer Optionenliste für SELECT-OPTIONS-Restriktionen
  DATA(lv_opt_list) = 'OPT_LIST'.

* Optionenliste
  DATA(it_options) = VALUE sscr_opt_list_tab( ( name       = lv_opt_list
                                                options-eq = abap_true ) ).

* Zuweisungen
  DATA(it_assignment) = VALUE sscr_ass_tab( ( kind    = 'S'                " A(ll), B(lock), S(elect-Option)
                                              name    = 'SO_MATNR'         " Blockname, maximal 20 Zeichen
                                              sg_main = 'I'                " (only) I, SPACE = both
                                              op_main = lv_opt_list ) ).

* Einschränkungen für die SELECT-OPTIONS
  DATA(it_restrictions) = VALUE sscr_restrict( opt_list_tab = it_options
                                               ass_tab      = it_assignment ).

  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
    EXPORTING
      restriction            = it_restrictions
    EXCEPTIONS
      too_late               = 1
      repeated               = 2
      selopt_without_options = 3
      selopt_without_signs   = 4
      invalid_sign           = 5
      empty_option_list      = 6
      invalid_kind           = 7
      repeated_kind_a        = 8
      OTHERS                 = 9.

  IF sy-subrc = 0.

  ENDIF.

[ABAP] Zugriff auf Elemente des Selektionsbildes (dirty assign)

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (8) lbl1 FOR FIELD p_name.
PARAMETERS: p_name TYPE string LOWER CASE.
SELECTION-SCREEN END OF LINE.

INITIALIZATION.
* "dirty assign" über Namen in Großbuchstaben
  ASSIGN ('LBL1') TO FIELD-SYMBOL(<l>).
  <l> = 'Eingabe:'.

* "dirty assign" über Namen in Großbuchstaben
  ASSIGN ('P_NAME') TO FIELD-SYMBOL(<p>).
  <p> = 'Test'.

START-OF-SELECTION.
  WRITE: / <l>, <p>.

[ABAP] F4-Hilfe Popup

DATA: it_spfli TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.
DATA: it_spfli_sel TYPE STANDARD TABLE OF spfli WITH DEFAULT KEY.

PARAMETERS: p_test TYPE spfli-connid.

INITIALIZATION.
  SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_spfli.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_test.

  CLEAR: it_spfli_sel.

  DATA(o_f4) = cl_reca_gui_f4_popup=>factory_grid( id_title   = 'Flugdaten'
                                                   if_multi   = abap_false " Mehrfachauswahl
                                                   it_f4value = it_spfli ).

  o_f4->display( IMPORTING et_result = it_spfli_sel ).

  IF lines( it_spfli_sel ) > 0.
    p_test = it_spfli_sel[ 1 ]-connid.
  ENDIF.

[ABAP] Selektionsbild – Funktionstasten einfügen

* im Standard-GUI-Status eines Selektionsbildes sind in der Anwendungsfunktionsleiste (Drucktastenleiste) fünf inaktive Drucktasten definiert
* Schnittstellen-Arbeitsbereich der Struktur SSCRFIELDS aus dem ABAP Dictionary definieren (für Dynpro)
TABLES sscrfields.

* Funktionstaste 1 anlegen
SELECTION-SCREEN: FUNCTION KEY 1.
* Funktionstaste 2 anlegen
SELECTION-SCREEN: FUNCTION KEY 2.
  
INITIALIZATION.

* Funktionstaste 1
  sscrfields-functxt_01 = VALUE smp_dyntxt( icon_id = icon_htm
                                            quickinfo = 'HTML'
                                            icon_text = 'HTML' ).

* Funktionstaste 2
  sscrfields-functxt_02 = VALUE smp_dyntxt( icon_id = icon_payment
                                            quickinfo = 'Verarbeitung'
                                            icon_text = 'Verarbeitung' ).
                                            
AT SELECTION-SCREEN.
* Kommando abfangen (Nummerierung 'FC01' ... 'FC05')
  CASE sscrfields-ucomm.
* wenn Funktionstaste 1 gedrückt
     WHEN 'FC01'.
       MESSAGE sscrfields-ucomm TYPE 'I'.
* wenn Funktionstaste 2 gedrückt
     WHEN 'FC02'.
       MESSAGE sscrfields-ucomm TYPE 'I'.
  ENDCASE.