Introduce common base class for SAPC/SAMC

Introduce common base class lcl_objects_channel_super for SAPC / SAMC
This commit is contained in:
Christian Guenter 2017-07-24 20:48:52 +00:00
parent ea1345d5e8
commit b621fbaa36
3 changed files with 386 additions and 619 deletions

View File

@ -2,41 +2,16 @@
*& Include ZABAPGIT_OBJECT_SAMC
*&---------------------------------------------------------------------*
CLASS lcl_object_samc DEFINITION INHERITING FROM lcl_objects_super FINAL.
CLASS lcl_object_samc DEFINITION INHERITING FROM lcl_objects_channel_super FINAL.
PUBLIC SECTION.
INTERFACES lif_object.
PRIVATE SECTION.
DATA: mo_persistence TYPE REF TO if_wb_object_persist,
mo_amc_appl_obj_data TYPE REF TO if_wb_object_data_model.
METHODS: lif_object~exists REDEFINITION.
PROTECTED SECTION.
METHODS:
get_data_object
RETURNING
value(ro_amc_appl_obj_data) TYPE REF TO if_wb_object_data_model
RAISING
lcx_exception,
get_persistence
RETURNING
value(ro_persistence) TYPE REF TO if_wb_object_persist
RAISING
lcx_exception,
get_data
EXPORTING
p_data TYPE any
RAISING
lcx_exception,
lock
RAISING
lcx_exception,
unlock
RAISING
lcx_exception.
get_persistence_cls_name REDEFINITION,
get_appl_obj_cls_name REDEFINITION,
get_data_structure_name REDEFINITION.
ENDCLASS. "lcl_object_samc DEFINITION
@ -47,43 +22,6 @@ ENDCLASS. "lcl_object_samc DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_object_samc IMPLEMENTATION.
METHOD lif_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "lif_object~has_changed_since
METHOD lif_object~changed_by.
DATA: lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any,
<ls_header> TYPE any,
<changed_by> TYPE any.
TRY.
CREATE DATA lr_data TYPE ('AMC_APPLICATION_COMPLETE').
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( 'SAMC not supported' ).
ENDTRY.
get_data(
IMPORTING
p_data = <ls_data> ).
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <changed_by>.
ASSERT sy-subrc = 0.
rv_user = <changed_by>.
ENDMETHOD. "lif_object~changed_by
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD. "lif_object~get_metadata.
METHOD lif_object~exists.
DATA: ls_tadir TYPE tadir.
@ -95,276 +33,26 @@ CLASS lcl_object_samc IMPLEMENTATION.
RETURN.
ENDIF.
TRY.
get_data_object( ).
CATCH lcx_exception.
RETURN.
ENDTRY.
rv_bool = abap_true.
ENDMETHOD. "lif_object~exists
METHOD lif_object~serialize.
METHOD get_appl_obj_cls_name.
DATA: lr_data TYPE REF TO data.
r_data_class_name = 'CL_AMC_APPLICATION_OBJ_DATA'.
FIELD-SYMBOLS: <ls_data> TYPE any,
<ls_header> TYPE any,
<field> TYPE any.
ENDMETHOD.
TRY.
CREATE DATA lr_data TYPE ('AMC_APPLICATION_COMPLETE').
ASSIGN lr_data->* TO <ls_data>.
METHOD get_data_structure_name.
CATCH cx_root.
lcx_exception=>raise( 'SAMC not supported' ).
ENDTRY.
r_data_structure_name = 'AMC_APPLICATION_COMPLETE'.
get_data(
IMPORTING
p_data = <ls_data> ).
ENDMETHOD.
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
ASSERT sy-subrc = 0.
METHOD get_persistence_cls_name.
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
io_xml->add( iv_name = 'SAMC'
ig_data = <ls_data> ).
ENDMETHOD. "serialize
METHOD lif_object~deserialize.
DATA: li_appl_obj_data TYPE REF TO if_wb_object_data_model,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any.
TRY.
CREATE DATA lr_data TYPE ('AMC_APPLICATION_COMPLETE').
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( 'SAMC not supported' ).
ENDTRY.
io_xml->read(
EXPORTING
iv_name = 'SAMC'
CHANGING
cg_data = <ls_data> ).
IF lif_object~exists( ) = abap_true.
lif_object~delete( ).
ENDIF.
li_appl_obj_data = get_data_object( ).
TRY.
lock( ).
CALL FUNCTION 'RS_CORR_INSERT'
EXPORTING
object = ms_item-obj_name
object_class = 'SAMC'
mode = 'I'
global_lock = abap_true
devclass = iv_package
master_language = mv_language
EXCEPTIONS
cancelled = 1
permission_failure = 2
unknown_objectclass = 3
OTHERS = 4.
IF sy-subrc <> 0.
lcx_exception=>raise( 'Error occured while creating SAMC' ).
ENDIF.
li_appl_obj_data->set_data( <ls_data> ).
get_persistence( )->save( p_object_data = li_appl_obj_data ).
unlock( ).
CATCH cx_swb_exception.
lcx_exception=>raise( 'Error occured while creating SAMC' ).
ENDTRY.
ENDMETHOD. "deserialize
METHOD lif_object~delete.
DATA: object_key TYPE seu_objkey.
object_key = ms_item-obj_name.
TRY.
lock( ).
get_persistence( )->delete( p_object_key = object_key ).
unlock( ).
CATCH cx_swb_exception.
lcx_exception=>raise( 'Error occured while deleting SAMC' ).
ENDTRY.
ENDMETHOD. "delete
METHOD lif_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = ms_item-obj_type.
ENDMETHOD. "jump
METHOD lif_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
ENDMETHOD. "lif_object~compare_to_remote_version
METHOD get_data_object.
IF mo_amc_appl_obj_data IS NOT BOUND.
TRY.
CREATE OBJECT mo_amc_appl_obj_data TYPE ('CL_AMC_APPLICATION_OBJ_DATA').
CATCH cx_root.
lcx_exception=>raise( 'SAMC not supported' ).
ENDTRY.
ENDIF.
ro_amc_appl_obj_data = mo_amc_appl_obj_data.
ENDMETHOD. "get_data_object
METHOD get_persistence.
IF mo_persistence IS NOT BOUND.
TRY.
CREATE OBJECT mo_persistence TYPE ('CL_AMC_APPLICATION_OBJ_PERS').
CATCH cx_root.
lcx_exception=>raise( 'SAMC not supported' ).
ENDTRY.
ENDIF.
ro_persistence = mo_persistence.
ENDMETHOD. "get_persistence
METHOD lock.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
get_persistence( ).
mo_persistence->lock(
EXPORTING
p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype
EXCEPTIONS
foreign_lock = 1
error_occurred = 2
OTHERS = 3 ).
IF sy-subrc <> 0.
lcx_exception=>raise( `Error occured while locking SAMC ` && objname ).
ENDIF.
ENDMETHOD. "lock
METHOD unlock.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
get_persistence( )->unlock( p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype ).
ENDMETHOD. "unlock
METHOD get_data.
DATA: object_key TYPE seu_objkey.
object_key = ms_item-obj_name.
TRY.
get_persistence( ).
mo_persistence->get(
EXPORTING
p_object_key = object_key
p_version = 'A'
CHANGING
p_object_data = mo_amc_appl_obj_data ).
CATCH cx_root.
lcx_exception=>raise( 'SAMC error' ).
ENDTRY.
mo_amc_appl_obj_data->get_data(
IMPORTING
p_data = p_data ).
ENDMETHOD. "get_data
r_persistence_class_name = 'CL_AMC_APPLICATION_OBJ_PERS'.
ENDMETHOD.
ENDCLASS. "lcl_object_samc IMPLEMENTATION

View File

@ -2,34 +2,16 @@
*& Include ZABAPGIT_OBJECT_SAPC
*&---------------------------------------------------------------------*
CLASS lcl_object_sapc DEFINITION INHERITING FROM lcl_objects_super FINAL.
CLASS lcl_object_sapc DEFINITION INHERITING FROM lcl_objects_channel_super FINAL.
PUBLIC SECTION.
INTERFACES lif_object.
PRIVATE SECTION.
DATA: mo_persistence TYPE REF TO if_wb_object_persist,
mo_apc_appl_obj_data TYPE REF TO if_wb_object_data_model.
METHODS: lif_object~exists REDEFINITION.
PROTECTED SECTION.
METHODS:
create_apc_objects
RAISING
lcx_exception,
get_data
EXPORTING
p_data TYPE any
RAISING
lcx_exception,
lock
RAISING
lcx_exception,
unlock
RAISING
lcx_exception.
get_persistence_cls_name REDEFINITION,
get_appl_obj_cls_name REDEFINITION,
get_data_structure_name REDEFINITION.
ENDCLASS. "lcl_object_sAPC DEFINITION
@ -40,45 +22,6 @@ ENDCLASS. "lcl_object_sAPC DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_object_sapc IMPLEMENTATION.
METHOD lif_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "lif_object~has_changed_since
METHOD lif_object~changed_by.
DATA: lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any,
<ls_header> TYPE any,
<changed_by> TYPE any.
create_apc_objects( ).
TRY.
CREATE DATA lr_data TYPE ('APC_APPLICATION_COMPLETE').
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( 'SAPC not supported' ).
ENDTRY.
get_data(
IMPORTING
p_data = <ls_data> ).
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <changed_by>.
ASSERT sy-subrc = 0.
rv_user = <changed_by>.
ENDMETHOD. "lif_object~changed_by
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD. "lif_object~get_metadata.
METHOD lif_object~exists.
DATA: ls_tadir TYPE tadir.
@ -94,243 +37,22 @@ CLASS lcl_object_sapc IMPLEMENTATION.
ENDMETHOD. "lif_object~exists
METHOD lif_object~serialize.
METHOD get_appl_obj_cls_name.
DATA: lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any,
<ls_header> TYPE any,
<field> TYPE any.
create_apc_objects( ).
TRY.
CREATE DATA lr_data TYPE ('APC_APPLICATION_COMPLETE').
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( 'SAPC not supported' ).
ENDTRY.
get_data(
IMPORTING
p_data = <ls_data> ).
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
io_xml->add( iv_name = 'SAPC'
ig_data = <ls_data> ).
ENDMETHOD. "serialize
METHOD lif_object~deserialize.
DATA: lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any.
create_apc_objects( ).
TRY.
CREATE DATA lr_data TYPE ('APC_APPLICATION_COMPLETE').
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( 'SAPC not supported' ).
ENDTRY.
io_xml->read(
EXPORTING
iv_name = 'SAPC'
CHANGING
cg_data = <ls_data> ).
IF lif_object~exists( ) = abap_true.
lif_object~delete( ).
ENDIF.
TRY.
lock( ).
CALL FUNCTION 'RS_CORR_INSERT'
EXPORTING
object = ms_item-obj_name
object_class = 'SAPC'
mode = 'I'
global_lock = abap_true
devclass = iv_package
master_language = mv_language
EXCEPTIONS
cancelled = 1
permission_failure = 2
unknown_objectclass = 3
OTHERS = 4.
IF sy-subrc <> 0.
lcx_exception=>raise( 'Error occured while creating SAPC' ).
ENDIF.
mo_apc_appl_obj_data->set_data( <ls_data> ).
mo_persistence->save( p_object_data = mo_apc_appl_obj_data ).
unlock( ).
CATCH cx_swb_exception.
lcx_exception=>raise( 'Error occured while creating SAPC' ).
ENDTRY.
ENDMETHOD. "deserialize
METHOD lif_object~delete.
DATA: object_key TYPE seu_objkey.
create_apc_objects( ).
object_key = ms_item-obj_name.
TRY.
lock( ).
mo_persistence->delete( p_object_key = object_key ).
unlock( ).
CATCH cx_swb_exception.
lcx_exception=>raise( 'Error occured while deleting SAPC' ).
ENDTRY.
ENDMETHOD. "delete
METHOD lif_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = ms_item-obj_type.
ENDMETHOD. "jump
METHOD lif_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
ENDMETHOD. "lif_object~compare_to_remote_version
METHOD create_apc_objects.
TRY.
IF mo_apc_appl_obj_data IS NOT BOUND.
CREATE OBJECT mo_apc_appl_obj_data TYPE ('CL_APC_APPLICATION_OBJ_DATA').
ENDIF.
IF mo_persistence IS NOT BOUND.
CREATE OBJECT mo_persistence TYPE ('CL_APC_APPLICATION_OBJ_PERS').
ENDIF.
CATCH cx_root.
lcx_exception=>raise( 'SAPC not supported' ).
ENDTRY.
r_data_class_name = 'CL_APC_APPLICATION_OBJ_DATA'.
ENDMETHOD.
METHOD lock.
METHOD get_data_structure_name.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
r_data_structure_name = 'APC_APPLICATION_COMPLETE'.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
ENDMETHOD.
mo_persistence->lock(
EXPORTING
p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype
EXCEPTIONS
foreign_lock = 1
error_occurred = 2
OTHERS = 3 ).
METHOD get_persistence_cls_name.
IF sy-subrc <> 0.
lcx_exception=>raise( `Error occured while locking SAPC ` && objname ).
ENDIF.
r_persistence_class_name = 'CL_APC_APPLICATION_OBJ_PERS'.
ENDMETHOD. "lock
METHOD unlock.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
mo_persistence->unlock( p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype ).
ENDMETHOD. "unlock
METHOD get_data.
DATA: object_key TYPE seu_objkey.
object_key = ms_item-obj_name.
TRY.
mo_persistence->get(
EXPORTING
p_object_key = object_key
p_version = 'A'
CHANGING
p_object_data = mo_apc_appl_obj_data ).
CATCH cx_root.
lcx_exception=>raise( 'SAPC error' ).
ENDTRY.
mo_apc_appl_obj_data->get_data(
IMPORTING
p_data = p_data ).
ENDMETHOD. "get_data
ENDMETHOD.
ENDCLASS. "lcl_object_sAPC IMPLEMENTATION

View File

@ -1852,6 +1852,363 @@ CLASS lcl_objects_super IMPLEMENTATION.
ENDCLASS. "lcl_objects_super IMPLEMENTATION
CLASS lcl_objects_channel_super DEFINITION ABSTRACT
INHERITING FROM lcl_objects_super .
PUBLIC SECTION.
INTERFACES:
lif_object
ABSTRACT METHODS exists.
PROTECTED SECTION.
METHODS:
get_persistence_cls_name ABSTRACT
RETURNING
VALUE(r_persistence_class_name) TYPE seoclsname,
get_appl_obj_cls_name ABSTRACT
RETURNING
VALUE(r_data_class_name) TYPE seoclsname,
get_data_structure_name ABSTRACT
RETURNING
VALUE(r_data_structure_name) TYPE string.
PRIVATE SECTION.
DATA: mo_persistence TYPE REF TO if_wb_object_persist,
mo_appl_obj_data TYPE REF TO if_wb_object_data_model.
METHODS:
create_channel_objects
RAISING
lcx_exception,
get_data
EXPORTING
p_data TYPE any
RAISING
lcx_exception,
lock
RAISING
lcx_exception,
unlock
RAISING
lcx_exception.
ENDCLASS.
CLASS lcl_objects_channel_super IMPLEMENTATION.
METHOD lif_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD lif_object~changed_by.
DATA: lr_data TYPE REF TO data,
data_structure_name TYPE string.
FIELD-SYMBOLS: <ls_data> TYPE any,
<ls_header> TYPE any,
<changed_by> TYPE any.
create_channel_objects( ).
TRY.
data_structure_name = get_data_structure_name( ).
CREATE DATA lr_data TYPE (data_structure_name).
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( |{ ms_item-obj_name } not supported| ).
ENDTRY.
get_data(
IMPORTING
p_data = <ls_data> ).
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <changed_by>.
ASSERT sy-subrc = 0.
rv_user = <changed_by>.
ENDMETHOD.
METHOD lif_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
* METHOD lif_object~exists.
*
* DATA: ls_tadir TYPE tadir.
*
* ls_tadir = lcl_tadir=>read_single(
* iv_object = ms_item-obj_type
* iv_obj_name = ms_item-obj_name ).
* IF ls_tadir IS INITIAL.
* RETURN.
* ENDIF.
*
* rv_bool = abap_true.
*
* ENDMETHOD.
METHOD lif_object~serialize.
DATA: lr_data TYPE REF TO data,
data_structure_name TYPE string.
FIELD-SYMBOLS: <ls_data> TYPE any,
<ls_header> TYPE any,
<field> TYPE any.
create_channel_objects( ).
TRY.
data_structure_name = get_data_structure_name( ).
CREATE DATA lr_data TYPE (data_structure_name).
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
get_data(
IMPORTING
p_data = <ls_data> ).
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
io_xml->add( iv_name = ms_item-obj_type
ig_data = <ls_data> ).
ENDMETHOD.
METHOD lif_object~deserialize.
DATA: lr_data TYPE REF TO data,
data_structure_name TYPE string.
FIELD-SYMBOLS: <ls_data> TYPE any.
create_channel_objects( ).
TRY.
data_structure_name = get_data_structure_name( ).
CREATE DATA lr_data TYPE (data_structure_name).
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
io_xml->read(
EXPORTING
iv_name = ms_item-obj_type
CHANGING
cg_data = <ls_data> ).
IF lif_object~exists( ) = abap_true.
lif_object~delete( ).
ENDIF.
TRY.
lock( ).
CALL FUNCTION 'RS_CORR_INSERT'
EXPORTING
object = ms_item-obj_name
object_class = ms_item-obj_type
mode = 'I'
global_lock = abap_true
devclass = iv_package
master_language = mv_language
EXCEPTIONS
cancelled = 1
permission_failure = 2
unknown_objectclass = 3
OTHERS = 4.
IF sy-subrc <> 0.
lcx_exception=>raise( |Error occured while creating { ms_item-obj_type }| ).
ENDIF.
mo_appl_obj_data->set_data( <ls_data> ).
mo_persistence->save( p_object_data = mo_appl_obj_data ).
unlock( ).
CATCH cx_swb_exception.
lcx_exception=>raise( |Error occured while creating { ms_item-obj_type }| ).
ENDTRY.
ENDMETHOD.
METHOD lif_object~delete.
DATA: object_key TYPE seu_objkey.
create_channel_objects( ).
object_key = ms_item-obj_name.
TRY.
lock( ).
mo_persistence->delete( p_object_key = object_key ).
unlock( ).
CATCH cx_swb_exception.
lcx_exception=>raise( |Error occured while deleting { ms_item-obj_type }| ).
ENDTRY.
ENDMETHOD.
METHOD lif_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = ms_item-obj_type.
ENDMETHOD.
METHOD lif_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
ENDMETHOD.
METHOD create_channel_objects.
DATA: appl_obj_cls_name TYPE seoclsname,
persistence_cls_name TYPE seoclsname.
TRY.
IF mo_appl_obj_data IS NOT BOUND.
appl_obj_cls_name = get_appl_obj_cls_name( ).
CREATE OBJECT mo_appl_obj_data TYPE (appl_obj_cls_name).
ENDIF.
IF mo_persistence IS NOT BOUND.
persistence_cls_name = get_persistence_cls_name( ).
CREATE OBJECT mo_persistence TYPE (persistence_cls_name).
ENDIF.
CATCH cx_root.
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
ENDMETHOD.
METHOD get_data.
DATA: object_key TYPE seu_objkey.
object_key = ms_item-obj_name.
TRY.
mo_persistence->get(
EXPORTING
p_object_key = object_key
p_version = 'A'
CHANGING
p_object_data = mo_appl_obj_data ).
CATCH cx_root.
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
mo_appl_obj_data->get_data(
IMPORTING
p_data = p_data ).
ENDMETHOD.
METHOD lock.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
mo_persistence->lock(
EXPORTING
p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype
EXCEPTIONS
foreign_lock = 1
error_occurred = 2
OTHERS = 3 ).
IF sy-subrc <> 0.
lcx_exception=>raise( |Error occured while locking { ms_item-obj_type } | && objname ).
ENDIF.
ENDMETHOD. "lock
METHOD unlock.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
mo_persistence->unlock( p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype ).
ENDMETHOD. "unlock
ENDCLASS.
*----------------------------------------------------------------------*
* CLASS lcl_object DEFINITION
*----------------------------------------------------------------------*