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