From 267c210c5a571fb9f257dfb5748c77a61bd5ae82 Mon Sep 17 00:00:00 2001 From: Lennart Emmerich <45996424+leem53@users.noreply.github.com> Date: Fri, 25 Apr 2025 13:04:37 +0200 Subject: [PATCH 1/4] STVI: Fix unstable diff when shdtvsvciu or shdfvguicu are not initial (#7225) --- src/objects/zcl_abapgit_object_stvi.clas.abap | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/objects/zcl_abapgit_object_stvi.clas.abap b/src/objects/zcl_abapgit_object_stvi.clas.abap index dd174d6e1..73c0fca56 100644 --- a/src/objects/zcl_abapgit_object_stvi.clas.abap +++ b/src/objects/zcl_abapgit_object_stvi.clas.abap @@ -197,6 +197,9 @@ CLASS zcl_abapgit_object_stvi IMPLEMENTATION. zcx_abapgit_exception=>raise_t100( ). ENDIF. + SORT ls_transaction_variant-shdtvsvciu ASCENDING. + SORT ls_transaction_variant-shdfvguicu ASCENDING. + * Clear all user details CLEAR: ls_transaction_variant-shdtvciu-crdate, ls_transaction_variant-shdtvciu-cruser, From 5e087d33c73afdaddead50918663ec643ac7abc2 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Fri, 25 Apr 2025 13:25:56 +0200 Subject: [PATCH 2/4] Fix some class descriptions (#7223) Co-authored-by: Lars Hvam --- src/env/zcl_abapgit_env_factory.clas.xml | 2 +- src/env/zcl_abapgit_env_injector.clas.xml | 2 +- src/env/zif_abapgit_user_record.intf.xml | 2 +- src/test/zcl_abapgit_gui_page_template.clas.xml | 2 +- src/zcx_abapgit_type_not_supported.clas.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/env/zcl_abapgit_env_factory.clas.xml b/src/env/zcl_abapgit_env_factory.clas.xml index b0ec0972c..89cdb36ed 100644 --- a/src/env/zcl_abapgit_env_factory.clas.xml +++ b/src/env/zcl_abapgit_env_factory.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_ENV_FACTORY E - ZCL_ABAPGIT_ENV_FACTORY + abapGit - Environment Factory 1 X X diff --git a/src/env/zcl_abapgit_env_injector.clas.xml b/src/env/zcl_abapgit_env_injector.clas.xml index e65678311..13910b06b 100644 --- a/src/env/zcl_abapgit_env_injector.clas.xml +++ b/src/env/zcl_abapgit_env_injector.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_ENV_INJECTOR E - ZCL_ABAPGIT_ENV_INJECTOR + abapGit - Environment Injector 1 X X diff --git a/src/env/zif_abapgit_user_record.intf.xml b/src/env/zif_abapgit_user_record.intf.xml index 5bb2af8cc..f5df28508 100644 --- a/src/env/zif_abapgit_user_record.intf.xml +++ b/src/env/zif_abapgit_user_record.intf.xml @@ -5,7 +5,7 @@ ZIF_ABAPGIT_USER_RECORD E - ZIF_ABAPGIT_USER_RECORD + abapGit - User Record 2 1 X diff --git a/src/test/zcl_abapgit_gui_page_template.clas.xml b/src/test/zcl_abapgit_gui_page_template.clas.xml index 9c72c093e..a207ea527 100644 --- a/src/test/zcl_abapgit_gui_page_template.clas.xml +++ b/src/test/zcl_abapgit_gui_page_template.clas.xml @@ -5,7 +5,7 @@ ZCL_ABAPGIT_GUI_PAGE_TEMPLATE E - abapGit GUI page template (for copy/paste) + abapGit - GUI Page Template (for copy/paste) 1 X X diff --git a/src/zcx_abapgit_type_not_supported.clas.xml b/src/zcx_abapgit_type_not_supported.clas.xml index 9b26fb0fd..08f665a16 100644 --- a/src/zcx_abapgit_type_not_supported.clas.xml +++ b/src/zcx_abapgit_type_not_supported.clas.xml @@ -5,7 +5,7 @@ ZCX_ABAPGIT_TYPE_NOT_SUPPORTED E - Object type not supported + abapGit - Object Type Not Supported 40 1 X From 402ec37b3bc2adc722b359f59ea0413250d5b243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Fri, 25 Apr 2025 13:29:18 +0200 Subject: [PATCH 3/4] refactor DDLS + DDLX + DCLS (#7224) Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com> --- src/objects/zcl_abapgit_object_dcls.clas.abap | 166 ++++---- src/objects/zcl_abapgit_object_ddls.clas.abap | 213 +++++----- src/objects/zcl_abapgit_object_ddlx.clas.abap | 380 +++++++----------- 3 files changed, 313 insertions(+), 446 deletions(-) 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. From 781313ad7c29c849aa3610d1157b9d5173ff4676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Mon, 28 Apr 2025 11:07:14 +0200 Subject: [PATCH 4/4] SAXX: implement is_locked + refactorings (#7226) --- src/objects/zcl_abapgit_object_samc.clas.abap | 10 ++ src/objects/zcl_abapgit_object_sapc.clas.abap | 10 ++ .../zcl_abapgit_object_saxx_super.clas.abap | 117 +++++++++--------- 3 files changed, 80 insertions(+), 57 deletions(-) diff --git a/src/objects/zcl_abapgit_object_samc.clas.abap b/src/objects/zcl_abapgit_object_samc.clas.abap index a1455bc8b..660442fbe 100644 --- a/src/objects/zcl_abapgit_object_samc.clas.abap +++ b/src/objects/zcl_abapgit_object_samc.clas.abap @@ -21,6 +21,8 @@ CLASS zcl_abapgit_object_samc DEFINITION REDEFINITION . METHODS get_persistence_class_name REDEFINITION . + METHODS get_lock_object + REDEFINITION . PRIVATE SECTION. ENDCLASS. @@ -60,4 +62,12 @@ CLASS zcl_abapgit_object_samc IMPLEMENTATION. rv_persistence_class_name = 'CL_AMC_APPLICATION_OBJ_PERS'. ENDMETHOD. + + + METHOD get_lock_object. + + rv_lock_object = 'E_AMC_APPL'. + + ENDMETHOD. + ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_sapc.clas.abap b/src/objects/zcl_abapgit_object_sapc.clas.abap index c3673c766..5d93b75eb 100644 --- a/src/objects/zcl_abapgit_object_sapc.clas.abap +++ b/src/objects/zcl_abapgit_object_sapc.clas.abap @@ -21,6 +21,8 @@ CLASS zcl_abapgit_object_sapc DEFINITION REDEFINITION . METHODS get_persistence_class_name REDEFINITION . + METHODS get_lock_object + REDEFINITION . PRIVATE SECTION. ENDCLASS. @@ -60,4 +62,12 @@ CLASS zcl_abapgit_object_sapc IMPLEMENTATION. rv_persistence_class_name = 'CL_APC_APPLICATION_OBJ_PERS'. ENDMETHOD. + + + METHOD get_lock_object. + + rv_lock_object = 'E_APC_APPL'. + + ENDMETHOD. + ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_saxx_super.clas.abap b/src/objects/zcl_abapgit_object_saxx_super.clas.abap index d015562db..2f71c1156 100644 --- a/src/objects/zcl_abapgit_object_saxx_super.clas.abap +++ b/src/objects/zcl_abapgit_object_saxx_super.clas.abap @@ -8,21 +8,27 @@ CLASS zcl_abapgit_object_saxx_super DEFINITION PUBLIC SECTION. INTERFACES zif_abapgit_object . + METHODS constructor + IMPORTING + is_item TYPE zif_abapgit_definitions=>ty_item + iv_language TYPE spras + io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL + io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL. PROTECTED SECTION. - METHODS get_persistence_class_name - ABSTRACT + METHODS get_persistence_class_name ABSTRACT RETURNING VALUE(rv_persistence_class_name) TYPE seoclsname . - METHODS get_data_class_name - ABSTRACT + METHODS get_data_class_name ABSTRACT RETURNING VALUE(rv_data_class_name) TYPE seoclsname . - METHODS get_data_structure_name - ABSTRACT + METHODS get_data_structure_name ABSTRACT RETURNING VALUE(rv_data_structure_name) TYPE string . + METHODS get_lock_object ABSTRACT + RETURNING + VALUE(rv_lock_object) TYPE string. METHODS create_channel_objects RAISING zcx_abapgit_type_not_supported . @@ -34,6 +40,7 @@ CLASS zcl_abapgit_object_saxx_super DEFINITION DATA mv_data_structure_name TYPE string . DATA mv_appl_obj_cls_name TYPE seoclsname . DATA mv_persistence_cls_name TYPE seoclsname . + DATA mv_object_key TYPE seu_objkey . METHODS get_data EXPORTING @@ -47,26 +54,34 @@ CLASS zcl_abapgit_object_saxx_super DEFINITION RAISING zcx_abapgit_exception . METHODS get_names . + ENDCLASS. CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. + METHOD constructor. + + super->constructor( + is_item = is_item + iv_language = iv_language + io_files = io_files + io_i18n_params = io_i18n_params ). + + mv_object_key = ms_item-obj_name. + + ENDMETHOD. + METHOD create_channel_objects. get_names( ). TRY. - IF mi_appl_obj_data IS NOT BOUND. - CREATE OBJECT mi_appl_obj_data TYPE (mv_appl_obj_cls_name). - ENDIF. + CREATE OBJECT mi_appl_obj_data TYPE (mv_appl_obj_cls_name). + CREATE OBJECT mi_persistence TYPE (mv_persistence_cls_name). - IF mi_persistence IS NOT BOUND. - CREATE OBJECT mi_persistence TYPE (mv_persistence_cls_name). - ENDIF. - - CATCH cx_root. + CATCH cx_sy_create_object_error. RAISE EXCEPTION TYPE zcx_abapgit_type_not_supported EXPORTING obj_type = ms_item-obj_type. ENDTRY. @@ -75,20 +90,17 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. METHOD get_data. - 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->get( EXPORTING - p_object_key = lv_object_key + p_object_key = mv_object_key p_version = 'A' CHANGING p_object_data = mi_appl_obj_data ). - CATCH cx_root INTO lx_error. + CATCH cx_swb_exception INTO lx_error. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. @@ -116,18 +128,16 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. METHOD lock. - DATA: lv_objname TYPE trobj_name, - lv_object_key TYPE seu_objkey, - lv_objtype TYPE trobjtype. + DATA: lv_objname TYPE trobj_name, + lv_objtype TYPE trobjtype. - lv_objname = ms_item-obj_name. - lv_object_key = ms_item-obj_name. - lv_objtype = ms_item-obj_type. + lv_objname = ms_item-obj_name. + lv_objtype = ms_item-obj_type. mi_persistence->lock( EXPORTING p_objname_tr = lv_objname - p_object_key = lv_object_key + p_object_key = mv_object_key p_objtype_tr = lv_objtype EXCEPTIONS foreign_lock = 1 @@ -143,16 +153,14 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. METHOD unlock. - DATA: lv_objname TYPE trobj_name, - lv_object_key TYPE seu_objkey, - lv_objtype TYPE trobjtype. + DATA: lv_objname TYPE trobj_name, + lv_objtype TYPE trobjtype. - lv_objname = ms_item-obj_name. - lv_object_key = ms_item-obj_name. - lv_objtype = ms_item-obj_type. + lv_objname = ms_item-obj_name. + lv_objtype = ms_item-obj_type. mi_persistence->unlock( p_objname_tr = lv_objname - p_object_key = lv_object_key + p_object_key = mv_object_key p_objtype_tr = lv_objtype ). ENDMETHOD. @@ -163,7 +171,6 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. DATA: lr_data TYPE REF TO data. FIELD-SYMBOLS: TYPE any, - TYPE any, TYPE any. CREATE DATA lr_data TYPE (mv_data_structure_name). @@ -171,9 +178,7 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. get_data( IMPORTING eg_data = ). - ASSIGN COMPONENT 'HEADER' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE TO . + ASSIGN COMPONENT 'HEADER-CHANGED_BY' OF STRUCTURE TO . ASSERT sy-subrc = 0. IF IS NOT INITIAL. @@ -187,15 +192,9 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. METHOD zif_abapgit_object~delete. - DATA: lv_object_key TYPE seu_objkey. - - lv_object_key = ms_item-obj_name. - TRY. lock( ). - - mi_persistence->delete( lv_object_key ). - + mi_persistence->delete( mv_object_key ). unlock( ). CATCH cx_swb_exception. @@ -229,13 +228,9 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. TRY. lock( ). - corr_insert( iv_package ). - mi_appl_obj_data->set_data( ). - mi_persistence->save( mi_appl_obj_data ). - unlock( ). CATCH cx_swb_exception. @@ -247,16 +242,12 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. METHOD zif_abapgit_object~exists. - DATA: lv_object_key TYPE seu_objkey. - - lv_object_key = ms_item-obj_name. - TRY. - mi_persistence->get( p_object_key = lv_object_key + mi_persistence->get( p_object_key = mv_object_key p_version = 'A' p_existence_check_only = abap_true ). - CATCH cx_swb_object_does_not_exist cx_swb_exception. + CATCH cx_swb_exception. rv_bool = abap_false. RETURN. ENDTRY. @@ -293,7 +284,18 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. METHOD zif_abapgit_object~is_locked. - rv_is_locked = abap_false. + DATA: lv_argument TYPE seqg3-garg, + lv_lock_object TYPE string. + + lv_lock_object = get_lock_object( ). + + lv_argument = mv_object_key. + OVERLAY lv_argument WITH ' '. + lv_argument = lv_argument && '*'. + + rv_is_locked = exists_a_lock_entry_for( + iv_lock_object = lv_lock_object + iv_argument = lv_argument ). ENDMETHOD. @@ -315,7 +317,7 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. METHOD zif_abapgit_object~serialize. - DATA: lr_data TYPE REF TO data. + DATA: lr_data TYPE REF TO data. FIELD-SYMBOLS: TYPE any, TYPE any, @@ -365,4 +367,5 @@ CLASS zcl_abapgit_object_saxx_super IMPLEMENTATION. ig_data = ). ENDMETHOD. + ENDCLASS.