SSCRFIELD_FUNCTXT_0x UCOMM Default

Damit ist es möglich, einen Button in der Symbolleiste eines Reportprogrammes zu definieren.

In der Deklaration muss der Button definiert werden.

 TABLES sscrfields.
  SELECTION-SCREEN: FUNCTION KEY 1.

In Initialization kann der Button definiert werden.

INITIALIZATION.

    DATA: ls_prot_button TYPE smp_dyntxt.
    CONSTANTS: lc_protokoll TYPE char15 VALUE 'Protokollierung'.

    ls_prot_button-text      = lc_protokoll.
    ls_prot_button-icon_text = lc_protokoll.
    ls_prot_button-quickinfo = lc_protokoll.
    sscrfields-functxt_01    = ls_prot_button.

Im Default-Status %_00 der Oberfläche RSSYSTDB (für Reports) ist die Drucktaste Defaultmäßig FC01 definiert. (Neben ONLI für F8)

Im AT SELECTION-SCREEN Event kann der Button abgefragt werden.

AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.
      "Protokollierng
    WHEN 'FC01'.
      PERFORM show_protokoll.
      "Drucken oder Messwerte
    WHEN 'ONLI'.
      IF p_auftnr IS INITIAL OR
         p_posnr IS INITIAL.
        MESSAGE 'Auftragsnummer und Positionsnummer füllen' TYPE 'E'.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.

Ungeklärt:

SSCRTEXTS-DYNSEL

PROGRAM demo_dynpro_push_button.
        
DATA: ok_code TYPE sy-ucomm,
        
save_ok LIKE ok_code,
        
output(8) TYPE c.
        
CALL SCREEN 100.
        
MODULE user_command_0100 INPUT.
        
save_ok = ok_code.
        
CLEAR ok_code.
        
CASE save_ok.
        
WHEN 'BUTTON_EXIT'.
        
LEAVE PROGRAM.
        
WHEN 'BUTTON_1'.
        
output = 'Button 1'(001).
        
WHEN 'BUTTON_2'.
        
output = 'Button 2'(002).
        
WHEN 'BUTTON_3'.
        
output = 'Button 3'(003).
        
WHEN 'BUTTON_4'.
        
output = 'Button 4'(004).
        
WHEN OTHERS.
        
output = save_ok.
        
ENDCASE.
        
ENDMODULE.
        

The next screen (statically defined) for screen 100 is 100. It has the following layout:

The part of the element list relevant for the screen fields is as follows:

NameTypeFormatTextFunction Code
outputI/OCHAR
BUTTON1PushPushbutton 1BUTTON_1
BUTTON2PushPushbutton 2BUTTON_2
BUTTON3PushPushbutton 3BUTTON_3
BUTTON4PushPushbutton 4BUTTON_4
EXIT_BUTTTONPushCancelBUTTON_EXIT
ok_codeOKOK

The input option for the screen field output has been switched off in the Screen Painter.

The screen flow logic is as follows:

        


        


        
PROCESS BEFORE OUTPUT.
        
PROCESS AFTER INPUT.
        
MODULE user_command_0100.
        


         

When the user chooses a pushbutton, the PAI event is triggered. The function code of the pushbutton is assigned to the screen field ok_code, which is then passed onto the ABAP field with the same name. The module user_command_0100 is then processed.

Firstly, the contents of the ok_code field are copied to the auxiliary variable save_ok code, and ok_code is initialized. You should always do this, since it ensures that the screen field ok_code has always been initialized before the PBO event and can therefore not unintentionally contain an incorrect value.

Next, in the CASE structure, a text symbol is assigned to the output field according to the button that the user chose. This is displayed in the output field on the screen. If the user chooses Cancel, the program ends.


Button in der Symbolleiste einfügen – ABAP

11. Januar 2023 von Andreas

Du möchtest in Deinem ABAP-Programm einen Button in der Symbolleiste im Auswahlbildschirm (Selection-Screen) einfach einfügen? Du möchtest bestehende ABAP-Programme einfach erweitern, sodass weitere Buttons in der Symbolleiste genutzt werden können? Du möchtest Buttons mit Icons in der Symbolleiste einfügen?

In diesem Artikel gebe ich Dir Antworten auf alle oben genannten Fragen. Ich erkläre Dir Schritt-für-Schritt wie Du in SAP ERP bzw. SAP S/4HANA mit der Programmiersprache ABAP einfach und schnell Buttons in der Symbolleiste einfügen kannst.

Inhaltsverzeichnis  Anzeigen 

Button in der Symbolleiste einfügen

Über einen sogenannte “FUNCTION KEY” kannst Du im Selektionsbildschirm neue Funktionstasten und damit Buttons hinzufügen. Die Struktur SSCRFIELDS enthält fünf Attribute, die Du nutzen kannst. Im ABAP Dictionary (Transaktion SE11) kannst Du Dir diese Struktur im Detail ansehen. Dabei handelt es sich um die Attribute von FUNCTXT_01 bis FUNCTXT_05.

Durch SSCRFIELDS kannst Du einen Button in der Symbolleiste hinzufügen

Diese Felder werden intern verwenden, wenn Du die Struktur und die Anweisung “FUNCTION KEY” im ABAP-Programm verwendest.

Zuerst müssen wir die Struktur SSCRFIELDS mit einer TABLES-Anweisung im ABAP-Programm als Schnittstellen-Arbeitsbereich definieren.

TABLES sscrfields.

Als Nächstes definieren wir die Buttons in der Symbolleiste mithilfe der Anweisung “FUNCTION KEY”. Dabei gibt man eine Zahl zwischen 1 und 5 an. Wichtig hierbei ist, dass Du einen eigenen Screen definierst.

SELECTIONSCREEN BEGIN OF SCREEN 100.

SELECTIONSCREEN FUNCTION KEY 1.

SELECTIONSCREEN END OF SCREEN 100.

Im INITIALIZATION oder START-OF-SELECTION Event kann man den Text des Buttons in der Symbolleiste definieren. Hier kann man nur einen Text angeben oder zusätzlich auch ein Icon. Im Artikel “ABAP – Übersicht über ICON” findest Du eine Übersicht über alle Icons in ABAP.

INITIALIZATION.

sscrfields-functxt_01 = ‚@S_OKAY@ ERP UP‘.

Im Event “AT SELECTION-SCREEN” kann man daraufhin auf den Funktionscode reagieren. Die hinzugefügten Buttons in der Struktur SSCRFIELDS haben dabei einen festen Funktionscode. Außerdem kannst Du diese Buttons auch mit Tastenkombinationen aufrufen.

Function KeyFunktionstasteShortcut
FUNCTXT_01FC01Strg + F1
FUNCTXT_02FC02Strg + F2
FUNCTXT_03FC03Strg + F3
FUNCTXT_04FC04Strg + F4
FUNCTXT_05FC05Strg + F5

Mit folgendem ABAP-Code kannst Du z.B. auf den Funktionscode des ersten Function Key FUNCTXT_01 reagieren:

AT SELECTIONSCREEN.

IF sscrfields-ucomm = ‚FC01‘.

“ Logik, wenn auf den Button gedrückt wird

ENDIF.

Insgesamt kann das Beispielprogramm also folgendermaßen aussehen:

REPORT zdemo_sel_screen_function_key.

TABLES sscrfields.

SELECTIONSCREEN BEGIN OF SCREEN 100.

SELECTIONSCREEN FUNCTION KEY 1.

SELECTIONSCREEN END OF SCREEN 100.

INITIALIZATION.

sscrfields-functxt_01 = ‚@S_OKAY@ ERP UP‘.

CALL SELECTIONSCREEN 100.

AT SELECTIONSCREEN.

IF sscrfields-ucomm = ‚FC01‘.

“ Logik, wenn auf den Button gedrückt wird

ENDIF.

Führt man dieses Beispielprogramm aus, wird der Button in der Symbolleiste angezeigt.

Button in der Symbolleiste - ERP UP

Hinweise SELECTION-SCREEN FUNCTION KEY

Button mit Tooltip

Im oberen Beispiel wurde lediglich das Attribut FUNCTXT_01 mit einem Icon und einem Text gefüllt. Wenn man mit der Maus über den Button fährt, wird im Tooltip der hinzugefügte String angezeigt. Um das zu verbessern, kann man die Struktur SMP_DYNTXT verwenden. Dabei stehen folgende Attribute zur Verfügung.

AttributBeschreibung
TEXTFunktions- oder Menütext
ICON_IDIkone in Textfeldern (Ersatzdarstellung, Alias)
ICON_TEXTIkonentext
QUICKINFOInfotext
PATHFastpath-Kennzeichen

Nachdem man die entsprechenden Attribute gefüllt hat, kann man der entsprechenden Komponente FUNCTXT_0* des Arbeitsbereiches SSCRFIELDS SMP_DYNTXT zuweisen. Ein Beispiel kann folgendermaßen aussehen:

INITIALIZATION.

DATA: ls_dyntxt TYPE smp_dyntxt.

ls_dyntxt-icon_id = icon_checked.

ls_dyntxt-icon_text = ‚ERP UP‘.

ls_dyntxt-quickinfo = ‚ERP UP Button‘.

sscrfields-functxt_01 = ls_dyntxt.

Verwendung von sscrfields-ucomm

Während der Selektionsbildverarbeitung besitzt die Systemvariable sy-ucomm nicht immer den richtigen Wert. Deshalb solltest Du bei der Verarbeitung des Funktionscodes stattdessen sscrfields-ucomm auswerten.

Wenn auf andere Buttons in der Symbolleiste gedrückt werden, werden die Funktionscodes natürlich entsprechend der Systemvariable sy-ucomm verarbeitet.

Dynamische Veränderung des Selektionsbildes

Die Verarbeitung des Funktionscodes wird im Event AT SELECTION-SCREEN durchgeführt. Es ist generell wichtig zu verstehen, dass wenn man den Funktionscode des Buttons und den Ereignisblock AT SELECTION-SCREEN abgeschlossen hat, das Programm zur Anzeige des Selektionsbildes zurückkehrt. Danach kann man das Programm ausführen oder abbrechen. Zur Programmsteuerung sind deshalb die Buttons in der Symbolleiste nicht geeignet.

ABAP-Programm DEMO_SEL_SCREEN_FUNCTION_KEY

Das ABAP-Programm DEMO_SEL_SCREEN_FUNCTION_KEY stellt die erläuterten Konzepte ebenfalls in einem Beispielprogramm dar. Du kannst das Programm im ABAP Editor (Transaktion SE38) im Detail analysieren und ausführen.


Menu Painter: Feldname für dynamische Texte

Der Funktions- oder Menütext soll zur Laufzeit geändert werden. Unabhängig vom Setzen des PF-STATUS wird am Ende von PBO der Inhalt des in diesem Feld genannten ABAP- oder Dictionaryfeldes in die Menüs und Funktionstasten, die diesen Text referieren, eingemischt.

Hinweis zur Struktur dieses Feldes

Das Feld soll mit der Struktur SMP_DYNTXT angelegt werden:

  • TEXT: Funktions- oder Menütext. Dieser Text wird in der Menüleiste, in Menüs und im Maustastenmenü angezeigt; er erscheint auch in der Drucktastenleiste, sofern die Komponente ICON_ID nicht gefüllt ist.
  • ICON_ID und ICON_TEXT: Wenn auf der Drucktaste eine Ikone erscheinen soll, muß ICON_ID gefüllt werden. Ein zusätzlicher Ikonentext kann in ICON_TEXT mitgegeben werden. Das Feld ICON_ID wird durch eine einfache Zuweisung einer Ikone versorgt (z.B. F-ICON_ID = ICON_CANCEL). Der Funktionsbaustein ICON_CREATE kann hier nicht benutzt werden.
    Falls die Komponente ICON_ID einen Wert hat, muß auch die Komponente TEXT versorgt werden, da deren Inhalt im Maustastenfenster erscheint.
  • QUICKINFO: Der Text wird als Quickinfo in der Statuszeile angezeigt.

Hinweis für die Benutzung von Referenztechniken

Wenn Sie mit Referenzen auf GUI-Definitionen anderer Programme und dynamischen Texten arbeiten wollen, müssen Sie beachten, daß die Felder dem Programm zugeordnet werden, bei denen der Status definiert ist.

Wenn Sie einen Status definieren, der über den Aufruf eines Funktionsbausteins von mehreren Programmen benutzt wird, müssen die Felder für dynamische Texte in der Funktionsgruppe angelegt werden, zu der der Status angelegt wurde – die Felder sind nicht im rufenden Programm anzulegen. In diesem Fall kann man über eine Zuordungstabelle Feldname – Feldinhalt in der Schnittstelle die dynamischen Texte vom Aufrufer bestimmen lassen.

Wenn der Aufruf über SET PF-STATUS … OF PROGRAM prog erfolgt, gibt es keine vernünftige Schnittstelle für die Textübergabe. Es gilt aber auch hier, daß die Felder in dem gerufenen Programm prog angelegt und versorgt werden müssen.

Arbeiten Sie mit der Include Menü Technik, müssen Sie die Felder für dynamische Texte in dem Programm anlegen, zu dem der gesetzte Status angelegt wurde – also nicht im dem Programm, für das das inkludierte Menü angelegt wurde.