diff --git a/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap b/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap index b5b099665..dbd329525 100644 --- a/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap +++ b/src/objects/tabl/zcl_abapgit_object_tabl.clas.abap @@ -12,13 +12,15 @@ CLASS zcl_abapgit_object_tabl DEFINITION "! get additional data like table authorization group "! @parameter iv_tabname | name of the table METHODS read_extras IMPORTING iv_tabname TYPE ddobjname - RETURNING VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras. + RETURNING VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras + RAISING zcx_abapgit_exception. "! Update additional data "! @parameter iv_tabname | name of the table "! @parameter is_tabl_extras | additional table data METHODS update_extras IMPORTING iv_tabname TYPE ddobjname - is_tabl_extras TYPE zif_abapgit_object_tabl=>ty_tabl_extras. + is_tabl_extras TYPE zif_abapgit_object_tabl=>ty_tabl_extras + RAISING zcx_abapgit_exception. "! Delete additional data "! @parameter iv_tabname | name of the table @@ -478,6 +480,8 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION. SELECT SINGLE * FROM tddat INTO rs_tabl_extras-tddat WHERE tabname = iv_tabname. + rs_tabl_extras-abap_language_version = get_abap_language_version( ). + ENDMETHOD. @@ -596,12 +600,24 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION. METHOD update_extras. + DATA lv_abap_language_version TYPE uccheck. + IF is_tabl_extras-tddat IS INITIAL. delete_extras( iv_tabname ). ELSE. MODIFY tddat FROM is_tabl_extras-tddat. ENDIF. + " Fields that are not part of dd02v + TRY. + lv_abap_language_version = is_tabl_extras-abap_language_version. + + set_abap_language_version( CHANGING cv_abap_language_version = lv_abap_language_version ). + + UPDATE ('DD02L') SET abap_language_version = lv_abap_language_version WHERE tabname = iv_tabname. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + ENDMETHOD. diff --git a/src/objects/tabl/zif_abapgit_object_tabl.intf.abap b/src/objects/tabl/zif_abapgit_object_tabl.intf.abap index 7b0824811..e47646f56 100644 --- a/src/objects/tabl/zif_abapgit_object_tabl.intf.abap +++ b/src/objects/tabl/zif_abapgit_object_tabl.intf.abap @@ -22,7 +22,8 @@ INTERFACE zif_abapgit_object_tabl PUBLIC. TYPES: ty_segment_definitions TYPE STANDARD TABLE OF ty_segment_definition WITH DEFAULT KEY. TYPES: BEGIN OF ty_tabl_extras, - tddat TYPE tddat, + tddat TYPE tddat, + abap_language_version TYPE uccheck, END OF ty_tabl_extras. TYPES: BEGIN OF ty_internal, diff --git a/src/objects/zcl_abapgit_object_ddls.clas.abap b/src/objects/zcl_abapgit_object_ddls.clas.abap index 063a003a4..58340a3fe 100644 --- a/src/objects/zcl_abapgit_object_ddls.clas.abap +++ b/src/objects/zcl_abapgit_object_ddls.clas.abap @@ -525,7 +525,7 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION. ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . IF sy-subrc = 0. - clear_abap_language_version( CHANGING cv_abap_language_version = ). + = get_abap_language_version( ). ENDIF. APPEND 'AS4USER' TO lt_clr_comps. diff --git a/src/objects/zcl_abapgit_object_doma.clas.abap b/src/objects/zcl_abapgit_object_doma.clas.abap index 79e6860a2..c7a35a3d8 100644 --- a/src/objects/zcl_abapgit_object_doma.clas.abap +++ b/src/objects/zcl_abapgit_object_doma.clas.abap @@ -25,6 +25,12 @@ CLASS zcl_abapgit_object_doma DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje TYPES: ty_dd07_texts TYPE STANDARD TABLE OF ty_dd07_text . + " Fields that are not part of dd01v + TYPES: + BEGIN OF ty_extra, + abap_language_version TYPE c LENGTH 1, + END OF ty_extra. + CONSTANTS c_longtext_id_doma TYPE dokil-id VALUE 'DO' ##NO_TEXT. METHODS serialize_texts @@ -338,6 +344,7 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION. DATA: lv_name TYPE ddobjname, lv_done TYPE abap_bool, ls_dd01v TYPE dd01v, + ls_extra TYPE ty_extra, lt_dd07v TYPE TABLE OF dd07v. FIELD-SYMBOLS TYPE dd07v. @@ -385,6 +392,17 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION. zcx_abapgit_exception=>raise_t100( ). ENDIF. + " Fields that are not part of dd01v + io_xml->read( EXPORTING iv_name = 'DD01L_EXTRA' + CHANGING cg_data = ls_extra ). + + TRY. + set_abap_language_version( CHANGING cv_abap_language_version = ls_extra-abap_language_version ). + + UPDATE ('DD01L') SET abap_language_version = ls_extra-abap_language_version WHERE domname = lv_name. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + IF mo_i18n_params->is_lxe_applicable( ) = abap_false. deserialize_texts( ii_xml = io_xml @@ -463,6 +481,7 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION. DATA: lv_name TYPE ddobjname, lv_state TYPE ddgotstate, ls_dd01v TYPE dd01v, + ls_extra TYPE ty_extra, lv_masklen TYPE c LENGTH 4, lt_dd07v TYPE TABLE OF dd07v. @@ -521,6 +540,11 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION. io_xml->add( iv_name = 'DD07V_TAB' ig_data = lt_dd07v ). + ls_extra-abap_language_version = get_abap_language_version( ). + + io_xml->add( iv_name = 'DD01L_EXTRA' + ig_data = ls_extra ). + IF mo_i18n_params->is_lxe_applicable( ) = abap_false. serialize_texts( ii_xml = io_xml diff --git a/src/objects/zcl_abapgit_object_dtdc.clas.abap b/src/objects/zcl_abapgit_object_dtdc.clas.abap index ebb01db14..15ee2a09a 100644 --- a/src/objects/zcl_abapgit_object_dtdc.clas.abap +++ b/src/objects/zcl_abapgit_object_dtdc.clas.abap @@ -303,8 +303,9 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION. lx_error TYPE REF TO cx_root. FIELD-SYMBOLS: - TYPE any, - TYPE data. + TYPE uccheck, + TYPE any, + TYPE data. ASSIGN mr_dynamic_cache->* TO . ASSERT sy-subrc = 0. @@ -364,6 +365,17 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION. CALL METHOD li_wb_object_operator->('IF_WB_OBJECT_OPERATOR~ACTIVATE'). + ASSIGN COMPONENT 'METADATA-ABAP_LANGUAGE_VERSION' OF STRUCTURE + TO . + IF sy-subrc = 0. + set_abap_language_version( CHANGING cv_abap_language_version = ). + + TRY. + UPDATE ('DDDTDC_SOURCE') SET abap_language_version = WHERE dtdc_name = ms_item-obj_name. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + ENDIF. + corr_insert( iv_package ). CATCH cx_root INTO lx_error. @@ -446,8 +458,9 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION. lv_source TYPE string. FIELD-SYMBOLS: - TYPE any, - TYPE string. + TYPE uccheck, + TYPE any, + TYPE string. ASSIGN mr_dynamic_cache->* TO . ASSERT sy-subrc = 0. @@ -474,6 +487,11 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION. zcx_abapgit_exception=>raise_with_text( lx_error ). ENDTRY. + ASSIGN COMPONENT 'METADATA-ABAP_LANGUAGE_VERSION' OF STRUCTURE TO . + IF sy-subrc = 0. + = get_abap_language_version( ). + ENDIF. + io_xml->add( iv_name = 'DTDC' ig_data = ). diff --git a/src/objects/zcl_abapgit_object_dtel.clas.abap b/src/objects/zcl_abapgit_object_dtel.clas.abap index 061e4cc8d..61ae35e04 100644 --- a/src/objects/zcl_abapgit_object_dtel.clas.abap +++ b/src/objects/zcl_abapgit_object_dtel.clas.abap @@ -17,6 +17,12 @@ CLASS zcl_abapgit_object_dtel DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje TYPES: ty_dd04_texts TYPE STANDARD TABLE OF ty_dd04_text . + " Fields that are not part of dd04v + TYPES: + BEGIN OF ty_extra, + abap_language_version TYPE uccheck, + END OF ty_extra. + CONSTANTS c_longtext_id_dtel TYPE dokil-id VALUE 'DE' ##NO_TEXT. CONSTANTS c_longtext_id_dtel_suppl TYPE dokil-id VALUE 'DZ' ##NO_TEXT. @@ -182,9 +188,9 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. DATA: ls_dd04v TYPE dd04v, + ls_extra TYPE ty_extra, lv_name TYPE ddobjname. - io_xml->read( EXPORTING iv_name = 'DD04V' CHANGING cg_data = ls_dd04v ). @@ -208,6 +214,17 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION. zcx_abapgit_exception=>raise_t100( ). ENDIF. + " Fields that are not part of dd04v + io_xml->read( EXPORTING iv_name = 'DD04L_EXTRA' + CHANGING cg_data = ls_extra ). + + TRY. + set_abap_language_version( CHANGING cv_abap_language_version = ls_extra-abap_language_version ). + + UPDATE ('DD04L') SET abap_language_version = ls_extra-abap_language_version WHERE rollname = lv_name. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + IF mo_i18n_params->is_lxe_applicable( ) = abap_false. deserialize_texts( ii_xml = io_xml @@ -300,6 +317,7 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION. * done directly from here DATA: lv_name TYPE ddobjname, + ls_extra TYPE ty_extra, ls_dd04v TYPE dd04v. lv_name = ms_item-obj_name. @@ -348,6 +366,11 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION. io_xml->add( iv_name = 'DD04V' ig_data = ls_dd04v ). + ls_extra-abap_language_version = get_abap_language_version( ). + + io_xml->add( iv_name = 'DD04L_EXTRA' + ig_data = ls_extra ). + IF mo_i18n_params->is_lxe_applicable( ) = abap_false. serialize_texts( io_xml ). ENDIF. diff --git a/src/objects/zcl_abapgit_object_enqu.clas.abap b/src/objects/zcl_abapgit_object_enqu.clas.abap index cc5ba1fb6..9ed43cccd 100644 --- a/src/objects/zcl_abapgit_object_enqu.clas.abap +++ b/src/objects/zcl_abapgit_object_enqu.clas.abap @@ -10,6 +10,13 @@ CLASS zcl_abapgit_object_enqu DEFINITION PROTECTED SECTION. PRIVATE SECTION. TYPES: ty_dd27p TYPE STANDARD TABLE OF dd27p WITH DEFAULT KEY. + + " Fields that are not part of dd25v + TYPES: + BEGIN OF ty_extra, + abap_language_version TYPE uccheck, + END OF ty_extra. + METHODS _clear_dd27p_fields CHANGING ct_dd27p TYPE ty_dd27p. ENDCLASS. @@ -48,10 +55,10 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION. DATA: lv_name TYPE ddobjname, ls_dd25v TYPE dd25v, + ls_extra TYPE ty_extra, lt_dd26e TYPE TABLE OF dd26e, lt_dd27p TYPE ty_dd27p. - io_xml->read( EXPORTING iv_name = 'DD25V' CHANGING cg_data = ls_dd25v ). io_xml->read( EXPORTING iv_name = 'DD26E_TABLE' @@ -82,6 +89,17 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION. zcx_abapgit_exception=>raise_t100( ). ENDIF. + " Fields that are not part of dd25v + io_xml->read( EXPORTING iv_name = 'DD25L_EXTRA' + CHANGING cg_data = ls_extra ). + + TRY. + set_abap_language_version( CHANGING cv_abap_language_version = ls_extra-abap_language_version ). + + UPDATE ('DD25L') SET abap_language_version = ls_extra-abap_language_version WHERE viewname = lv_name. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + zcl_abapgit_objects_activation=>add_item( ms_item ). ENDMETHOD. @@ -150,6 +168,7 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION. DATA: lv_name TYPE ddobjname, lv_state TYPE ddgotstate, ls_dd25v TYPE dd25v, + ls_extra TYPE ty_extra, lt_dd26e TYPE TABLE OF dd26e, lt_dd27p TYPE ty_dd27p. @@ -192,6 +211,11 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION. io_xml->add( ig_data = lt_dd27p iv_name = 'DD27P_TABLE' ). + ls_extra-abap_language_version = get_abap_language_version( ). + + io_xml->add( iv_name = 'DD25L_EXTRA' + ig_data = ls_extra ). + ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_ttyp.clas.abap b/src/objects/zcl_abapgit_object_ttyp.clas.abap index 204c44ab1..372a975d9 100644 --- a/src/objects/zcl_abapgit_object_ttyp.clas.abap +++ b/src/objects/zcl_abapgit_object_ttyp.clas.abap @@ -4,6 +4,13 @@ CLASS zcl_abapgit_object_ttyp DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje INTERFACES zif_abapgit_object. PROTECTED SECTION. PRIVATE SECTION. + + " Fields that are not part of dd40v + TYPES: + BEGIN OF ty_extra, + abap_language_version TYPE uccheck, + END OF ty_extra. + CONSTANTS c_longtext_id_ttyp TYPE dokil-id VALUE 'TT'. ENDCLASS. @@ -41,6 +48,7 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION. lt_dd42v TYPE dd42v_tab, lt_dd43v TYPE dd43v_tab, ls_dd40v TYPE dd40v, + ls_extra TYPE ty_extra, lv_msg TYPE string. io_xml->read( EXPORTING iv_name = 'DD40V' @@ -91,6 +99,17 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION. zcx_abapgit_exception=>raise( lv_msg ). ENDIF. + " Fields that are not part of dd40v + io_xml->read( EXPORTING iv_name = 'DD40L_EXTRA' + CHANGING cg_data = ls_extra ). + + TRY. + set_abap_language_version( CHANGING cv_abap_language_version = ls_extra-abap_language_version ). + + UPDATE ('DD40L') SET abap_language_version = ls_extra-abap_language_version WHERE typename = lv_name. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + deserialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_ttyp ). @@ -164,9 +183,9 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION. lv_state TYPE ddgotstate, lt_dd42v TYPE dd42v_tab, lt_dd43v TYPE dd43v_tab, + ls_extra TYPE ty_extra, ls_dd40v TYPE dd40v. - lv_name = ms_item-obj_name. CALL FUNCTION 'DDIF_TTYP_GET' @@ -207,6 +226,11 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION. io_xml->add( iv_name = 'DD43V' ig_data = lt_dd43v ). + ls_extra-abap_language_version = get_abap_language_version( ). + + io_xml->add( iv_name = 'DD40L_EXTRA' + ig_data = ls_extra ). + serialize_longtexts( ii_xml = io_xml iv_longtext_id = c_longtext_id_ttyp ). diff --git a/src/objects/zcl_abapgit_object_view.clas.abap b/src/objects/zcl_abapgit_object_view.clas.abap index cebb9e6a6..d9c73551b 100644 --- a/src/objects/zcl_abapgit_object_view.clas.abap +++ b/src/objects/zcl_abapgit_object_view.clas.abap @@ -9,7 +9,9 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje IMPORTING iv_name TYPE ddobjname RETURNING - VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras. + VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras + RAISING + zcx_abapgit_exception. "! Update additional data "! @parameter iv_name | name of the table @@ -182,6 +184,16 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. SELECT SINGLE * FROM tddat INTO rs_tabl_extras-tddat WHERE tabname = iv_name. + " Fields that are not part of dd25v + TRY. + SELECT SINGLE abap_language_version FROM ('DD25L') INTO CORRESPONDING FIELDS OF rs_tabl_extras + WHERE viewname = iv_name AND as4local = 'A' AND as4vers = '0000'. + IF sy-subrc = 0. + clear_abap_language_version( CHANGING cv_abap_language_version = rs_tabl_extras-abap_language_version ). + ENDIF. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + ENDMETHOD. @@ -285,6 +297,8 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. METHOD update_extras. + DATA lv_abap_language_version TYPE uccheck. + IF is_tabl_extras-tddat IS INITIAL. delete_extras( iv_name = iv_name @@ -297,6 +311,16 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. iv_transport = iv_transport ). ENDIF. + " Fields that are not part of dd25v + TRY. + lv_abap_language_version = is_tabl_extras-abap_language_version. + + set_abap_language_version( CHANGING cv_abap_language_version = lv_abap_language_version ). + + UPDATE ('DD25L') SET abap_language_version = lv_abap_language_version WHERE viewname = iv_name. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + ENDMETHOD. @@ -361,57 +385,62 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. lv_name = ms_item-obj_name. " type conversion - LOOP AT lt_dd27p ASSIGNING . - -objpos = sy-tabix. - -viewname = lv_name. - " rollname seems to be mandatory in the API, but is typically not defined in the VIEW - SELECT SINGLE rollname FROM dd03l INTO -rollname - WHERE tabname = -tabname - AND fieldname = -fieldname. - IF -rollnamevi IS INITIAL. - -rollnamevi = -rollname. + IF iv_step = zif_abapgit_object=>gc_step_id-ddic. + + LOOP AT lt_dd27p ASSIGNING . + -objpos = sy-tabix. + -viewname = lv_name. + " rollname seems to be mandatory in the API, but is typically not defined in the VIEW + SELECT SINGLE rollname FROM dd03l INTO -rollname + WHERE tabname = -tabname + AND fieldname = -fieldname. + IF -rollnamevi IS INITIAL. + -rollnamevi = -rollname. + ENDIF. + ENDLOOP. + + corr_insert( iv_package = iv_package + ig_object_class = 'DICT' ). + + CALL FUNCTION 'DDIF_VIEW_PUT' + EXPORTING + name = lv_name + dd25v_wa = ls_dd25v + dd09l_wa = ls_dd09l + TABLES + dd26v_tab = lt_dd26v + dd27p_tab = lt_dd27p + dd28j_tab = lt_dd28j + dd28v_tab = lt_dd28v + EXCEPTIONS + view_not_found = 1 + name_inconsistent = 2 + view_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise_t100( ). ENDIF. - ENDLOOP. - corr_insert( iv_package = iv_package - ig_object_class = 'DICT' ). + IF mo_i18n_params->is_lxe_applicable( ) = abap_false. + deserialize_texts( + ii_xml = io_xml + is_dd25v = ls_dd25v ). + ENDIF. - CALL FUNCTION 'DDIF_VIEW_PUT' - EXPORTING - name = lv_name - dd25v_wa = ls_dd25v - dd09l_wa = ls_dd09l - TABLES - dd26v_tab = lt_dd26v - dd27p_tab = lt_dd27p - dd28j_tab = lt_dd28j - dd28v_tab = lt_dd28v - EXCEPTIONS - view_not_found = 1 - name_inconsistent = 2 - view_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - zcx_abapgit_exception=>raise_t100( ). + deserialize_longtexts( ii_xml = io_xml + iv_longtext_id = c_longtext_id_view ). + + zcl_abapgit_objects_activation=>add_item( ms_item ). + + ELSE. + " Late update after activation because activation removes ABAP Language Version (in lower releases?) + update_extras( iv_name = lv_name + iv_transport = iv_transport + is_tabl_extras = ls_extras ). ENDIF. - IF mo_i18n_params->is_lxe_applicable( ) = abap_false. - deserialize_texts( - ii_xml = io_xml - is_dd25v = ls_dd25v ). - ENDIF. - - deserialize_longtexts( ii_xml = io_xml - iv_longtext_id = c_longtext_id_view ). - - update_extras( iv_name = lv_name - iv_transport = iv_transport - is_tabl_extras = ls_extras ). - - zcl_abapgit_objects_activation=>add_item( ms_item ). - ENDMETHOD. @@ -454,6 +483,7 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION. METHOD zif_abapgit_object~get_deserialize_steps. APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps. + APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps. ENDMETHOD. diff --git a/src/objects/zcl_abapgit_object_xslt.clas.abap b/src/objects/zcl_abapgit_object_xslt.clas.abap index 4b887d410..50a1bf298 100644 --- a/src/objects/zcl_abapgit_object_xslt.clas.abap +++ b/src/objects/zcl_abapgit_object_xslt.clas.abap @@ -4,6 +4,11 @@ CLASS zcl_abapgit_object_xslt DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje INTERFACES zif_abapgit_object. PROTECTED SECTION. PRIVATE SECTION. + TYPES: + BEGIN OF ty_extra, + abap_language_version TYPE uccheck, + END OF ty_extra. + METHODS: get RETURNING VALUE(ro_xslt) TYPE REF TO cl_o2_api_xsltdesc @@ -96,6 +101,7 @@ CLASS zcl_abapgit_object_xslt IMPLEMENTATION. DATA: lv_source TYPE string, lo_xslt TYPE REF TO cl_o2_api_xsltdesc, + ls_extra TYPE ty_extra, lv_len TYPE i, ls_attributes TYPE o2xsltattr. @@ -160,6 +166,17 @@ CLASS zcl_abapgit_object_xslt IMPLEMENTATION. zcx_abapgit_exception=>raise( |Error from XSLT save, { sy-subrc }| ). ENDIF. + io_xml->read( EXPORTING iv_name = 'EXTRA' + CHANGING cg_data = ls_extra ). + + TRY. + set_abap_language_version( CHANGING cv_abap_language_version = ls_extra-abap_language_version ). + + UPDATE ('O2XSLTDESC') SET abap_language_version = ls_extra-abap_language_version + WHERE relid = 'TR' AND xsltdesc = ms_item-obj_name. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + lo_xslt->set_changeable( abap_false ). zcl_abapgit_objects_activation=>add_item( ms_item ). @@ -228,10 +245,10 @@ CLASS zcl_abapgit_object_xslt IMPLEMENTATION. METHOD zif_abapgit_object~serialize. DATA: lo_xslt TYPE REF TO cl_o2_api_xsltdesc, + ls_extra TYPE ty_extra, lv_source TYPE string, ls_attributes TYPE o2xsltattr. - lo_xslt = get( ). ls_attributes = lo_xslt->get_attributes( ). @@ -252,5 +269,17 @@ CLASS zcl_abapgit_object_xslt IMPLEMENTATION. iv_ext = 'xml' iv_string = lv_source ). + TRY. + SELECT SINGLE abap_language_version FROM ('O2XSLTDESC') INTO CORRESPONDING FIELDS OF ls_extra + WHERE relid = 'TR' AND xsltdesc = ms_item-obj_name AND state = 'A'. + IF sy-subrc = 0. + clear_abap_language_version( CHANGING cv_abap_language_version = ls_extra-abap_language_version ). + ENDIF. + CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER. + ENDTRY. + + io_xml->add( iv_name = 'EXTRA' + ig_data = ls_extra ). + ENDMETHOD. ENDCLASS. diff --git a/src/objects/zcl_abapgit_objects_super.clas.abap b/src/objects/zcl_abapgit_objects_super.clas.abap index 3ad0a10c5..0523a2801 100644 --- a/src/objects/zcl_abapgit_objects_super.clas.abap +++ b/src/objects/zcl_abapgit_objects_super.clas.abap @@ -89,6 +89,11 @@ CLASS zcl_abapgit_objects_super DEFINITION !iv_no_ask_delete_append TYPE abap_bool DEFAULT abap_false RAISING zcx_abapgit_exception . + METHODS get_abap_language_version + RETURNING + VALUE(rv_abap_language_version) TYPE uccheck + RAISING + zcx_abapgit_exception . METHODS set_abap_language_version CHANGING !cv_abap_language_version TYPE uccheck @@ -293,6 +298,26 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION. ENDMETHOD. + METHOD get_abap_language_version. + + " This is limited to DDIC objects + TRY. + CALL METHOD ('CL_DD_ABAP_LANGUAGE_VERSION')=>get_abap_language_version + EXPORTING + iv_object_type = ms_item-obj_type + iv_object_name = ms_item-obj_name + RECEIVING + rv_abap_language_version = rv_abap_language_version. + CATCH cx_root. + " does not exist in lower releases + RETURN. + ENDTRY. + + clear_abap_language_version( CHANGING cv_abap_language_version = rv_abap_language_version ). + + ENDMETHOD. + + METHOD get_accessed_files. rt_files = mo_files->get_accessed_files( ). ENDMETHOD.