ABAP Keyword Documentation → ABAP − Reference → Processing External Data → ABAP Database Access → Object Services → Persistence Service
Persistence Service
This example demonstrates how a persistent object is created.
Other versions: 7.31 | 7.40 | 7.54
Source Code
DATA(wa_spfli) = VALUE spfli(
carrid = 'LH'
connid = '123'
countryfr = 'DE'
cityfrom = 'FRANKFURT'
airpfrom = 'FRA'
countryto = 'SG'
cityto = 'SINGAPORE'
airpto = 'SIN'
fltime = '740'
deptime = '234500'
arrtime = '180000'
distance = '10000'
distid = 'KM'
fltype = ' '
period = '1' ).
DATA(agent) = ca_spfli_persistent=>agent.
TRY.
DATA(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 DATA(exc).
MESSAGE exc->get_text( ) TYPE 'I'.
ENDTRY.
ENDIF.
CATCH cx_root INTO exc.
MESSAGE exc->get_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 ).
MESSAGE 'Connection created' TYPE 'I'.
CALL SELECTION-SCREEN 500 STARTING AT 10 10.
IF commit = 'X'.
COMMIT WORK.
ENDIF.
CATCH cx_root INTO exc.
MESSAGE exc->get_text( ) TYPE 'I'.
ENDTRY.
ENDTRY.
Description
A reference to the class agent of the persistent class CL_SPFLI_PERSISTENT is assigned to the reference
variable agent
. It is created once by the static constructor of the CA_SPFLI_PERSISTENT
class. Using the method GET_PERSISTENT, a check is made to establish whether there is already a persistent
object with the required key in the database. If an object already exists, it can be deleted using DELETE_PERSISTENT.
If no object exists, the exception CX_OS_OBJECT_NOT_FOUND is raised and caught. In the corresponding
CATCH
block, an attempt is made to create the object using CREATE_PERSISTENT.
Note that the object is only created on the database when the statement COMMIT WORK
is used. Without an explicit COMMIT WORK
, it exists only as an administered object in the program and it is deleted without affecting the database at the end of the program.