
Zum Persistieren von Daten, insbesondere von Seitenattributen, können Sie Server-seitige Cookies verwenden.
Hierzu setzen Sie in den Eventhandlern OnManipulation und
OnRequest einfache ABAP-Mittel ein, kombiniert mit Methoden der Klasse für Server-seitige Cookies:
Sie können die Daten (Strings) über export als Cluster in Datenbanktabellen ablegen und von dort über import wieder übernehmen.
Die Klasse CL_BSP_SERVER_SIDE_COOKIE stellt Methoden zum Setzen, Holen, Löschen und Verwalten von Cookies im Server zur Verfügung.
Server-seitige Cookies sind persistente Daten, ähnlich wie die üblichen Client-seitigen Cookies. Während jedoch die Größe von Cookies auf dem Client beschränkt ist auf 4 Kilobytes pro Cookie, 300 Cookies insgesamt und 20 per Server oder Domäne, haben die Server-seitigen Cookies im Prinzip keinerlei Mengen- oder Größenbeschränkungen.
Server-seitige Cookies bestehen aus großen Datenmengen, die gecustomized und auf dem Server abgelegt sind. Sie werden nicht zwischen Client und Server hin und her transferiert.
Sie verwenden in den angegebenen Eventhandler die folgenden ABAP-Ausdrücke und Klassenmethoden:
OnManipulation
export (benötigte Seite + Controller + Seitenattribute) to buffer XSTRING
CL_BSP_SERVER_SIDE_COOKIE->Methode für Ablage(XSTRING).
OnRequest
CL_BSP_SERVER_SIDE_COOKIE->Methode für Retrieval(XSTRING).
import (benötigte Seite + Controller + Seitenattribute) from buffer XSTRING.
Die hier aufgeführten Schritte werden im folgenden Beispiel näher erläutert.
Im folgenden Beispiel können Sie sehen, wie in einer BSP mit einfachen ABAP-Mitteln die Seitenparameter (Strings) über export in einem Objekt zusammengefasst werden. Das Cookie wird dann mit der Methode SET_SERVER_COOKIE der Klasse CL_BSP_SERVER_SIDE_COOKIE abgelegt. Analog wird das Cookie mit GET_SERVER_COOKIE wieder geholt und über import zurückgegeben.
Seitenattribute
In diesem Beispiel geht es um einige interessante Seitenattribute, die persistiert werden sollen. Die Liste der Seitenattribute sieht folgendermaßen aus:
|
Attributname |
Auto |
Typisierungsart |
Bezugstyp |
Beschreibung |
|
LAST_STRING_ADDED |
type |
STRING |
letzter vom Benutzer hinzugefügter String |
|
|
NEXT_STRING |
x |
type |
STRING |
nächster String |
|
STRINGS |
type |
STRING_TABLE |
Tabelle von Strings |
Nicht alle Seitenattribute sollen persistiert werden, sondern nur die Strings, die vom Benutzer hinzugefügt wurden. Sie werden in einer Tabelle auf der Oberfläche ausgegeben. Daher sollen in dieser BSP-Applikation nur LAST_STRING_ADDED und STRINGS persistiert werden.
Eventhandler
In dieser BSP-Applikation sind die folgenden Eventhandler von Interesse:
Eventhandler, der immer beim einkommenden Request getriggert wird, um die persistenten Daten wiederherzustellen.
Letzter Eventhandler, bevor die Response gesendet wird. In diesem Eventhandler werden die neuen Werte der Seitenattribute in Form von Server-seitigen Cookies abgelegt.
Im Folgenden werden wir zuerst OnManipulation zeigen, um das Konzept für das Ablegen zu erläutern.
OnManipulation
In diesem Eventhandler werden die spezifischen Seitenattribute bzw. deren Werte in das Server-seitige Cookie geschrieben.
Die beiden Parameter werden auf dem Server aufbewahrt und dann in einem Objekt zusammengefasst. Mit dem ABAP-Sprachelement export werden die Benutzereingaben in die Seitendaten geschrieben.
Die Syntax von export lautet folgendermaßen:
export Objekt1 from F ... Objektn from F to data buffer F.
Ein Datencluster wird im Datenpuffer f abgelegt, der vom Typ XSTRING sein muss. Alle Seitenattribute, die hier interessieren, werden in einer Bytefolge variabler Länge ( XSTRING) geschrieben.
Für diese BSP verwenden wir den folgenden Code, um XSTRING zu erhalten:
data: PAGE_DATA type XSTRING.
data: NAME type STRING.
export LAST_STRING_ADDED from LAST_STRING_ADDED
STRINGS from STRINGS
to data buffer PAGE_DATA.
Als nächstes müssen wir XSTRING als Server-seitiges Cookie persistieren:
NAME = SY-UNAME.
call method CL_BSP_SERVER_SIDE_COOKIE=>SET_SERVER_COOKIE
exporting
NAME = 'my_page_data'
APPLICATION_NAME = RUNTIME->APPLICATION_NAME
APPLICATION_NAMESPACE = RUNTIME -> APPLICATION_NAMESPACE
USERNAME = NAME
SESSION_ID = 'same_for_all'
DATA_NAME = 'page_data'
DATA_VALUE = PAGE_DATA
EXPIRY_TIME_REL = 3600.
Die Bedeutung der dabei verwendeten Exportparameter ist wie folgt:
|
Parameter |
Bedeutung |
|
NAME |
frei wählbarer Name des Cookies |
|
APPLICATION_NAME APPLICATION_NAMESPACE USERNAME SESSION_ID |
Parameter, die auf das Cookie zeigen und es eindeutig identifizieren. Dies sind der Name der BSP-Anwendung, der Namensraum der BSP-Anwendung, der Benutzername und die Session-ID. |
|
DATA_NAME DATA_VALUE |
Name und Wert der Daten; diese Parameter müssen übereinstimmen. |
|
EXPIRY_TIME_REL |
Angabe der relativen Verfallszeit |
OnRequest
In diesem Eventhandler werden die internen Datenstrukturen des Requests wiederhergestellt. Hier werden die Seitenattribute von dem Server-seitigen Cookie wieder zurück persistiert. Dadurch gibt es viele Parallelen zum Eventhandler OnManipulation.
Das Server-seitige Cookie wird über den Aufruf der Methode GET_SERVER_COOKIE der Klasse CL_BSP_SERVER_SIDE_COOKIE geholt. Die Bedeutung der Parameter entspricht im Wesentlichen der Bedeutung der Parameter für den Eventhandler OnManipulation (s.o.), nur dass hier der Wert der Daten ( DATA_VALUE) ein changing-Parameter ist.
data: PAGE_DATA type XSTRING.
data: NAME type STRING.
* Die Benutzerverwaltung kann z.B. den ABAP-Systemnamen verwenden
NAME = SY-UNAME.
* Das Server-seitige Cookie wird geholt
call method CL_BSP_SERVER_SIDE_COOKIE=>GET_SERVER_COOKIE
exporting
NAME = 'my_page_data'
APPLICATION_NAME = RUNTIME->APPLICATION_NAME
APPLICATION_NAMESPACE = RUNTIME ->APPLICATION_NAMESPACE
USERNAME = NAME
SESSION_ID = 'same_for_all'
DATA_NAME = 'page_data'
CHANGING
DATA_VALUE = PAGE_DATA
.
Solange die Werte der Daten tatsächlich mit Werten belegt und somit nicht leer sind, werden nun die persistierten Seitenattribute vom Server-seitigen Cookie wiederhergestellt. Dies wird über das ABAP-Sprachelement import realisiert.
Die Syntax von import lautet folgendermaßen:
import Objekt1 = F ... Objektn = F from data buffer F.
Das Datenobjekt (oder mehrere Datenobjekte) wird aus dem angegebenen Datenpuffer F importiert, der vom Typ XSTRING sein muss. Alle Daten, die über export ... to data buffer (siehe oben) im Datenpuffer F abgelegt wurden und hier aufgelistet werden, werden eingelesen. Das Übereinstimmen der Struktur bei export und import wird geprüft.
In unserem Beispiel lautet der Aufruf für das Wiederherstellen der persistierten Cookies folgendermaßen:
if PAGE_DATA is not initial.
import LAST_STRING_ADDED = LAST_STRING_ADDED
STRINGS = STRINGS
from data buffer PAGE_DATA.
endif.
Im System finden Sie dieses Beispiel in der BSP-Applikation it00 (Paket SBSP_TEST) auf der Seite misc_page_persistence.htm.