Show TOC Anfang des Inhaltsbereichs

TabStrips auf Selektionsbildern  Dokument im Navigationsbaum lokalisieren

Wie auf Dynpros, können auch auf Selektionsbildern TabStrips verwendet werden. Hierfür müssen der TabStrip-Bereich und die zugehörigen Tab-Reiter definiert und den Tab-Reitern ein Subscreen zugewiesen werden. Eine entsprechende Programmierung der Dynproablauflogik und die Deklaration eines TabStrip-Controls im ABAP-Programm sind nicht notwendig und verboten, da diese automatisch generiert werden.

Ein TabStrip-Bereich mit zugehörigen Tab-Reitern kann wie folgt während der Definition von Selektionsbildern angelegt werden:

SELECTION-SCREEN: BEGIN OF TABBED BLOCK tab_area FOR n LINES,
                  TAB (len) tab1 USER-COMMAND ucom1
                              [DEFAULT [PROGRAM prog] SCREEN scrn],
                  TAB (len) tab2 USER-COMMAND ucom2
                              [DEFAULT [PROGRAM prog] SCREEN scrn],
                  ...
                  
END OF BLOCK tab_area.

Diese Anweisungen definieren einen TabStrip-Bereich tab_area, dessen Größe durch die Anzahl n definiert wird. Dem TabStrip-Bereich werden die Tab-Reiter tab1, tab2 ... zugeordnet. Mit len wir die Breite der Tab-Reiter festgelegt. Jedem Tab-Reiter muss ein Funktionscode ucom zugeordnet werden. Der Funktionscode steht zum Zeitpunkt AT SELECTION-SCREEN im Feld sy-ucomm zur Auswertung zur Verfügung.

Für jeden Tab-Reiter wird automatisch ein gleichnamiges Characterfeld im ABAP-Programm angelegt. Vor dem Senden des Selektionsbild kann diesem ein Text zugewiesen werden, der dann als Beschriftung des Tab-Reiters auf dem Selektionsbild erscheint.

Jedem Tab-Reiter muss ein Subscreen zugewiesen werden, der bei Auswahl des Tab-Reiters im TabStrip-Bereich angezeigt wird. Als Subscreens können zugewiesen werden:

·        Subscreen-Dynpros, die mit dem Screen Painter definiert wurden

·        Selektionsbilder als Subscreens, die in einem ABAP-Programm definiert wurden.

Die Zuweisung von Subscreens zu Tab-Reitern kann statisch im Programm oder dynamisch zur Laufzeit erfolgen. Fehlt die Zuweisung für einen Tab-Reiter beim Senden des Selektionsbilds, kommt es zu einem Laufzeitfehler.

·        Statische Zuweisung

Die statische Zuweisung erfolgt mit dem DEFAULT-Zusatz bei der Definition der Tab-Reiter. Es kann ein ABAP-Programm und ein Subscreen dieses Programms angegeben werden. Ohne Angabe eines Programms wird der Subscreen im aktuellen Programm gesucht. Bei Auswahl des entsprechenden Tab-Reiters wird dieser aktiviert und dem TabStrip-Bereich wird der Subscreen zugewiesen. Die statische Zuordnung bleibt während der gesamten Programmlaufzeit erhalten, kann aber vor dem Senden des Selektionsbilds dynamisch überschrieben werden.

·        Dynamische Zuweisung

Für jeden TabStrip-Bereich wird automatisch eine gleichnamige Struktur im ABAP-Programm angelegt. Diese Struktur hat die drei Komponenten prog, dynnr und activetab. Bei statischer Zuweisung enthalten diese beim Senden des Selektionsbilds den Namen des ABAP-Programms in dem der zugewiesene Subscreen definiert ist, die Nummer des Subscreens und den Namen des Tab-Reiters, der auf dem Selektionsbild aktiv ist, und dem diese Werte zugewiesen sind. Standardmäßig ist der erste Tab-Reiter aktiv. Durch Wertzuweisungen an diese Komponenten vor dem Senden des Selektionsbilds kann der aktive Tab-Reiter und der ihm zugewiesene Subscreen dynamisch gesetzt werden.

Falls ein zugewiesener Subscreen ein normales Subscreen-Dynpro ist, müssen die Dialogmodule, die in dessen Ablauflogik aufgerufen werden, im aktuellen ABAP-Programm definiert werden. Falls ein zugewiesener Subscreen ein Selektionsbild ist, führen Benutzeraktionen zum Ereignis AT SELECTION-SCREEN und dessen Varianten (siehe Selektionsbildverarbeitung). Dazu gehört auch die Auswahl eines Tab-Reiters. AT SELECTION-SCREEN wird bei Aktionen auf Selektionsbildern, die auf einem anderen Selektionsbild eingebunden sind, mindestens zweimal ausgelöst: erst für das eingebundene Selektionsbild, dann für das (die) einbindende(n) Selektionsbild(er).

Beispiel

REPORT demo_sel_screen_with_tabstrip.

DATA flag(1) TYPE c.

* SUBSCREEN 1

SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p1(10) TYPE c,
            p2(10) TYPE c,
            p3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 100.

* SUBSCREEN 2

SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS: q1(10) TYPE c OBLIGATORY,
            q2(10) TYPE c OBLIGATORY,
            q3(10) TYPE c OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 200.

* STANDARD SELECTION SCREEN

SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 10 LINES,
                  TAB (20) button1 USER-COMMAND push1,
                  TAB (20) button2 USER-COMMAND push2,
                  TAB (20) button3 USER-COMMAND push3
                                   DEFAULT SCREEN 300,
                  END OF BLOCK mytab.

INITIALIZATION.
  button1 = text-010.
  button2 = text-020.
  button3 = text-030.
  mytab-prog = sy-repid.
  mytab-dynnr = 100.
  mytab-activetab = 'BUTTON1'.

AT SELECTION-SCREEN.
  CASE sy-dynnr.
    WHEN 1000.
      CASE sy-ucomm.
        WHEN 'PUSH1'.
          mytab-dynnr = 100.
          mytab-activetab = 'BUTTON1'.
        WHEN 'PUSH2'.
          mytab-dynnr = 200.
          mytab-activetab = 'BUTTON2'.
      ENDCASE.
    WHEN 100.
      MESSAGE s888(sabapdocu) WITH text-040 sy-dynnr.
    WHEN 200.
      MESSAGE s888(sabapdocu) WITH text-040 sy-dynnr.
  ENDCASE.

MODULE init_0100 OUTPUT.
  
LOOP AT SCREEN.
    IF screen-group1 = 'MOD'.
      CASE flag.
        WHEN 'X'.
          screen-input = '1'.
        WHEN ' '.
          screen-input = '0'.
      ENDCASE.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDMODULE.

MODULE user_command_0100 INPUT.
  MESSAGE s888(sabapdocu) WITH text-050 sy-dynnr.
  CASE sy-ucomm.
    WHEN 'TOGGLE'.
      IF flag = ' '.
        flag = 'X'.
      ELSEIF flag = 'X'.
        flag = ' '.
      ENDIF.
  ENDCASE.
ENDMODULE.

START-OF-SELECTION.
  WRITE: / 'P1:', p1,'Q1:', q1,
         / 'P2:', p2,'Q2:', q2,
         / 'P3:', p3,'Q3:', q3.

In diesem Programm werden zwei Selektionsbilder, 100 und 200, als Subscreens definiert und auf dem Standardselektionsbild 1000 wird ein TabStrip-Bereich mit drei Tab-Reitern angelegt. Nur dem dritten Tab-Reiter wird statisch ein Subscreen-Dynpro 300 des gleichen Programms zugeordnet.

Das Layout von Dynpro 300 ist:

Diese Grafik wird im zugehörigen Text erklärt

Die Ein-/Ausgabefelder sind p1bis q3 sind durch Übernehmen der Parameter aus dem ABAP-Programm angelegt und der Modifikationsgruppe MODzugeordnet worden. Die Drucktaste hat den Funktionscode TOGGLE.

Die Bildschirmablauflogik von Dynpro 300 ist:

PROCESS BEFORE OUTPUT.
  MODULE init_0100.

PROCESS AFTER INPUT.
  MODULE user_command_0100.

Die beiden Dialogmodule sind im ABAP-Programm definiert.

Bei der Programmausführung erscheint das Standardselektionsbild. Zum Zeitpunkt wurden die Texte der Tab-Reiter festgelegt, dem TabStrip-Bereich initial das Subscreen-Selektionsbild 100 zugewiesen und der erste Tab-Reiter aktiviert.

Benutzeraktionen auf dem Selektionsbild werden im Ereignisblock AT SELECTION-SCREEN ausgewertet. Insbesondere werden bei Auswahl der ersten beiden Tab-Reiter dynamisch die entsprechenden Subscreens zugewiesen und Tab-Reiter aktiviert. Für den dritten Tab-Reiter ist dies nicht notwendig, da bei seiner Auswahl die statische Zuweisung von Dynpro 300 automatisch in die Struktur mytab gestellt wird.

Vor der Anzeige von Subscreen-Dynpro wird das PBO-Modul init_0100 ausgeführt und Benutzeraktionen auf dem Subscreen-Dynpro führen zur Ausführung des PAI-Moduls. Dies gilt auch für die Auswahl eines Tab-Reiters. Danach wird AT SELECTION-SCREEN ausgelöst.

Nachrichten in der Statuszeile zeigen an, wo Aktionen ausgeführt und verarbeitet werden.

Ende des Inhaltsbereichs