Support of Baseinfo String for DDLS Object Handler (#2967)

* support of baseinfo string in ddls

* fixes abaplint findings

* fixes abaplint issues
This commit is contained in:
ThomasPloski 2019-10-11 14:41:01 +02:00 committed by Lars Hvam
parent 714fe7202d
commit dcb4d94275

View File

@ -10,6 +10,9 @@ CLASS zcl_abapgit_object_ddls DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception.
PRIVATE SECTION. PRIVATE SECTION.
METHODS is_baseinfo_supported
RETURNING
VALUE(rv_supported) TYPE abap_bool .
ENDCLASS. ENDCLASS.
@ -17,6 +20,22 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION. CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
METHOD is_baseinfo_supported.
DATA:
lr_data_baseinfo TYPE REF TO data,
lx_error TYPE REF TO cx_root.
TRY.
CREATE DATA lr_data_baseinfo TYPE ('IF_DD_DDL_TYPES=>TY_S_BASEINFO_STRING_SAVE').
rv_supported = abap_true.
CATCH cx_root INTO lx_error.
rv_supported = abap_false.
ENDTRY.
ENDMETHOD.
METHOD open_adt_stob. METHOD open_adt_stob.
DATA: lr_data TYPE REF TO data, DATA: lr_data TYPE REF TO data,
@ -143,34 +162,60 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
METHOD zif_abapgit_object~deserialize. METHOD zif_abapgit_object~deserialize.
DATA: lo_ddl TYPE REF TO object, DATA:
lr_data TYPE REF TO data, lo_ddl TYPE REF TO object,
lx_error TYPE REF TO cx_root. lr_data TYPE REF TO data,
lr_data_baseinfo TYPE REF TO data,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <lg_data> TYPE any, FIELD-SYMBOLS:
<lg_field> TYPE any. <lg_data> TYPE any,
<lg_data_baseinfo> TYPE any,
<lg_source> TYPE any,
CREATE DATA lr_data TYPE ('DDDDLSRCV'). <lg_field_baseinfo> TYPE any,
ASSIGN lr_data->* TO <lg_data>. <lg_baseinfo_string> TYPE any,
<lg_baseinfo_ddlname> TYPE any.
io_xml->read( EXPORTING iv_name = 'DDLS'
CHANGING cg_data = <lg_data> ).
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
<lg_field> = mo_files->read_string( 'asddls' ) ##no_text.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = lo_ddl.
TRY. TRY.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') CREATE DATA lr_data TYPE ('DDDDLSRCV').
EXPORTING ASSIGN lr_data->* TO <lg_data>.
name = ms_item-obj_name
put_state = 'N' io_xml->read( EXPORTING iv_name = 'DDLS'
ddddlsrcv_wa = <lg_data>. CHANGING cg_data = <lg_data> ).
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_source>.
ASSERT sy-subrc = 0.
<lg_source> = mo_files->read_string( 'asddls' ) ##no_text.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = lo_ddl.
IF is_baseinfo_supported( ) = abap_true.
CREATE DATA lr_data_baseinfo TYPE ('IF_DD_DDL_TYPES=>TY_S_BASEINFO_STRING_SAVE').
ASSIGN lr_data_baseinfo->* TO <lg_data_baseinfo>.
ASSIGN COMPONENT 'BASEINFO_STRING' OF STRUCTURE <lg_data_baseinfo> TO <lg_baseinfo_string>.
ASSERT sy-subrc = 0.
<lg_baseinfo_string> = mo_files->read_string( 'baseinfo' ) ##no_text.
ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE <lg_data_baseinfo> TO <lg_baseinfo_ddlname>.
ASSERT sy-subrc = 0.
<lg_baseinfo_ddlname> = ms_item-obj_name.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE')
EXPORTING
name = ms_item-obj_name
put_state = 'N'
ddddlsrcv_wa = <lg_data>
baseinfo_string = <lg_data_baseinfo>.
ELSE.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE')
EXPORTING
name = ms_item-obj_name
put_state = 'N'
ddddlsrcv_wa = <lg_data>.
ENDIF.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~WRITE_TADIR') CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~WRITE_TADIR')
EXPORTING EXPORTING
@ -275,30 +320,66 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
METHOD zif_abapgit_object~serialize. METHOD zif_abapgit_object~serialize.
DATA: lo_ddl TYPE REF TO object, DATA: lo_ddl TYPE REF TO object,
lr_data TYPE REF TO data, lr_data TYPE REF TO data,
lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY, lr_data_baseinfo TYPE REF TO data,
lx_error TYPE REF TO cx_root. lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <lg_data> TYPE any, FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any, <lg_field> TYPE any,
<lv_comp> LIKE LINE OF lt_clr_comps. <lv_comp> LIKE LINE OF lt_clr_comps,
<lg_data_baseinfo> TYPE ANY TABLE,
<ls_data_baseinfo> TYPE any,
<lg_ddlname> TYPE any,
<lg_as4local> TYPE any.
CREATE DATA lr_data TYPE ('DDDDLSRCV').
ASSIGN lr_data->* TO <lg_data>.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = lo_ddl.
TRY. TRY.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ') CREATE DATA lr_data TYPE ('DDDDLSRCV').
EXPORTING ASSIGN lr_data->* TO <lg_data>.
name = ms_item-obj_name
get_state = 'A' CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
IMPORTING RECEIVING
ddddlsrcv_wa = <lg_data>. handler = lo_ddl.
IF is_baseinfo_supported( ) = abap_true.
CREATE DATA lr_data_baseinfo TYPE ('IF_DD_DDL_TYPES=>TY_T_BASEINFO_STRING').
ASSIGN lr_data_baseinfo->* TO <lg_data_baseinfo>.
ASSIGN lr_data_baseinfo->* TO <ls_data_baseinfo>.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ')
EXPORTING
name = ms_item-obj_name
get_state = 'A'
IMPORTING
ddddlsrcv_wa = <lg_data>
baseinfo_string = <lg_data_baseinfo>.
LOOP AT <lg_data_baseinfo> ASSIGNING <ls_data_baseinfo>.
ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE <ls_data_baseinfo> TO <lg_ddlname>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'AS4LOCAL' OF STRUCTURE <ls_data_baseinfo> TO <lg_as4local>.
ASSERT sy-subrc = 0.
IF <lg_ddlname> = ms_item-obj_name AND <lg_as4local> = 'A'.
ASSIGN COMPONENT 'BASEINFO_STRING' OF STRUCTURE <ls_data_baseinfo> TO <lg_field>.
ASSERT sy-subrc = 0.
mo_files->add_string( iv_ext = 'baseinfo'
iv_string = <lg_field> ) ##no_text.
EXIT.
ENDIF.
ENDLOOP.
ELSE.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ')
EXPORTING
name = ms_item-obj_name
get_state = 'A'
IMPORTING
ddddlsrcv_wa = <lg_data>.
ENDIF.
CATCH cx_root INTO lx_error. CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( ) zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( )
ix_previous = lx_error ). ix_previous = lx_error ).