Show TOC Anfang des Inhaltsbereichs

Programmgesteuerte Datenübergabe  Dokument im Navigationsbaum lokalisieren

Zum Übergeben einzelner Ausgabefelder oder zusätzlicher Informationen einer Zeile an den zugehörigen Verarbeitungsblock während eines interaktiven Ereignisses verwendet man folgende Anweisungen:

·        HIDE

Die HIDE-Anweisung ist eine der wesentlichen Anweisungen für das interaktive Reporting. Mit der HIDE-Technik definiert man schon während der Erstellung einer Listenstufe, welche Informationen an die nachfolgenden Verzweigungslisten weitergegeben werden sollen.

·        READ LINE

Mit den Anweisungen READ LINE und READ CURRENT LINE liest man gezielt die Daten aus Zeilen vorhandener Listenstufen. Diese Anweisung steht in engem Zusammenhang mit der HIDE-Technik.

·        GET CURSOR

Die Anweisungen GET CURSOR FIELD und GET CURSOR LINEermöglichen es, entweder ein Ausgabefeld oder eine Ausgabezeile, auf denen der Cursor während einem interaktiven Ereignis positioniert war, in das ABAP-Programm zu übernehmen.

·        DESCRIBE LIST

Die Anweisung DESCRIBE LIST erlaubt es, Eigenschaften von Listen, wie z.B. die Anzahl der Zeilen oder Seiten, in Variablen einzulesen.

In den folgenden Abschnitten befinden sich Beispiele zu den einzelnen Anweisungen. Die genaue Beschreibung der jeweiligen Syntax ist in der Schlüsselwortdokumenation zu finden.

Die HIDE-Technik

Das folgende Beispiel fasst einige der wesentlichen Merkmale des interaktiven Reporting zusammen. Aus zusammenfassenden Informationen einer Grundliste wird mit Hilfe der HIDE-Technik zu immer detaillierteren Informationen auf Folgelisten verzweigt.

Beispiel

Das folgende Programm sei mit der logischen Datenbank F1S verknüpft.

REPORT demo_list_hide NO STANDARD PAGE HEADING.

TABLES: spfli, sbook.

DATA: num TYPE i,
      dat TYPE d.

START-OF-SELECTION.
  num = 0.
  SET PF-STATUS 'FLIGHT'.

GET spfli.
  num = num + 1.
  WRITE: / spfli-carrid, spfli-connid,
           spfli-cityfrom, spfli-cityto.
  HIDE:    spfli-carrid, spfli-connid, num.

END-OF-SELECTION.
  CLEAR num.

TOP-OF-PAGE.
  WRITE 'List of Flights'.
  ULINE.
  WRITE 'CA  CONN FROM                 TO'.
  ULINE.

TOP-OF-PAGE DURING LINE-SELECTION.
  CASE sy-pfkey.
    WHEN 'BOOKING'.
      WRITE sy-lisel.
      ULINE.
    WHEN 'WIND'.
      WRITE:  'Booking', sbook-bookid,
           /  'Date   ', sbook-fldate.
      ULINE.
  ENDCASE.

AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN 'SELE'.
      IF num NE 0.
        SET PF-STATUS 'BOOKING'.
        CLEAR dat.
        SELECT * FROM sbook WHERE carrid = spfli-carrid
                            AND   connid = spfli-connid.
          IF sbook-fldate NE dat.
            dat = sbook-fldate.
            SKIP.
            WRITE / sbook-fldate.
            POSITION 16.
          ELSE.
            NEW-LINE.
            POSITION 16.
          ENDIF.
          WRITE sbook-bookid.
          HIDE: sbook-bookid, sbook-fldate, sbook-custtype,
                sbook-smoker, sbook-luggweight, sbook-class.
        ENDSELECT.
        IF sy-subrc NE 0.
          WRITE / 'No bookings for this flight'.
        ENDIF.
        num = 0.
        CLEAR sbook-bookid.
      ENDIF.
    WHEN 'INFO'.
      IF NOT sbook-bookid IS INITIAL.
        SET PF-STATUS 'WIND'.
        SET TITLEBAR 'BKI'.
        WINDOW STARTING AT 30 5 ENDING AT  60 10.
        WRITE: 'Customer type   :', sbook-custtype,
             / 'Smoker          :', sbook-smoker,
             / 'Luggage weigtht :', sbook-luggweight UNIT 'KG',
             / 'Class           :', sbook-class.
      
ENDIF.
  ENDCASE.

Zum Zeitpunkt START-OF-SELECTION wird der Status FLIGHT für die Grundliste gesetzt. Im Status FLIGHT seien die Funktionstaste F2 und eine Drucktaste mit dem Funktionscode SELE (Text SELECT) belegt. Dadurch führen die Benutzeraktionen Doppelklick, Drücken auf F2 bzw. Drucktaste SELECT alle zum Ereignis AT USER-COMMAND.

Die drei Felder spfli-carrid, spfli-connid und num werden während der Erstellung der Grundliste in den HIDE-Bereich geschrieben. Nach Auswahl einer Zeile erscheint die unter AT USER-COMMAND zum Funktionscode SELE definierte Verzweigungsliste. Beim Ereignis AT USER-COMMAND werden alle abgelegten HIDE-Felder der ausgewählten Zeile wieder geladen. Über num wird überprüft, ob eine Zeile der eigentlichen Liste ausgewählt wurde. Die Verzweigungsliste erhält den Status BOOKING, in der F2 mit dem Funktionscode INFO (Text: Booking Information) belegt wird. Auf der Verzweigungsliste werden Daten dargestellt, die mit Hilfe der HIDE-Felder der Grundliste selektiert werden. Zu jeder ausgegebenen Listenzeile werden zusätzliche Informationen im HIDE-Bereich abgelegt.

Eine Zeilenauswahl auf der Verzweigungsliste führt zur Anzeige der abgelegten Informationen in einem Dialogfenster mit dem Status WIND. Für den Status WIND sind die Voreinstellungen des Statustyps Dialogfenster mit Abgleich für Listenstatus übernommen worden. Die Gültigkeit der Zeilenauswahl wird anhand sbook-bookid überprüft.

Sämtliche Seitenköpfe und die Titelleiste des Dialogfensters werden im Programm gesetzt.

Zeilen aus Listen lesen

Alle von einen ABAP-Programm nacheinander erzeugten Listen werden vom System intern gespeichert. Daher kann man im Programm auf jede Liste zugreifen, die zum aktuellen Dynpro erzeugt und noch nicht durch Rückkehr zu einer vorhergehenden Ebene gelöscht wurde. Zum Lesen von Zeilen dienen die Anweisungen READ LINE und READ CURRENT LINE.

Um eine Zeile nach einem interaktiven Listenereignis aus einer Liste zu lesen, verwendet man die Anweisung: READ LINE ...

Um eine Zeile zweimal hintereinander zu lesen, verwendet man: READ CURRENT LINE ...

Diese Anweisung liest eine zuvor bei einem interaktiven Ereignis (F2) oder durch READ LINE gelesene Zeile.

Beispiel

Das folgende Programm ist mit der logischen Datenbank F1S verknüpft.

REPORT demo_list_read_line NO STANDARD PAGE HEADING.

TABLES: sflight.

DATA: box(1) TYPE c, lines TYPE i, free TYPE i.

START-OF-SELECTION.
  SET PF-STATUS 'CHECK'.

GET sflight.
  WRITE: box AS CHECKBOX, sflight-fldate.
  HIDE: sflight-fldate, sflight-carrid, sflight-connid,
        sflight-seatsmax, sflight-seatsocc.

END-OF-SELECTION.
  lines = sy-linno - 1.

TOP-OF-PAGE.
  WRITE: 'List of flight dates'.
  ULINE.

TOP-OF-PAGE DURING LINE-SELECTION.
  WRITE:  'Date:', sflight-fldate.
  ULINE.

AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN 'READ'.
      box = space.
      SET PF-STATUS 'CHECK' EXCLUDING 'READ'.
      DO lines TIMES.
        READ LINE sy-index FIELD VALUE box.
        IF box = 'X'.
          free = sflight-seatsmax - sflight-seatsocc.
          IF free > 0.
            NEW-PAGE.
            WRITE: 'Company:', sflight-carrid,
                   'Connection: ',sflight-connid,
                 / 'Number of free seats:', free.
          
ENDIF.
        ENDIF.
      ENDDO.
  ENDCASE.

Nach Anzeige des Selektionsbilds erscheint eine Grundliste, auf welcher der Benutzer Ankreuzfelder ausfüllen kann. Der selbst defnierte Seitenkopf der Grundliste verwendet die Parameter CITY_FR und CITY_TO. Diese Parameter sind in der logischen Datenbank F1S definiert.

Das Programm verwendet den Status CHECK, bei dem der Funktionscode READ (Text Read Lines) die Funktionstaste F5 und eine Taste in der Drucktastenleiste belegt. Nach der entsprechenden Benutzeraktion werden zum Zeitpunkt AT USER-COMMAND alle Zeilen der Grundliste über READ LINE in einer DO-Schleife gelesen. Dabei werden alle zuvor mit HIDE abgelegten Werte für jede Zeile in die zugehörigen Felder gestellt. Das Ankreuzfeld box wird durch die Option FIELD VALUE zusätzlich gelesen. Zu jeder angekreuzten Zeile werden falls noch Plätze frei sind Fluggesellschaft, Verbindungsnummer und die Anzahl der freien Plätze in eine Verzweigungsliste geschrieben.

Für jede Ausgabe wird eine neue Seite mit eigenem Seitenkopf angelegt. Auf der Verzweigungsliste wird der Funktionscode READ mit dem EXCLUDING-Zusatz der Anweisung SET PF-STATUS deaktiviert.

Nach der Rückkehr aus der Verzweigungsliste, sind die Ankreuzfelder weiterhin gefüllt.

Listen an Cursorposition lesen

Um Informationen über die Cursorposition während eines interaktiven Ereignisses zu erhalten, verwendet man die Anweisung GET CURSOR. Diese Anweisung kann entweder feld- oder zeilenbezogen verwendet werden.

Für feldbezogene Informationen verwendet man die Variante:

GET CURSOR FIELD ...

Für zeilenbezogene Informationen verwendet man die Variante:

GET CURSOR LINE ...

Beispiel

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 40.

DATA: HOTSPOT(10) VALUE 'Click me!',
      F(10), OFF TYPE I, LIN TYPE I, VAL(40), LEN TYPE I.

FIELD-SYMBOLS <FS>.
ASSIGN HOTSPOT TO <FS>.
WRITE 'Demonstration of GET CURSOR statement'.
SKIP TO LINE 4.
POSITION 20.
WRITE <FS> HOTSPOT COLOR 5 INVERSE ON.

AT LINE-SELECTION.
  WINDOW STARTING AT 5 6 ENDING AT 45 20.
  GET CURSOR FIELD F OFFSET OFF
             LINE LIN VALUE VAL LENGTH LEN.
  WRITE: 'Result of GET CURSOR FIELD: '.
  ULINE AT /(28).
  WRITE: / 'Field: ', F,
         / 'Offset:', OFF,
         / 'Line:  ', LIN,
         / 'Value: ', (10) VAL,
         / 'Length:', LEN.
  SKIP.
  GET CURSOR LINE LIN OFFSET OFF VALUE VAL LENGTH LEN.
  WRITE: 'Result of GET CURSOR LINE: '.
  ULINE AT /(27).
  WRITE: / 'Offset:', OFF,
         / 'Value: ', VAL,
         / 'Length:', LEN.

In diesem Programm wird das Feld HOTSPOT dem Feldsymbol <FS>zugewiesen und als Hotspot auf dem Ausgabebild dargestellt. Positioniert der Benutzer den Cursor auf einer Listenzeile und wählt die Zeile aus, erscheint ein Dialogfenster, das die Resultate der Anweisungen GET CURSOR zum Zeitpunkt AT LINE-SELECTION ausgibt.

Bei Positionierung auf der Ausgabe des Feldsymbols steht nach GET CURSOR FIELD der Name des Feldes, das dem Feldsymbol <FS> zugewiesen ist, in F und nicht der Name des Feldsymbols.

Attribute von Listen bestimmen

Falls man während der Arbeit mit Listenstufen Eigenschaften benötigt, die nicht während der Listenerstellung in Variablen gespeichert wurden, kann man die Anweisung DESCRIBE LIST verwenden.

Um die Anzahl der Zeilen oder Seiten einer Liste zu erhalten, verwendet man:

DESCRIBE LIST NUMBER OF LINES|PAGES n ...

Um die Seitenzahl zu einer bestimmten Zeilennummer zu erhalten, verwendet man:

DESCRIBE LIST LINE lin PAGE pag ...

Um die Eigenschaften einer bestimmten Seite zu erhalten, verwendet man:

DESCRIBE LIST PAGE pag ...

Man verwende DESCRIBE LIST möglichst nur für fertiggestellte Listen, da bei Listen, die gerade erstellt werden (Index sy-lsind), manche Eigenschaften noch nicht aktualisiert sind.

Beispiel

REPORT demo_list_describe_list NO STANDARD PAGE HEADING
                               LINE-SIZE 40 LINE-COUNT 5(1).

DATA: lin TYPE i, pag TYPE i,
      col TYPE i, len TYPE i, lin1 TYPE i,
      top TYPE i, tit TYPE i, head TYPE i, end TYPE i.

DO 4 TIMES.
  WRITE / sy-index.
ENDDO.

TOP-OF-PAGE.
  WRITE 'Demonstration of DESCRIBE LIST statement'.
  ULINE.

END-OF-PAGE.
  ULINE.

AT LINE-SELECTION.
  NEW-PAGE LINE-COUNT 0.
  WINDOW STARTING AT 1 13 ENDING AT 40 25.
  DESCRIBE LIST: numBER OF LINES lin INDEX 0,
                 numBER OF PAGES pag INDEX 0.
  WRITE: 'Results of DESCRIBE LIST: '.
  ULINE AT /(25).
  WRITE: / 'Lines: ', lin,
         / 'Pages: ', pag.
  SKIP.
  DESCRIBE LIST LINE sy-lilli PAGE pag INDEX 0.
  WRITE: / 'Line', (1) sy-lilli, 'is on page', (1) pag.
  SKIP.
  DESCRIBE LIST PAGE pag INDEX 0 LINE-SIZE   col
                                 LINE-COUNT  len
                                 LINES       lin
                                 FIRST-LINE  lin1
                                 TOP-LINES   top
                                 TITLE-LINES tit
                                 HEAD-LINES  head
                                 END-LINES   end.
  WRITE: 'Properties of Page', (1) pag, ':',
       / 'Width:       ',  col,
       / 'Length:      ',  len,
       / 'Lines:       ',  lin,
       / 'First Line:  ',  lin1,
       / 'Page Header: ',  top,
       / 'Title Lines: ',  tit,
       / 'Header Lines:',  head,
       / 'Footer Lines:',  end.

Dieses Programm erzeugt eine zweiseitige Liste von jeweils 5 Zeilen. Zwei Zeilen werden für den selbst definierten Seitenkopf, eine Zeile für den Seitenfuß verwendet. Wählt der Benutzer eine Zeile, erscheint ein Dialogfenster, das die Eigenschaften der Liste anzeigt.

Während der Erstellung der Verzweigungsliste werden alle Varianten der Anweisung DESCRIBE LIST auf die Grundliste angewendet und die Ergebnisse im Dialogfenster dargestellt. Dabei werden die zu beschreibenden Zeilen und Seiten dynamisch über sy-lilli adressiert.

Ende des Inhaltsbereichs