From dcb4d94275388d611d3ae87b0b3e39e93e7557cb Mon Sep 17 00:00:00 2001 From: ThomasPloski <39330834+ThomasPloski@users.noreply.github.com> Date: Fri, 11 Oct 2019 14:41:01 +0200 Subject: [PATCH] Support of Baseinfo String for DDLS Object Handler (#2967) * support of baseinfo string in ddls * fixes abaplint findings * fixes abaplint issues --- src/objects/zcl_abapgit_object_ddls.clas.abap | 171 +++++++++++++----- 1 file changed, 126 insertions(+), 45 deletions(-) diff --git a/src/objects/zcl_abapgit_object_ddls.clas.abap b/src/objects/zcl_abapgit_object_ddls.clas.abap index a94e3eb63..bb3ca2e5b 100644 --- a/src/objects/zcl_abapgit_object_ddls.clas.abap +++ b/src/objects/zcl_abapgit_object_ddls.clas.abap @@ -10,6 +10,9 @@ CLASS zcl_abapgit_object_ddls DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje RAISING zcx_abapgit_exception. PRIVATE SECTION. + METHODS is_baseinfo_supported + RETURNING + VALUE(rv_supported) TYPE abap_bool . ENDCLASS. @@ -17,6 +20,22 @@ ENDCLASS. 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. DATA: lr_data TYPE REF TO data, @@ -143,34 +162,60 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. - DATA: lo_ddl TYPE REF TO object, - lr_data TYPE REF TO data, - lx_error TYPE REF TO cx_root. + DATA: + lo_ddl TYPE REF TO object, + lr_data TYPE REF TO data, + lr_data_baseinfo TYPE REF TO data, + lx_error TYPE REF TO cx_root. - FIELD-SYMBOLS: TYPE any, - TYPE any. - - - CREATE DATA lr_data TYPE ('DDDDLSRCV'). - ASSIGN lr_data->* TO . - - io_xml->read( EXPORTING iv_name = 'DDLS' - CHANGING cg_data = ). - - ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - = mo_files->read_string( 'asddls' ) ##no_text. - - CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - handler = lo_ddl. + FIELD-SYMBOLS: + TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE any, + TYPE any. TRY. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') - EXPORTING - name = ms_item-obj_name - put_state = 'N' - ddddlsrcv_wa = . + CREATE DATA lr_data TYPE ('DDDDLSRCV'). + ASSIGN lr_data->* TO . + + io_xml->read( EXPORTING iv_name = 'DDLS' + CHANGING cg_data = ). + + ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = 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 . + + ASSIGN COMPONENT 'BASEINFO_STRING' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = mo_files->read_string( 'baseinfo' ) ##no_text. + + ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = ms_item-obj_name. + + CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') + EXPORTING + name = ms_item-obj_name + put_state = 'N' + ddddlsrcv_wa = + baseinfo_string = . + ELSE. + CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') + EXPORTING + name = ms_item-obj_name + put_state = 'N' + ddddlsrcv_wa = . + ENDIF. CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~WRITE_TADIR') EXPORTING @@ -275,30 +320,66 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION. METHOD zif_abapgit_object~serialize. - DATA: lo_ddl TYPE REF TO object, - lr_data TYPE REF TO data, - lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY, - lx_error TYPE REF TO cx_root. + DATA: lo_ddl TYPE REF TO object, + lr_data TYPE REF TO data, + lr_data_baseinfo TYPE REF TO data, + lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY, + lx_error TYPE REF TO cx_root. - FIELD-SYMBOLS: TYPE any, - TYPE any, - LIKE LINE OF lt_clr_comps. + FIELD-SYMBOLS: TYPE any, + TYPE any, + LIKE LINE OF lt_clr_comps, + TYPE ANY TABLE, + TYPE any, + TYPE any, + TYPE any. - CREATE DATA lr_data TYPE ('DDDDLSRCV'). - ASSIGN lr_data->* TO . - - CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - handler = lo_ddl. - TRY. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ') - EXPORTING - name = ms_item-obj_name - get_state = 'A' - IMPORTING - ddddlsrcv_wa = . + CREATE DATA lr_data TYPE ('DDDDLSRCV'). + ASSIGN lr_data->* TO . + + 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_T_BASEINFO_STRING'). + ASSIGN lr_data_baseinfo->* TO . + ASSIGN lr_data_baseinfo->* TO . + + CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ') + EXPORTING + name = ms_item-obj_name + get_state = 'A' + IMPORTING + ddddlsrcv_wa = + baseinfo_string = . + + LOOP AT ASSIGNING . + ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + + ASSIGN COMPONENT 'AS4LOCAL' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + + IF = ms_item-obj_name AND = 'A'. + ASSIGN COMPONENT 'BASEINFO_STRING' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + mo_files->add_string( iv_ext = 'baseinfo' + iv_string = ) ##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 = . + ENDIF. + CATCH cx_root INTO lx_error. zcx_abapgit_exception=>raise( iv_text = lx_error->get_text( ) ix_previous = lx_error ).