SAP NetWeaver AS ABAP Release 740, ©Copyright 2014 SAP AG. All rights reserved.
ABAP Keyword Documentation → ABAP − Reference → Processing External Data → ABAP Database Accesses → Object Services → Persistence Service →Persistence Service
This example demonstrates creating a persistent object.
Source Code
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.
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS demo IMPLEMENTATION.
METHOD main.
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 ).
MESSAGE 'Connection created' TYPE 'I'.
CALL SELECTION-SCREEN 500 STARTING AT 10 10.
IF commit = 'X'.
COMMIT WORK.
ENDIF.
CATCH cx_root INTO exc.
text = exc->get_text( ).
MESSAGE text TYPE 'I'.
ENDTRY.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
demo=>main( ).
Description
A reference to the class actor of the pesistent 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 GET_PERSISTENT method, 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 occurs and is caught. In the corresponding CATCH block, an attempt is made using CREATE_PERSISTENT to generate the object. Note that the object is only generated for the database when the COMMIT WORK statement is used. Without an explicit COMMIT WORK, it exists only as an administrating object in the program and it will be deleted without affecting the database at the end of the program.