diff --git a/src/objects/zcl_abapgit_object_dcls.clas.abap b/src/objects/zcl_abapgit_object_dcls.clas.abap index 830e5a4c9..92ba30494 100644 --- a/src/objects/zcl_abapgit_object_dcls.clas.abap +++ b/src/objects/zcl_abapgit_object_dcls.clas.abap @@ -12,6 +12,12 @@ CLASS zcl_abapgit_object_dcls DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje zcx_abapgit_type_not_supported. PROTECTED SECTION. PRIVATE SECTION. + DATA: mo_dcl_handler TYPE REF TO object. " CL_ACM_DCL_HANDLER + METHODS clear_fields + CHANGING + !cg_data TYPE any + RAISING + zcx_abapgit_exception . ENDCLASS. @@ -20,8 +26,6 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. METHOD constructor. - DATA: lo_dcl TYPE REF TO object. - super->constructor( is_item = is_item iv_language = iv_language @@ -31,9 +35,9 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. TRY. CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE') RECEIVING - ro_handler = lo_dcl. + ro_handler = mo_dcl_handler. - CATCH cx_sy_ref_creation. + CATCH cx_root. RAISE EXCEPTION TYPE zcx_abapgit_type_not_supported EXPORTING obj_type = is_item-obj_type. ENDTRY. @@ -42,7 +46,6 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. METHOD zif_abapgit_object~changed_by. DATA: lr_data TYPE REF TO data, - lo_dcl TYPE REF TO object, lx_error TYPE REF TO cx_root. FIELD-SYMBOLS: TYPE any, @@ -52,39 +55,31 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. ASSIGN lr_data->* TO . TRY. - CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - ro_handler = lo_dcl. - - CALL METHOD lo_dcl->('READ') + CALL METHOD mo_dcl_handler->('READ') EXPORTING iv_dclname = ms_item-obj_name IMPORTING es_dclsrc = . - - ASSIGN COMPONENT 'AS4USER' OF STRUCTURE TO . - IF sy-subrc = 0. - rv_user = . - ELSE. - rv_user = c_user_unknown. - ENDIF. CATCH cx_root INTO lx_error. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. + + ASSIGN COMPONENT 'AS4USER' OF STRUCTURE TO . + IF sy-subrc = 0. + rv_user = . + ELSE. + rv_user = c_user_unknown. + ENDIF. + ENDMETHOD. METHOD zif_abapgit_object~delete. - DATA: lo_dcl TYPE REF TO object, - lx_error TYPE REF TO cx_root. + DATA: lx_error TYPE REF TO cx_root. TRY. - CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - ro_handler = lo_dcl. - - CALL METHOD lo_dcl->('DELETE') + CALL METHOD mo_dcl_handler->('DELETE') EXPORTING iv_dclname = ms_item-obj_name. @@ -100,7 +95,6 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. DATA: lr_data TYPE REF TO data, - lo_dcl TYPE REF TO object, lx_error TYPE REF TO cx_root, lv_abap_language_version TYPE uccheck. @@ -127,15 +121,11 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. set_abap_language_version( CHANGING cv_abap_language_version = lv_abap_language_version ). ENDIF. + tadir_insert( iv_package ). + TRY. - tadir_insert( iv_package ). - - CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - ro_handler = lo_dcl. - TRY. - CALL METHOD lo_dcl->('SAVE') + CALL METHOD mo_dcl_handler->('SAVE') EXPORTING iv_dclname = ms_item-obj_name iv_put_state = 'I' @@ -144,7 +134,7 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. iv_access_mode = 'INSERT' iv_abap_language_version = lv_abap_language_version. CATCH cx_sy_dyn_call_param_not_found. - CALL METHOD lo_dcl->('SAVE') + CALL METHOD mo_dcl_handler->('SAVE') EXPORTING iv_dclname = ms_item-obj_name iv_put_state = 'I' @@ -164,23 +154,11 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. METHOD zif_abapgit_object~exists. - DATA: lo_dcl TYPE REF TO object, - lx_error TYPE REF TO cx_root. - - TRY. - CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - ro_handler = lo_dcl. - - CALL METHOD lo_dcl->('CHECK_EXISTENCE') - EXPORTING - iv_objectname = ms_item-obj_name - RECEIVING - rv_exists = rv_bool. - - CATCH cx_root INTO lx_error. - zcx_abapgit_exception=>raise_with_text( lx_error ). - ENDTRY. + CALL METHOD mo_dcl_handler->('CHECK_EXISTENCE') + EXPORTING + iv_objectname = ms_item-obj_name + RECEIVING + rv_exists = rv_bool. ENDMETHOD. @@ -236,7 +214,6 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. METHOD zif_abapgit_object~serialize. DATA: lr_data TYPE REF TO data, - lo_dcl TYPE REF TO object, lx_error TYPE REF TO cx_root. FIELD-SYMBOLS: TYPE any, @@ -247,60 +224,55 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION. ASSIGN lr_data->* TO . TRY. - CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - ro_handler = lo_dcl. - - CALL METHOD lo_dcl->('READ') + CALL METHOD mo_dcl_handler->('READ') EXPORTING iv_dclname = ms_item-obj_name IMPORTING es_dclsrc = . - ASSIGN COMPONENT 'AS4USER' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - CLEAR . - - ASSIGN COMPONENT 'AS4DATE' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - CLEAR . - - ASSIGN COMPONENT 'AS4TIME' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - CLEAR . - - ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - CLEAR . - - ASSIGN COMPONENT 'CREATED_DATE' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - CLEAR . - - ASSIGN COMPONENT 'AS4LOCAL' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - CLEAR . - - ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . - IF sy-subrc = 0. - clear_abap_language_version( CHANGING cv_abap_language_version = ). - ENDIF. - - ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - - mo_files->add_string( - iv_ext = 'asdcls' - iv_string = ). - - CLEAR . - - io_xml->add( iv_name = 'DCLS' - ig_data = ). - CATCH cx_root INTO lx_error. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. + clear_fields( CHANGING cg_data = ). + + ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + + mo_files->add_string( + iv_ext = 'asdcls' + iv_string = ). + + CLEAR . + + io_xml->add( iv_name = 'DCLS' + ig_data = ). + ENDMETHOD. + + + METHOD clear_fields. + + DATA: + BEGIN OF ls_fields_to_clear, + as4user TYPE c, + as4date TYPE d, + as4time TYPE t, + created_by TYPE c, + created_date TYPE d, + as4local TYPE c, + END OF ls_fields_to_clear. + + FIELD-SYMBOLS: + TYPE any. + + MOVE-CORRESPONDING ls_fields_to_clear TO cg_data. + + ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE cg_data TO . + IF sy-subrc = 0. + clear_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + + ENDMETHOD. + ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_ddls.clas.abap b/src/objects/zcl_abapgit_object_ddls.clas.abap index 618c7d602..622a7b6ba 100644 --- a/src/objects/zcl_abapgit_object_ddls.clas.abap +++ b/src/objects/zcl_abapgit_object_ddls.clas.abap @@ -20,6 +20,7 @@ CLASS zcl_abapgit_object_ddls DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje zcx_abapgit_exception. PRIVATE SECTION. + DATA mo_ddl_handler TYPE REF TO object. " CL_DD_DDL_HANDLER METHODS is_baseinfo_supported RETURNING VALUE(rv_supported) TYPE abap_bool . @@ -29,6 +30,12 @@ CLASS zcl_abapgit_object_ddls DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje METHODS format_source_before_serialize CHANGING cv_string TYPE string. + METHODS clear_fields + CHANGING + !cg_data TYPE any + RAISING + zcx_abapgit_exception . + ENDCLASS. @@ -38,8 +45,6 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. METHOD constructor. - DATA lo_ddl TYPE REF TO object. - super->constructor( is_item = is_item iv_language = iv_language @@ -49,7 +54,8 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. TRY. CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') RECEIVING - handler = lo_ddl. + handler = mo_ddl_handler. + CATCH cx_root. RAISE EXCEPTION TYPE zcx_abapgit_type_not_supported EXPORTING obj_type = is_item-obj_type. ENDTRY. @@ -93,13 +99,12 @@ 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. + lr_data_baseinfo TYPE REF TO data. 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. + CATCH cx_root. rv_supported = abap_false. ENDTRY. @@ -108,9 +113,7 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. METHOD open_adt_stob. - DATA: lr_data TYPE REF TO data, - lo_ddl TYPE REF TO object, - lx_error TYPE REF TO cx_root. + DATA: lr_data TYPE REF TO data. FIELD-SYMBOLS: TYPE STANDARD TABLE. FIELD-SYMBOLS: TYPE STANDARD TABLE. @@ -120,46 +123,37 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. FIELD-SYMBOLS: TYPE any. - TRY. - CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_DDOBJ'). - ASSIGN lr_data->* TO . + CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_DDOBJ'). + ASSIGN lr_data->* TO . - CREATE DATA lr_data LIKE LINE OF . - ASSIGN lr_data->* TO . + CREATE DATA lr_data LIKE LINE OF . + ASSIGN lr_data->* TO . - CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_ENTITY_OF_VIEW'). - ASSIGN lr_data->* TO . + CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_ENTITY_OF_VIEW'). + ASSIGN lr_data->* TO . - CREATE DATA lr_data LIKE LINE OF . - ASSIGN lr_data->* TO . + CREATE DATA lr_data LIKE LINE OF . + ASSIGN lr_data->* TO . - CLEAR . - ASSIGN COMPONENT 'NAME' OF STRUCTURE TO . - = iv_ddls_name. - INSERT INTO TABLE . + CLEAR . + ASSIGN COMPONENT 'NAME' OF STRUCTURE TO . + = iv_ddls_name. + INSERT INTO TABLE . - CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - handler = lo_ddl. + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~GET_VIEWNAME_FROM_ENTITYNAME') + EXPORTING + ddnames = + IMPORTING + view_of_entity = . - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~GET_VIEWNAME_FROM_ENTITYNAME') - EXPORTING - ddnames = - IMPORTING - view_of_entity = . + READ TABLE ASSIGNING INDEX 1. + IF sy-subrc = 0. + ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE TO . - READ TABLE ASSIGNING INDEX 1. - IF sy-subrc = 0. - ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE TO . + zcl_abapgit_adt_link=>jump( iv_obj_name = + iv_obj_type = 'DDLS' ). - zcl_abapgit_adt_link=>jump( iv_obj_name = - iv_obj_type = 'DDLS' ). - - ENDIF. - - CATCH cx_root INTO lx_error. - zcx_abapgit_exception=>raise_with_text( lx_error ). - ENDTRY. + ENDIF. ENDMETHOD. @@ -180,23 +174,17 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. METHOD zif_abapgit_object~changed_by. - DATA: lo_ddl TYPE REF TO object, - lr_data TYPE REF TO data, + DATA: lr_data 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 . TRY. - CREATE DATA lr_data TYPE ('DDDDLSRCV'). - ASSIGN lr_data->* TO . - - CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - handler = lo_ddl. - - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ') + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~READ') EXPORTING name = ms_item-obj_name get_state = 'A' @@ -270,7 +258,6 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. 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. @@ -283,10 +270,10 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. TYPE any, TYPE any. - TRY. - CREATE DATA lr_data TYPE ('DDDDLSRCV'). - ASSIGN lr_data->* TO . + CREATE DATA lr_data TYPE ('DDDDLSRCV'). + ASSIGN lr_data->* TO . + TRY. io_xml->read( EXPORTING iv_name = 'DDLS' CHANGING cg_data = ). @@ -299,10 +286,6 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. set_abap_language_version( CHANGING cv_abap_language_version = ). ENDIF. - 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 . @@ -317,7 +300,7 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. = ms_item-obj_name. TRY. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~SAVE') EXPORTING name = ms_item-obj_name put_state = 'N' @@ -325,7 +308,7 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. baseinfo_string = save_language_version = abap_true. CATCH cx_sy_dyn_call_param_not_found. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~SAVE') EXPORTING name = ms_item-obj_name put_state = 'N' @@ -333,14 +316,14 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. baseinfo_string = . ENDTRY. ELSE. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE') + CALL METHOD mo_ddl_handler->('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') + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~WRITE_TADIR') EXPORTING objectname = ms_item-obj_name devclass = iv_package @@ -349,16 +332,14 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. corr_insert( iv_package ). CATCH cx_root INTO lx_error. - IF lo_ddl IS NOT INITIAL. - " Attempt clean-up but catch error if it doesn't work - TRY. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~DELETE') - EXPORTING - name = ms_item-obj_name - prid = 0. - CATCH cx_root ##NO_HANDLER. - ENDTRY. - ENDIF. + " Attempt clean-up but catch error if it doesn't work + TRY. + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~DELETE') + EXPORTING + name = ms_item-obj_name + prid = 0. + CATCH cx_root ##NO_HANDLER. + ENDTRY. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. @@ -370,15 +351,10 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. METHOD zif_abapgit_object~exists. - DATA: lv_state TYPE objstate, - lo_ddl TYPE REF TO object. + DATA: lv_state TYPE objstate. TRY. - CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') - RECEIVING - handler = lo_ddl. - - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ') + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~READ') EXPORTING name = ms_item-obj_name IMPORTING @@ -457,36 +433,28 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. METHOD zif_abapgit_object~serialize. - DATA: lo_ddl TYPE REF TO object, - lr_data TYPE REF TO data, + DATA: 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, - TYPE ANY TABLE, - TYPE any, - TYPE any, - TYPE any, - TYPE any. + FIELD-SYMBOLS: TYPE any, + TYPE any, + TYPE ANY TABLE, + TYPE any, + TYPE any, + TYPE any. + CREATE DATA lr_data TYPE ('DDDDLSRCV'). + ASSIGN lr_data->* TO . + TRY. - 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') + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~READ') EXPORTING name = ms_item-obj_name get_state = 'A' @@ -511,7 +479,7 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. ENDIF. ENDLOOP. ELSE. - CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ') + CALL METHOD mo_ddl_handler->('IF_DD_DDL_HANDLER~READ') EXPORTING name = ms_item-obj_name get_state = 'A' @@ -523,24 +491,7 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. - ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . - IF sy-subrc = 0. - clear_abap_language_version( CHANGING cv_abap_language_version = ). - ENDIF. - - APPEND 'AS4USER' TO lt_clr_comps. - APPEND 'AS4DATE' TO lt_clr_comps. - APPEND 'AS4TIME' TO lt_clr_comps. - APPEND 'ACTFLAG' TO lt_clr_comps. - APPEND 'CHGFLAG' TO lt_clr_comps. - APPEND 'ABAP_LANGU_VERSION' TO lt_clr_comps. - - LOOP AT lt_clr_comps ASSIGNING . - ASSIGN COMPONENT OF STRUCTURE TO . - IF sy-subrc = 0. - CLEAR . - ENDIF. - ENDLOOP. + clear_fields( CHANGING cg_data = ). ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . ASSERT sy-subrc = 0. @@ -557,4 +508,30 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. ig_data = ). ENDMETHOD. + + + METHOD clear_fields. + + DATA: + BEGIN OF ls_fields_to_clear, + as4user TYPE c, + as4date TYPE d, + as4time TYPE t, + actflag TYPE c, + chgflag TYPE c, + abap_langu_version TYPE c, + END OF ls_fields_to_clear. + + FIELD-SYMBOLS: + TYPE any. + + MOVE-CORRESPONDING ls_fields_to_clear TO cg_data. + + ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE cg_data TO . + IF sy-subrc = 0. + clear_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + + ENDMETHOD. + ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_ddlx.clas.abap b/src/objects/zcl_abapgit_object_ddlx.clas.abap index 392093782..b344b0343 100644 --- a/src/objects/zcl_abapgit_object_ddlx.clas.abap +++ b/src/objects/zcl_abapgit_object_ddlx.clas.abap @@ -12,20 +12,15 @@ CLASS zcl_abapgit_object_ddlx DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje zcx_abapgit_type_not_supported. PROTECTED SECTION. PRIVATE SECTION. - DATA mi_persistence TYPE REF TO if_wb_object_persist . - METHODS get_persistence - RETURNING - VALUE(ri_persistence) TYPE REF TO if_wb_object_persist - RAISING - zcx_abapgit_exception . + DATA mi_persistence TYPE REF TO if_wb_object_persist. + DATA mi_data_model TYPE REF TO if_wb_object_data_model. + DATA mv_object_key TYPE seu_objkey. METHODS clear_fields CHANGING - !cg_data TYPE any . - METHODS clear_field - IMPORTING - !iv_fieldname TYPE csequence - CHANGING - !cg_metadata TYPE any . + !cg_data TYPE any + RAISING + zcx_abapgit_exception . + ENDCLASS. @@ -40,131 +35,47 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. io_files = io_files io_i18n_params = io_i18n_params ). + mv_object_key = ms_item-obj_name. + TRY. - get_persistence( ). - CATCH zcx_abapgit_exception. + CREATE OBJECT mi_persistence + TYPE ('CL_DDLX_ADT_OBJECT_PERSIST'). + + CREATE OBJECT mi_data_model + TYPE ('CL_DDLX_WB_OBJECT_DATA'). + + CATCH cx_sy_create_object_error. RAISE EXCEPTION TYPE zcx_abapgit_type_not_supported EXPORTING obj_type = is_item-obj_type. ENDTRY. ENDMETHOD. - METHOD clear_field. - - FIELD-SYMBOLS: TYPE data. - - ASSIGN COMPONENT iv_fieldname - OF STRUCTURE cg_metadata - TO . - IF sy-subrc = 0. - CLEAR: . - ENDIF. - - ENDMETHOD. - - - METHOD clear_fields. - - FIELD-SYMBOLS: TYPE any. - - ASSIGN COMPONENT 'METADATA' - OF STRUCTURE cg_data - TO . - ASSERT sy-subrc = 0. - - clear_field( EXPORTING iv_fieldname = 'CHANGED_AT' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'CHANGED_BY' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'CREATED_AT' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'CREATED_BY' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'RESPONSIBLE' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'PACKAGE_REF-NAME' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'CONTAINER_REF-PACKAGE_NAME' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'VERSION' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'RESPONSIBLE' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'MASTER_SYSTEM' - CHANGING cg_metadata = ). - - clear_field( EXPORTING iv_fieldname = 'ABAP_LANGUAGE_VERSION' - CHANGING cg_metadata = ). - - ENDMETHOD. - - - METHOD get_persistence. - - DATA: lx_error TYPE REF TO cx_root. - - TRY. - IF mi_persistence IS NOT BOUND. - - CREATE OBJECT mi_persistence - TYPE ('CL_DDLX_ADT_OBJECT_PERSIST'). - - ENDIF. - - CATCH cx_root INTO lx_error. - zcx_abapgit_exception=>raise_with_text( lx_error ). - ENDTRY. - - ri_persistence = mi_persistence. - - ENDMETHOD. - - METHOD zif_abapgit_object~changed_by. - DATA: - lv_object_key TYPE seu_objkey, - li_data_model TYPE REF TO if_wb_object_data_model, - li_persistence TYPE REF TO if_wb_object_persist, - lr_data TYPE REF TO data. + DATA: lr_data TYPE REF TO data. FIELD-SYMBOLS: TYPE any, TYPE data. - lv_object_key = ms_item-obj_name. + CREATE DATA lr_data + TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). + ASSIGN lr_data->* TO . TRY. - CREATE DATA lr_data - TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). - ASSIGN lr_data->* TO . - - CREATE OBJECT li_data_model - TYPE ('CL_DDLX_WB_OBJECT_DATA'). - - li_persistence = get_persistence( ). - - li_persistence->get( + mi_persistence->get( EXPORTING - p_object_key = lv_object_key + p_object_key = mv_object_key p_version = swbm_version_active CHANGING - p_object_data = li_data_model ). - CATCH cx_root. + p_object_data = mi_data_model ). + CATCH cx_swb_exception. rv_user = c_user_unknown. RETURN. ENDTRY. - li_data_model->get_data( IMPORTING p_data = ). + mi_data_model->get_data( IMPORTING p_data = ). ASSIGN COMPONENT 'METADATA-CHANGED_BY' OF STRUCTURE TO . ASSERT sy-subrc = 0. @@ -175,18 +86,13 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. METHOD zif_abapgit_object~delete. - DATA: lv_object_key TYPE seu_objkey, - lx_error TYPE REF TO cx_root. - - - lv_object_key = ms_item-obj_name. + DATA: lx_error TYPE REF TO cx_swb_exception. TRY. + mi_persistence->delete( p_object_key = mv_object_key + p_version = swbm_version_active ). - get_persistence( )->delete( p_object_key = lv_object_key - p_version = swbm_version_active ). - - CATCH cx_root INTO lx_error. + CATCH cx_swb_exception INTO lx_error. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. @@ -197,9 +103,8 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. - DATA: li_data_model TYPE REF TO if_wb_object_data_model, - lr_data TYPE REF TO data, - lx_error TYPE REF TO cx_root. + DATA: lr_data TYPE REF TO data, + lx_error TYPE REF TO cx_swb_exception. FIELD-SYMBOLS: TYPE any, TYPE data, @@ -209,67 +114,63 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. TYPE xsddatetime_z, TYPE data. + CREATE DATA lr_data + TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). + ASSIGN lr_data->* TO . + + io_xml->read( + EXPORTING + iv_name = 'DDLX' + CHANGING + cg_data = ). + + ASSIGN COMPONENT 'METADATA-ABAP_LANGU_VERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + set_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + + ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + TRY. - CREATE DATA lr_data - TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). - ASSIGN lr_data->* TO . + " If the file doesn't exist that's ok, because previously + " the source code was stored in the xml. We are downward compatible. + = mo_files->read_string( 'asddlxs' ). + CATCH zcx_abapgit_exception ##NO_HANDLER. + ENDTRY. - io_xml->read( - EXPORTING - iv_name = 'DDLX' - CHANGING - cg_data = ). + ASSIGN COMPONENT 'METADATA-VERSION' OF STRUCTURE TO . + ASSERT sy-subrc = 0. - ASSIGN COMPONENT 'METADATA-ABAP_LANGU_VERSION' OF STRUCTURE TO . - IF sy-subrc = 0. - set_abap_language_version( CHANGING cv_abap_language_version = ). - ENDIF. + " We have to always save as inactive. Standard activation below activates then + " and also creates transport request entry if necessary + = 'inactive'. - ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE TO . - ASSERT sy-subrc = 0. + "package needed to be able to determine ABAP language version + ASSIGN COMPONENT 'METADATA-PACKAGE_REF-NAME' OF STRUCTURE TO . + IF IS ASSIGNED. + = iv_package. + ENDIF. - TRY. - " If the file doesn't exist that's ok, because previously - " the source code was stored in the xml. We are downward compatible. - = mo_files->read_string( 'asddlxs' ). - CATCH zcx_abapgit_exception ##NO_HANDLER. - ENDTRY. + ASSIGN COMPONENT 'METADATA-CHANGED_BY' OF STRUCTURE TO . + IF IS ASSIGNED. + = sy-uname. + ENDIF. + ASSIGN COMPONENT 'METADATA-CHANGED_AT' OF STRUCTURE TO . + IF IS ASSIGNED. + GET TIME STAMP FIELD . + ENDIF. - CREATE OBJECT li_data_model - TYPE ('CL_DDLX_WB_OBJECT_DATA'). + mi_data_model->set_data( ). - ASSIGN COMPONENT 'METADATA-VERSION' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - - " We have to always save as inactive. Standard activation below activates then - " and also creates transport request entry if necessary - = 'inactive'. - - "package needed to be able to determine ABAP language version - ASSIGN COMPONENT 'METADATA-PACKAGE_REF-NAME' OF STRUCTURE TO . - IF IS ASSIGNED. - = iv_package. - ENDIF. - - ASSIGN COMPONENT 'METADATA-CHANGED_BY' OF STRUCTURE TO . - IF IS ASSIGNED. - = sy-uname. - ENDIF. - ASSIGN COMPONENT 'METADATA-CHANGED_AT' OF STRUCTURE TO . - IF IS ASSIGNED. - GET TIME STAMP FIELD . - ENDIF. - - li_data_model->set_data( ). - - get_persistence( )->save( li_data_model ). - - tadir_insert( iv_package ). - - CATCH cx_root INTO lx_error. + TRY. + mi_persistence->save( mi_data_model ). + CATCH cx_swb_exception INTO lx_error. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. + tadir_insert( iv_package ). + zcl_abapgit_objects_activation=>add_item( ms_item ). ENDMETHOD. @@ -277,16 +178,12 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. METHOD zif_abapgit_object~exists. - DATA: lv_object_key TYPE seu_objkey. - - lv_object_key = ms_item-obj_name. - rv_bool = abap_true. TRY. - get_persistence( )->get( p_object_key = lv_object_key - p_version = swbm_version_active - p_existence_check_only = abap_true ). + mi_persistence->get( p_object_key = mv_object_key + p_version = swbm_version_active + p_existence_check_only = abap_true ). CATCH cx_swb_exception. rv_bool = abap_false. @@ -345,78 +242,99 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION. METHOD zif_abapgit_object~serialize. - DATA: lv_object_key TYPE seu_objkey, - li_data_model TYPE REF TO if_wb_object_data_model, - li_persistence TYPE REF TO if_wb_object_persist, - lr_data TYPE REF TO data, - lx_error TYPE REF TO cx_root. + DATA: lr_data TYPE REF TO data, + lx_error TYPE REF TO cx_swb_exception. FIELD-SYMBOLS: TYPE any, TYPE data. - lv_object_key = ms_item-obj_name. + + CREATE DATA lr_data + TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). + ASSIGN lr_data->* TO . TRY. - CREATE DATA lr_data - TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA'). - ASSIGN lr_data->* TO . - - CREATE OBJECT li_data_model - TYPE ('CL_DDLX_WB_OBJECT_DATA'). - - li_persistence = get_persistence( ). - IF zcl_abapgit_factory=>get_environment( )->compare_with_inactive( ) = abap_true. "Retrieve inactive version - li_persistence->get( + mi_persistence->get( EXPORTING - p_object_key = lv_object_key + p_object_key = mv_object_key p_version = swbm_version_inactive CHANGING - p_object_data = li_data_model ). - IF li_data_model->get_object_name( ) IS INITIAL. + p_object_data = mi_data_model ). + IF mi_data_model->get_object_name( ) IS INITIAL. "Fallback: retrieve active version - li_persistence->get( + mi_persistence->get( EXPORTING - p_object_key = lv_object_key + p_object_key = mv_object_key p_version = swbm_version_active CHANGING - p_object_data = li_data_model ). + p_object_data = mi_data_model ). ENDIF. ELSE. "Retrieve active version - li_persistence->get( + mi_persistence->get( EXPORTING - p_object_key = lv_object_key + p_object_key = mv_object_key p_version = swbm_version_active CHANGING - p_object_data = li_data_model ). + p_object_data = mi_data_model ). ENDIF. - li_data_model->get_data( IMPORTING p_data = ). - - ASSIGN COMPONENT 'METADATA-ABAP_LANGU_VERSION' OF STRUCTURE TO . - IF sy-subrc = 0. - clear_abap_language_version( CHANGING cv_abap_language_version = ). - ENDIF. - - clear_fields( CHANGING cg_data = ). - - ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - - mo_files->add_string( - iv_ext = 'asddlxs' - iv_string = ). - - CLEAR . - - io_xml->add( iv_name = 'DDLX' - ig_data = ). - - CATCH cx_root INTO lx_error. + CATCH cx_swb_exception INTO lx_error. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. + mi_data_model->get_data( IMPORTING p_data = ). + + clear_fields( CHANGING cg_data = ). + + ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + + mo_files->add_string( + iv_ext = 'asddlxs' + iv_string = ). + + CLEAR . + + io_xml->add( iv_name = 'DDLX' + ig_data = ). + ENDMETHOD. + + + METHOD clear_fields. + + DATA: + BEGIN OF ls_fields_to_clear, + BEGIN OF metadata, + changed_at TYPE d, + changed_by TYPE c, + created_at TYPE d, + created_by TYPE c, + responsible TYPE c, + BEGIN OF package_ref, + name TYPE c, + END OF package_ref, + BEGIN OF container_ref, + name TYPE c, + END OF container_ref, + version TYPE c, + master_system TYPE c, + END OF metadata, + END OF ls_fields_to_clear. + + FIELD-SYMBOLS: + TYPE any. + + MOVE-CORRESPONDING ls_fields_to_clear TO cg_data. + + ASSIGN COMPONENT 'METADATA-ABAP_LANGUAGE_VERSION' OF STRUCTURE cg_data TO . + IF sy-subrc = 0. + clear_abap_language_version( CHANGING cv_abap_language_version = ). + ENDIF. + + ENDMETHOD. + ENDCLASS.