report DEMO_CREATE_PERSISTENT.
selection-screen begin of
screen 400 title TEXT-400.
parameters DELETE as checkbox.
selection-screen end of screen 400.
selection-screen begin of
screen 500 title TEXT-500.
parameters COMMIT as checkbox.
selection-screen end of screen 500.
data WA_SPFLI type SPFLI.
data: CONNECTION type ref to
CL_SPFLI_PERSISTENT,
AGENT type
ref to CA_SPFLI_PERSISTENT.
data: EXC type ref to
CX_ROOT,
TEXT type STRING.
WA_SPFLI-CARRID
= 'LH'.
WA_SPFLI-CONNID = '123'.
WA_SPFLI-COUNTRYFR = 'DE'.
WA_SPFLI-CITYFROM = 'FRANKFURT'.
WA_SPFLI-AIRPFROM = 'FRA'.
WA_SPFLI-COUNTRYTO = 'SG'.
WA_SPFLI-CITYTO = 'SINGAPORE'.
WA_SPFLI-AIRPTO = 'SIN'.
WA_SPFLI-FLTIME = '740'.
WA_SPFLI-DEPTIME = '234500'.
WA_SPFLI-ARRTIME = '180000'.
WA_SPFLI-DISTANCE = '10000'.
WA_SPFLI-DISTID = 'KM'.
WA_SPFLI-FLTYPE = ' '.
WA_SPFLI-PERIOD = '1'.
AGENT = CA_SPFLI_PERSISTENT=>AGENT.
try.
CONNECTION = AGENT->GET_PERSISTENT( I_CARRID = WA_SPFLI-CARRID
I_CONNID
= WA_SPFLI-CONNID ).
message 'Connection already exists' type 'I'.
call selection-screen 400 starting at 10 10.
if DELETE = 'X'.
try.
AGENT->DELETE_PERSISTENT( I_CARRID = WA_SPFLI-CARRID
I_CONNID
= WA_SPFLI-CONNID ).
commit work.
catch CX_ROOT into EXC.
TEXT =
EXC->GET_TEXT( ).
message TEXT type
'I'.
endtry.
endif.
catch CX_ROOT into EXC.
TEXT = EXC->GET_TEXT( ).
message TEXT type 'I'.
try.
CONNECTION = AGENT->CREATE_PERSISTENT(
I_CARRID = WA_SPFLI-CARRID
I_CONNID = WA_SPFLI-CONNID
I_COUNTRYFR = WA_SPFLI-COUNTRYFR
I_CITYFROM = WA_SPFLI-CITYFROM
I_AIRPFROM = WA_SPFLI-AIRPFROM
I_COUNTRYTO = WA_SPFLI-COUNTRYTO
I_CITYTO = WA_SPFLI-CITYTO
I_AIRPTO = WA_SPFLI-AIRPTO
I_FLTIME = WA_SPFLI-FLTIME
I_DEPTIME = WA_SPFLI-DEPTIME
I_ARRTIME = WA_SPFLI-ARRTIME
I_DISTANCE = WA_SPFLI-DISTANCE
I_DISTID = WA_SPFLI-DISTID
I_FLTYPE = WA_SPFLI-FLTYPE
I_PERIOD =
WA_SPFLI-PERIOD ).
call selection-screen 500
starting at 10 10.
if COMMIT = 'X'.
commit work.
endif.
message 'Connection created'
type 'I'.
catch CX_ROOT into EXC.
TEXT = EXC->GET_TEXT(
).
message TEXT type 'I'.
endtry.
endtry.
Der Referenzvariablen AGENT wird eine Referenz auf den Klassenakteur der persistenten Klasse CL_SPFLI_PERSISTENT zugewiesen. Dieser wird vom statischen Konstruktor der Klasse CA_SPFLI_PERSISTENT einmalig erzeugt. Mit der Methode GET_PERSISTENT wird überprüft, ob es schon ein persistentes Objekt des gewünschten Schlüssels auf der Datenbank gibt. Falls es schon ein Objekt gibt, kann es mit DELETE_PERSISTENT gelöscht werden. Falls es noch kein Objekt gibt, wird die Ausnahme CX_OS_OBJECT_NOT_FOUND ausgelöst und abgefangen. Im entsprechenden CATCH-Block wird dann versucht mit CREATE_PERSISTENT das Objekt anzulegen. Beachten Sie, daß das Objekt erst durch die Anweisung COMMIT WORK auf der Datenbank angelegt wird. Ohne explizites COMMIT WORK besteht es nur als verwaltetes Objekt im Programm und wird bei Programmende ohne Einfluß auf die Datenbank gelöscht (siehe Transaktionsmodus).