Add support for ABAP Language Version for DDIC

Phase 2 of #6689
This commit is contained in:
Marc Bernard 2025-04-10 18:11:22 +00:00
parent a4019f38fb
commit 1082abd88d
11 changed files with 273 additions and 59 deletions

View File

@ -12,13 +12,15 @@ CLASS zcl_abapgit_object_tabl DEFINITION
"! get additional data like table authorization group "! get additional data like table authorization group
"! @parameter iv_tabname | name of the table "! @parameter iv_tabname | name of the table
METHODS read_extras IMPORTING iv_tabname TYPE ddobjname 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 "! Update additional data
"! @parameter iv_tabname | name of the table "! @parameter iv_tabname | name of the table
"! @parameter is_tabl_extras | additional table data "! @parameter is_tabl_extras | additional table data
METHODS update_extras IMPORTING iv_tabname TYPE ddobjname 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 "! Delete additional data
"! @parameter iv_tabname | name of the table "! @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. SELECT SINGLE * FROM tddat INTO rs_tabl_extras-tddat WHERE tabname = iv_tabname.
rs_tabl_extras-abap_language_version = get_abap_language_version( ).
ENDMETHOD. ENDMETHOD.
@ -596,12 +600,24 @@ CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
METHOD update_extras. METHOD update_extras.
DATA lv_abap_language_version TYPE uccheck.
IF is_tabl_extras-tddat IS INITIAL. IF is_tabl_extras-tddat IS INITIAL.
delete_extras( iv_tabname ). delete_extras( iv_tabname ).
ELSE. ELSE.
MODIFY tddat FROM is_tabl_extras-tddat. MODIFY tddat FROM is_tabl_extras-tddat.
ENDIF. 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. ENDMETHOD.

View File

@ -23,6 +23,7 @@ INTERFACE zif_abapgit_object_tabl PUBLIC.
TYPES: BEGIN OF ty_tabl_extras, TYPES: BEGIN OF ty_tabl_extras,
tddat TYPE tddat, tddat TYPE tddat,
abap_language_version TYPE uccheck,
END OF ty_tabl_extras. END OF ty_tabl_extras.
TYPES: BEGIN OF ty_internal, TYPES: BEGIN OF ty_internal,

View File

@ -525,7 +525,7 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE <lg_data> TO <lg_abap_language_version>. ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE <lg_data> TO <lg_abap_language_version>.
IF sy-subrc = 0. IF sy-subrc = 0.
clear_abap_language_version( CHANGING cv_abap_language_version = <lg_abap_language_version> ). <lg_abap_language_version> = get_abap_language_version( ).
ENDIF. ENDIF.
APPEND 'AS4USER' TO lt_clr_comps. APPEND 'AS4USER' TO lt_clr_comps.

View File

@ -25,6 +25,12 @@ CLASS zcl_abapgit_object_doma DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
TYPES: TYPES:
ty_dd07_texts TYPE STANDARD TABLE OF ty_dd07_text . 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. CONSTANTS c_longtext_id_doma TYPE dokil-id VALUE 'DO' ##NO_TEXT.
METHODS serialize_texts METHODS serialize_texts
@ -338,6 +344,7 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
DATA: lv_name TYPE ddobjname, DATA: lv_name TYPE ddobjname,
lv_done TYPE abap_bool, lv_done TYPE abap_bool,
ls_dd01v TYPE dd01v, ls_dd01v TYPE dd01v,
ls_extra TYPE ty_extra,
lt_dd07v TYPE TABLE OF dd07v. lt_dd07v TYPE TABLE OF dd07v.
FIELD-SYMBOLS <ls_dd07v> TYPE dd07v. FIELD-SYMBOLS <ls_dd07v> TYPE dd07v.
@ -385,6 +392,17 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
zcx_abapgit_exception=>raise_t100( ). zcx_abapgit_exception=>raise_t100( ).
ENDIF. 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. IF mo_i18n_params->is_lxe_applicable( ) = abap_false.
deserialize_texts( deserialize_texts(
ii_xml = io_xml ii_xml = io_xml
@ -463,6 +481,7 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
DATA: lv_name TYPE ddobjname, DATA: lv_name TYPE ddobjname,
lv_state TYPE ddgotstate, lv_state TYPE ddgotstate,
ls_dd01v TYPE dd01v, ls_dd01v TYPE dd01v,
ls_extra TYPE ty_extra,
lv_masklen TYPE c LENGTH 4, lv_masklen TYPE c LENGTH 4,
lt_dd07v TYPE TABLE OF dd07v. lt_dd07v TYPE TABLE OF dd07v.
@ -521,6 +540,11 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
io_xml->add( iv_name = 'DD07V_TAB' io_xml->add( iv_name = 'DD07V_TAB'
ig_data = lt_dd07v ). 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. IF mo_i18n_params->is_lxe_applicable( ) = abap_false.
serialize_texts( serialize_texts(
ii_xml = io_xml ii_xml = io_xml

View File

@ -303,6 +303,7 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION.
lx_error TYPE REF TO cx_root. lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: FIELD-SYMBOLS:
<lv_abap_language_version> TYPE uccheck,
<ls_dynamic_cache> TYPE any, <ls_dynamic_cache> TYPE any,
<lv_source> TYPE data. <lv_source> TYPE data.
@ -364,6 +365,17 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION.
CALL METHOD li_wb_object_operator->('IF_WB_OBJECT_OPERATOR~ACTIVATE'). CALL METHOD li_wb_object_operator->('IF_WB_OBJECT_OPERATOR~ACTIVATE').
ASSIGN COMPONENT 'METADATA-ABAP_LANGUAGE_VERSION' OF STRUCTURE <ls_dynamic_cache>
TO <lv_abap_language_version>.
IF sy-subrc = 0.
set_abap_language_version( CHANGING cv_abap_language_version = <lv_abap_language_version> ).
TRY.
UPDATE ('DDDTDC_SOURCE') SET abap_language_version = <lv_abap_language_version> WHERE dtdc_name = ms_item-obj_name.
CATCH cx_sy_dynamic_osql_semantics ##NO_HANDLER.
ENDTRY.
ENDIF.
corr_insert( iv_package ). corr_insert( iv_package ).
CATCH cx_root INTO lx_error. CATCH cx_root INTO lx_error.
@ -446,6 +458,7 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION.
lv_source TYPE string. lv_source TYPE string.
FIELD-SYMBOLS: FIELD-SYMBOLS:
<lv_abap_language_version> TYPE uccheck,
<ls_dynamic_cache> TYPE any, <ls_dynamic_cache> TYPE any,
<lv_source> TYPE string. <lv_source> TYPE string.
@ -474,6 +487,11 @@ CLASS zcl_abapgit_object_dtdc IMPLEMENTATION.
zcx_abapgit_exception=>raise_with_text( lx_error ). zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY. ENDTRY.
ASSIGN COMPONENT 'METADATA-ABAP_LANGUAGE_VERSION' OF STRUCTURE <ls_dynamic_cache> TO <lv_abap_language_version>.
IF sy-subrc = 0.
<lv_abap_language_version> = get_abap_language_version( ).
ENDIF.
io_xml->add( io_xml->add(
iv_name = 'DTDC' iv_name = 'DTDC'
ig_data = <ls_dynamic_cache> ). ig_data = <ls_dynamic_cache> ).

View File

@ -17,6 +17,12 @@ CLASS zcl_abapgit_object_dtel DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
TYPES: TYPES:
ty_dd04_texts TYPE STANDARD TABLE OF ty_dd04_text . 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 TYPE dokil-id VALUE 'DE' ##NO_TEXT.
CONSTANTS c_longtext_id_dtel_suppl TYPE dokil-id VALUE 'DZ' ##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. METHOD zif_abapgit_object~deserialize.
DATA: ls_dd04v TYPE dd04v, DATA: ls_dd04v TYPE dd04v,
ls_extra TYPE ty_extra,
lv_name TYPE ddobjname. lv_name TYPE ddobjname.
io_xml->read( EXPORTING iv_name = 'DD04V' io_xml->read( EXPORTING iv_name = 'DD04V'
CHANGING cg_data = ls_dd04v ). CHANGING cg_data = ls_dd04v ).
@ -208,6 +214,17 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION.
zcx_abapgit_exception=>raise_t100( ). zcx_abapgit_exception=>raise_t100( ).
ENDIF. 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. IF mo_i18n_params->is_lxe_applicable( ) = abap_false.
deserialize_texts( deserialize_texts(
ii_xml = io_xml ii_xml = io_xml
@ -300,6 +317,7 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION.
* done directly from here * done directly from here
DATA: lv_name TYPE ddobjname, DATA: lv_name TYPE ddobjname,
ls_extra TYPE ty_extra,
ls_dd04v TYPE dd04v. ls_dd04v TYPE dd04v.
lv_name = ms_item-obj_name. lv_name = ms_item-obj_name.
@ -348,6 +366,11 @@ CLASS zcl_abapgit_object_dtel IMPLEMENTATION.
io_xml->add( iv_name = 'DD04V' io_xml->add( iv_name = 'DD04V'
ig_data = ls_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. IF mo_i18n_params->is_lxe_applicable( ) = abap_false.
serialize_texts( io_xml ). serialize_texts( io_xml ).
ENDIF. ENDIF.

View File

@ -10,6 +10,13 @@ CLASS zcl_abapgit_object_enqu DEFINITION
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
TYPES: ty_dd27p TYPE STANDARD TABLE OF dd27p WITH DEFAULT KEY. 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. METHODS _clear_dd27p_fields CHANGING ct_dd27p TYPE ty_dd27p.
ENDCLASS. ENDCLASS.
@ -48,10 +55,10 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
DATA: lv_name TYPE ddobjname, DATA: lv_name TYPE ddobjname,
ls_dd25v TYPE dd25v, ls_dd25v TYPE dd25v,
ls_extra TYPE ty_extra,
lt_dd26e TYPE TABLE OF dd26e, lt_dd26e TYPE TABLE OF dd26e,
lt_dd27p TYPE ty_dd27p. lt_dd27p TYPE ty_dd27p.
io_xml->read( EXPORTING iv_name = 'DD25V' io_xml->read( EXPORTING iv_name = 'DD25V'
CHANGING cg_data = ls_dd25v ). CHANGING cg_data = ls_dd25v ).
io_xml->read( EXPORTING iv_name = 'DD26E_TABLE' io_xml->read( EXPORTING iv_name = 'DD26E_TABLE'
@ -82,6 +89,17 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
zcx_abapgit_exception=>raise_t100( ). zcx_abapgit_exception=>raise_t100( ).
ENDIF. 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 ). zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD. ENDMETHOD.
@ -150,6 +168,7 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
DATA: lv_name TYPE ddobjname, DATA: lv_name TYPE ddobjname,
lv_state TYPE ddgotstate, lv_state TYPE ddgotstate,
ls_dd25v TYPE dd25v, ls_dd25v TYPE dd25v,
ls_extra TYPE ty_extra,
lt_dd26e TYPE TABLE OF dd26e, lt_dd26e TYPE TABLE OF dd26e,
lt_dd27p TYPE ty_dd27p. lt_dd27p TYPE ty_dd27p.
@ -192,6 +211,11 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
io_xml->add( ig_data = lt_dd27p io_xml->add( ig_data = lt_dd27p
iv_name = 'DD27P_TABLE' ). 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. ENDMETHOD.

View File

@ -4,6 +4,13 @@ CLASS zcl_abapgit_object_ttyp DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
INTERFACES zif_abapgit_object. INTERFACES zif_abapgit_object.
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE 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'. CONSTANTS c_longtext_id_ttyp TYPE dokil-id VALUE 'TT'.
ENDCLASS. ENDCLASS.
@ -41,6 +48,7 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
lt_dd42v TYPE dd42v_tab, lt_dd42v TYPE dd42v_tab,
lt_dd43v TYPE dd43v_tab, lt_dd43v TYPE dd43v_tab,
ls_dd40v TYPE dd40v, ls_dd40v TYPE dd40v,
ls_extra TYPE ty_extra,
lv_msg TYPE string. lv_msg TYPE string.
io_xml->read( EXPORTING iv_name = 'DD40V' io_xml->read( EXPORTING iv_name = 'DD40V'
@ -91,6 +99,17 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
zcx_abapgit_exception=>raise( lv_msg ). zcx_abapgit_exception=>raise( lv_msg ).
ENDIF. 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 deserialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_ttyp ). iv_longtext_id = c_longtext_id_ttyp ).
@ -164,9 +183,9 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
lv_state TYPE ddgotstate, lv_state TYPE ddgotstate,
lt_dd42v TYPE dd42v_tab, lt_dd42v TYPE dd42v_tab,
lt_dd43v TYPE dd43v_tab, lt_dd43v TYPE dd43v_tab,
ls_extra TYPE ty_extra,
ls_dd40v TYPE dd40v. ls_dd40v TYPE dd40v.
lv_name = ms_item-obj_name. lv_name = ms_item-obj_name.
CALL FUNCTION 'DDIF_TTYP_GET' CALL FUNCTION 'DDIF_TTYP_GET'
@ -207,6 +226,11 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
io_xml->add( iv_name = 'DD43V' io_xml->add( iv_name = 'DD43V'
ig_data = lt_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 serialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_ttyp ). iv_longtext_id = c_longtext_id_ttyp ).

View File

@ -9,7 +9,9 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
IMPORTING IMPORTING
iv_name TYPE ddobjname iv_name TYPE ddobjname
RETURNING 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 "! Update additional data
"! @parameter iv_name | name of the table "! @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. 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. ENDMETHOD.
@ -285,6 +297,8 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
METHOD update_extras. METHOD update_extras.
DATA lv_abap_language_version TYPE uccheck.
IF is_tabl_extras-tddat IS INITIAL. IF is_tabl_extras-tddat IS INITIAL.
delete_extras( delete_extras(
iv_name = iv_name iv_name = iv_name
@ -297,6 +311,16 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
iv_transport = iv_transport ). iv_transport = iv_transport ).
ENDIF. 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. ENDMETHOD.
@ -361,6 +385,8 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
lv_name = ms_item-obj_name. " type conversion lv_name = ms_item-obj_name. " type conversion
IF iv_step = zif_abapgit_object=>gc_step_id-ddic.
LOOP AT lt_dd27p ASSIGNING <ls_dd27p>. LOOP AT lt_dd27p ASSIGNING <ls_dd27p>.
<ls_dd27p>-objpos = sy-tabix. <ls_dd27p>-objpos = sy-tabix.
<ls_dd27p>-viewname = lv_name. <ls_dd27p>-viewname = lv_name.
@ -406,11 +432,14 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
deserialize_longtexts( ii_xml = io_xml deserialize_longtexts( ii_xml = io_xml
iv_longtext_id = c_longtext_id_view ). 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 update_extras( iv_name = lv_name
iv_transport = iv_transport iv_transport = iv_transport
is_tabl_extras = ls_extras ). is_tabl_extras = ls_extras ).
ENDIF.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD. ENDMETHOD.
@ -454,6 +483,7 @@ CLASS zcl_abapgit_object_view IMPLEMENTATION.
METHOD zif_abapgit_object~get_deserialize_steps. 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-ddic TO rt_steps.
APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps.
ENDMETHOD. ENDMETHOD.

View File

@ -4,6 +4,11 @@ CLASS zcl_abapgit_object_xslt DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
INTERFACES zif_abapgit_object. INTERFACES zif_abapgit_object.
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
TYPES:
BEGIN OF ty_extra,
abap_language_version TYPE uccheck,
END OF ty_extra.
METHODS: METHODS:
get get
RETURNING VALUE(ro_xslt) TYPE REF TO cl_o2_api_xsltdesc 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, DATA: lv_source TYPE string,
lo_xslt TYPE REF TO cl_o2_api_xsltdesc, lo_xslt TYPE REF TO cl_o2_api_xsltdesc,
ls_extra TYPE ty_extra,
lv_len TYPE i, lv_len TYPE i,
ls_attributes TYPE o2xsltattr. ls_attributes TYPE o2xsltattr.
@ -160,6 +166,17 @@ CLASS zcl_abapgit_object_xslt IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Error from XSLT save, { sy-subrc }| ). zcx_abapgit_exception=>raise( |Error from XSLT save, { sy-subrc }| ).
ENDIF. 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 ). lo_xslt->set_changeable( abap_false ).
zcl_abapgit_objects_activation=>add_item( ms_item ). zcl_abapgit_objects_activation=>add_item( ms_item ).
@ -228,10 +245,10 @@ CLASS zcl_abapgit_object_xslt IMPLEMENTATION.
METHOD zif_abapgit_object~serialize. METHOD zif_abapgit_object~serialize.
DATA: lo_xslt TYPE REF TO cl_o2_api_xsltdesc, DATA: lo_xslt TYPE REF TO cl_o2_api_xsltdesc,
ls_extra TYPE ty_extra,
lv_source TYPE string, lv_source TYPE string,
ls_attributes TYPE o2xsltattr. ls_attributes TYPE o2xsltattr.
lo_xslt = get( ). lo_xslt = get( ).
ls_attributes = lo_xslt->get_attributes( ). ls_attributes = lo_xslt->get_attributes( ).
@ -252,5 +269,17 @@ CLASS zcl_abapgit_object_xslt IMPLEMENTATION.
iv_ext = 'xml' iv_ext = 'xml'
iv_string = lv_source ). 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. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -89,6 +89,11 @@ CLASS zcl_abapgit_objects_super DEFINITION
!iv_no_ask_delete_append TYPE abap_bool DEFAULT abap_false !iv_no_ask_delete_append TYPE abap_bool DEFAULT abap_false
RAISING RAISING
zcx_abapgit_exception . 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 METHODS set_abap_language_version
CHANGING CHANGING
!cv_abap_language_version TYPE uccheck !cv_abap_language_version TYPE uccheck
@ -293,6 +298,26 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
ENDMETHOD. 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. METHOD get_accessed_files.
rt_files = mo_files->get_accessed_files( ). rt_files = mo_files->get_accessed_files( ).
ENDMETHOD. ENDMETHOD.