Anfang des Inhaltsbereichs

Table Controls: Beispiel mit Blättern Dokument im Navigationsbaum lokalisieren

Das folgende Beispiel verarbeitet einen Table Control mit LOOP ohne parallele Schleife über eine interne Tabelle. Zusätzlich zur Blätterleiste wird ein programmgesteuertes Blättern mit Funktionscodes ermöglicht.

Beispiel

REPORT demo_dynpro_tabcont_loop.

CONTROLS flights TYPE TABLEVIEW USING SCREEN 100.

DATA: ok_code TYPE sy-ucomm,
      save_ok TYPE sy-ucomm.

DATA: itab TYPE TABLE OF demo_conn,
      fill TYPE i.

      TABLES demo_conn.

DATA: lines TYPE i,
      limit TYPE i.

SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE itab.

CALL SCREEN 100.

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'SCREEN_100'.
  DESCRIBE TABLE itab LINES fill.
  flights-lines = fill.
ENDMODULE.

MODULE fill_table_control OUTPUT.
  READ TABLE itab INTO demo_conn INDEX flights-current_line.
ENDMODULE.

MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE read_table_control INPUT.
  lines = sy-loopc.
  MODIFY itab FROM demo_conn INDEX flights-current_line.
ENDMODULE.

MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'NEXT_LINE'.
      flights-top_line = flights-top_line + 1.
      limit = fill - lines + 1.
      IF flights-top_line > limit.
        flights-top_line = limit.
      ENDIF.
    WHEN 'PREV_LINE'.
      flights-top_line = flights-top_line - 1.
      IF flights-top_line < 0.
        flights-top_line = 0.
      ENDIF.
    WHEN 'NEXT_PAGE'.
      flights-top_line = flights-top_line + lines.
      limit = fill - lines + 1.
      IF flights-top_line > limit.
        flights-top_line = limit.
      ENDIF.
    WHEN 'PREV_PAGE'.
      flights-top_line = flights-top_line - lines.
      IF flights-top_line < 0.
        flights-top_line = 0.
      ENDIF.
    WHEN 'LAST_PAGE'.
      flights-top_line =  fill - lines + 1.
    WHEN 'FIRST_PAGE'.
      flights-top_line = 0.
  ENDCASE.
ENDMODULE.

Das Layout von Dynpro 100 ist:

Diese Grafik wird im zugehörigen Text erklärt

Es ist ein resizefähiges Table Control namens FLIGHTS definiert. Die Felder des Table Controls sind von der Struktur DEMO_CONN aus dem Dictionary übernommen worden. Die ersten beiden Spalten sind Führungsspalten. Die entsprechenden Felder sind Ausgabefelder. Es sind eine Titelleiste, Spaltenüberschriften und eine Markierspalte angelegt. Der Markierspalte ist die Komponente MARK vom Typ Character der Länge 1 aus der Struktur DEMO_CONN zugeordnet. Es können eine Spalte und mehrere Zeilen markiert werden.

Die Ablauflogik von Dynpro 100 ist:

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  LOOP WITH CONTROL flights.
    MODULE fill_table_control.
  ENDLOOP.

PROCESS AFTER INPUT.
  MODULE cancel AT EXIT-COMMAND.
  LOOP WITH CONTROL flights.
    MODULE read_table_control.
  ENDLOOP.
  MODULE user_command_0100.

Es werden zu PBO und PAI jeweils eine Schleife über das Table Control FLIGHTS ausgeführt. In der PBO-Schleife wird ein Modul zum Füllen des Table Controls aus der Tabelle ITAB des ABAP-Programms aufgerufen. In der PAI Schleife wird ein Modul zum Modifizieren der Tabelle ITAB aufgerufen.

Vor der PBO-Schleife wird im Modul STATUS_0100 die aktuelle Anzahl von Zeilen in der internen Tabelle ITAB in die Komponente LINES der Control-Struktur FLIGHTS gestellt. Dadurch kann das System die Blätterleiste des Table Controls richtig einrichten.

In der PBO-Schleife wird im Modul FILL_TABLE_CONTROL der Arbeitsbereich DEMO_CONN mit Werten aus der internen Tabelle gefüllt, wobei der Zeilenindex der aktuellen Table Control-Zeile entspricht.

In der PAI-Schleife wird im Modul READ_TABLE_CONTROL die aktuelle Anzahl der Schleifen SY-LOOPC im Table Control in eine Hilfsvariable gestellt. Diese Anzahl hängt von der Bildschirmgröße ab. Die Zeile der internen Tabelle, deren Zeilenindex der aktuellen Table Control-Zeile entspricht, wird mit dem Inhalt des Arbeitsbereichs DEMO_CONN überschrieben. Dadurch werden Benutzereingaben in die Eingabefelder des Controls in die interne Tabelle übernommen. Insbesondere enthält die interne Tabelle damit auch in ihrer Spalte MARK ein Flag, ob die Table Control-Zeile markiert ist oder nicht.

Nach der PAI-Schleife werden im Modul USER_COMMAND_0100 Benutzereingaben verarbeitet. Der GUI Status SCREEN_100 ermöglicht die entsprechenden Funktionscodes. Es kann zeilen- und seitenweise geblättert und zur ersten bzw. letzten Seite gesprungen werden. Das Blättern geschieht durch Setzen der Komponente TOP_LINE der Control-Struktur FLIGHTS. Für das seitenweise Blättern wird als Schrittweite die Hilfsvariable verwendet, die in der PAI-Schleife durch SY-LOOPC gefüllt wurde.

Ende des Inhaltsbereichs