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

[ABAP] Strukturbeschreibung für System-Datenobjekt SCREEN

Komponente      Länge Typ Attribut                    Bedeutung

name            132   c   Name                        Name
group1          3     c   Gruppe1                     Modifikationsgruppe
group2          3     c   Gruppe2                     Modifikationsgruppe
group3          3     c   Gruppe3                     Modifikationsgruppe
group4          3     c   Gruppe4                     Modifikationsgruppe
required        1     c   Muss-Feld                   obligatorisches Feld
input           1     c   Eingabe                     eingabebereites Feld (enabled)
output          1     c   Ausgabe                     Anzeigefeld
intensified     1     c   Hell                        hervorgehobenes Feld
invisible       1     c   Unsichtbar                  unsichtbares Element
length          1     x   visLänge                    Feldlänge
active          1     c   Eingabe/Ausgabe/Unsichtbar  aktives Feld (visible)
display_3d      1     c   Zweidimensional             Rahmen
value_help      1     c   Eingabehilfe                Eingabehilfetaste
request         1     c   -                           Eingabe vorhanden
values_in_combo 1     c   Dropdown-Listbox            Wertehilfe vorhanden
color           10    i                               Farbe vom Wert 0 - 7

[ABAP] Parameter mit Auswahlbereich (SELECT-OPTIONS)

Variante 1 (DATA)

DATA: lv_matnr TYPE matnr.

* Parameterfeld von ... bis mit Dictionary-Type
SELECT-OPTIONS: so_matnr FOR lv_matnr DEFAULT '0000000001' TO '1000000000'.

START-OF-SELECTION.

* so_matnr ist eine itab mit Kopfzeile
  IF lines( so_matnr ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_matnr[ 1 ]-sign, so_matnr[ 1 ]-option, so_matnr[ 1 ]-low, so_matnr[ 1 ]-high.
  ENDIF.

Variante 2 (sy-datum)

* von 01.01.1999 bis Systemdatum
SELECT-OPTIONS: so_date FOR sy-datum DEFAULT '19990101' TO sy-datum.

START-OF-SELECTION.

* so_date ist eine itab mit Kopfzeile
  IF lines( so_date ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_date[ 1 ]-sign, so_date[ 1 ]-option, so_date[ 1 ]-low, so_date[ 1 ]-high.
  ENDIF.

Variante 3 (INITIALIZATION)

SELECT-OPTIONS: so_date FOR sy-datum.

INITIALIZATION.
* Initialwerte für so_date setzen
  so_date[] = VALUE #( ( sign   = 'I'
                         option = 'BT'
                         low    = sy-datum - 5
                         high   = sy-datum
                       )
                     ).

START-OF-SELECTION.
* so_date ist eine itab mit Kopfzeile
  IF lines( so_date ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_date[ 1 ]-sign, so_date[ 1 ]-option, so_date[ 1 ]-low, so_date[ 1 ]-high.
  ENDIF.

Variante 4 (TABLES)

* Zugriff Tabellenobjekt aus dem Dictionary deklarieren,
* automatische Verknüpfung der Suchilfe auch zu and. Objekten des Selektionsbildschirms
* obsolet (sollte nicht mehr verwendet werden)
TABLES: mara.

* Parameterfeld von ... bis mit Dictionary-Type
SELECT-OPTIONS: so_matnr FOR mara-matnr DEFAULT '0000000001' TO '1000000000'.

START-OF-SELECTION.

* so_matnr ist eine itab mit Kopfzeile
  IF lines( so_matnr ) > 0.
* erstes Element der itab ausgeben
    WRITE: / so_matnr[ 1 ]-sign, so_matnr[ 1 ]-option, so_matnr[ 1 ]-low, so_matnr[ 1 ]-high.
  ENDIF.

[ABAP] Einfacher Parameter (Labeled Edit)

PARAMETERS: p_mypar1 TYPE c LENGTH 2 DEFAULT 'AB'.        " einfacher Parameter mit Vorgabewert
PARAMETERS: p_mypar2 TYPE dicttype-var DEFAULT 'XY'.      " einfacher Parameter mit Dictionary-Type mit Suchhilfe, Langtext usw.
PARAMETERS: p_mypar3 TYPE string OBLIGATORY DEFAULT 'DE'. " einfacher Parameter mit Defaultwert und als Pflichteingabefeld
PARAMETERS: p_mypar4 TYPE i OBLIGATORY DEFAULT '1000'.

oder

PARAMETERS: p_mypar TYPE transparentetabelle-spalte DEFAULT 'XY'. " Spalte aus transparenter Tabelle (Dictionary Objekt) nutzen mit Suchhilfe, Langtext usw.

[ABAP] Nachrichtenklassen pflegen

Nachrichtenklasse anlegen

  • SE91 (Nachrichtenpflege)

oder

  • SE80 (Object Navigator)->Paket->Rechtsklick->Anlegen->Weitere (1)->Nachrichtenklasse

oder

  • im Code auf den neu eingegebenen Klassennamen hinter ‘MESSAGE …’ doppelklicken

danach

  • in der Tabelle die Kurztexte (000…) zur Nachrichtenklasse editieren
  • Es können max. 4 Platzhalter ‘&’ oder explizit ‘&1’, ‘&2’, ‘&3’, ‘&4’ eingefügt werden, die später beim Aufruf des Textes mit Variablenwerten gefüllt werden können.
  • evtl. Haken bei ‘Selbserklärend’ setzen
  • evtl. Langtext über Button ‘Langtext’ pflegen
  • Button “Sichern” (Diskette) und “Aktivieren” (Streichholz) nicht vergessen

[ABAP] Messages ausgeben

Messagetypen

Typ  Bezeichnung  Bedeutung

A    Abbruch      Anzeige der Nachricht in einem Dialogfenster. Die gesamte Transaktion wird nach der Bestätigung durch ENTER abgebrochen.
E    Error        Anzeige der Nachricht in der Statuszeile. Nach der Bestätigung durch ENTER wird der aktuelle Ereignisblock abgebrochen und die Anzeige der vorhergehenden Listenstufe bleibt bestehen. Während der Erstellung der Grundliste wird das gesamte Programm abgebrochen.
I    Information  Anzeige der Nachricht in einem Dialogfenster. Nach der Bestätigung durch ENTER wird die Verarbeitung hinter der MESSAGE-Anweisung wieder aufgenommen.
S    Status       Anzeige der Nachricht in der Statuszeile der momentan erstellten Liste.
W    Warnung      siehe E
X    Exit         Dieser Nachrichtentyp löst einen Laufzeitfehler aus und erzeugt einen Kurzdump.

Codebeispiele

* Beispiele
* Popup-Message des Typs 'E' (Fehler)
MESSAGE 'Nachricht.' TYPE 'I' DISPLAY LIKE 'E'.
* Popup-Message vom Typ 'I' (Information)
MESSAGE 'Text.' TYPE 'I'.

* Message in der Statuszeile vom Typ 'E' (rot)
MESSAGE 'Nachricht.' TYPE 'S' DISPLAY LIKE 'E'.
* Message in der Statuszeile vom Typ 'W' (gelb)
MESSAGE 'Nachricht.' TYPE 'S' DISPLAY LIKE 'W'.
* Message in der Statuszeile (grün)
MESSAGE 'Nachricht.' TYPE 'S'.

* Nachrichtentext Nr. 004 der Nachrichtenklasse 'mymessageclass', Typ 'I' (Information) mit Parameter v1
MESSAGE i004(mymessageclass) TYPE 'I' WITH v1.
* Nachrichtentext Nr. 004 der Nachrichtenklasse 'MYMESSAGECLASS' (Großschreibung!), Typ 'I' (Information)
MESSAGE ID 'MYMESSAGECLASS' TYPE 'I' NUMBER '004'.
* Fehlermessage komplett in der Statusleiste anzeigen
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
* Fehlermessage in String konvertieren
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO DATA(lv_message_str).
WRITE: / lv_message_str.

sy-msg in String

* Variante 1
DATA(lv_msg) = |{ sy-msgv1 } { sy-msgv2 } { sy-msgv3 } { sy-msgv4 }|.
WRITE: / lv_msg.

* Variante 2
DATA(lv_msg) = ||.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_msg.
WRITE: / lv_msg.

Weiterführender Link: Link

[ABAP] Übersicht User-Commands

Code  Funktionstaste    Beschreibung

BACK  F3                Eine Stufe zurückgehen
ONLI  F8                Programmausführung läuft bei START-OF-SELECTION weiter
P--   Strg-Bild hoch    Zur ersten Fensterseite blättern
P-    Bild hoch         Zur vorigen Fensterseite blättern
P+    Bild runter       Zur nächsten Fensterseite blättern
P++   Strg-Bild runter  Zur letzten Fensterseite blättern
PICK  F2                Ereignis AT LINE-SELECTION
PRI   Strg-P            Angezeigte Liste drucken
RW    F12 , ESC         Bearbeitung Abbrechen
%CTX  Shift-F10         Kontextmenü auf Liste
%EX   Shift-F3          Bearbeitung beenden
%PC                     Liste in Datei sichern
%SC   Strg-F            Muster suchen
%SC+  Strg-G            Muster weiter suchen
%SL                     Liste in Office sichern
%ST                     Liste in Berichtsbaum sichern