mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Merge branch 'main' into mbtools/srvb_issues
This commit is contained in:
commit
3670c4a652
|
@ -8,6 +8,44 @@ Legend
|
|||
+ : added
|
||||
- : removed
|
||||
|
||||
2024-11-04 v1.130.0
|
||||
-------------------
|
||||
|
||||
! PROG: Store flow logic as separate ABAP files (#7066)
|
||||
! WDYN: Store controller code as separate ABAP files (#7069)
|
||||
! SSFO: Store smartform code as separate ABAP files (#7071)
|
||||
+ CLIF: Add missing translations for classes and interfaces (#6963)
|
||||
+ UIAD: Add support for Launchpad App Descriptor Item (#6969)
|
||||
+ BGQC: Add support for Background Processing Context (#6974)
|
||||
+ DSFD: CDS Scalar Function Definition (#6951)
|
||||
+ DRAS: CDS Aspect (#6953)
|
||||
+ DSFI: CDS Scalar Function Implementation (#6952)
|
||||
+ Add support for Software Component Relations (#7012)
|
||||
* ENHO: Fix diff in generated comments of class enhancements (#6962)
|
||||
* SXSD: Fix check if BADI exists (#6961)
|
||||
* CDBO: Fix missing parameters in `constructor` (#6966)
|
||||
* Fix dump in activation error handling (#6967)
|
||||
* Fix deserialize SEOCLASSTX for INTF [AFF] (#6983)
|
||||
* Allow staging for empty repositories (#6981)
|
||||
* fix: syst_langu does not exist on older releases (#6999)
|
||||
* fix sticky header with browser control warning (#6997)
|
||||
* DSFI: Updated object handler to match the latest AFF definition (#7013)
|
||||
* Filenames for translation are case sensitive (#6995)
|
||||
* Enable deserialization of DSFD, DSFI and DRAS (#7029)
|
||||
* PROG: Support dynpros with splitter control (#7035, #7038)
|
||||
* Fix `CX_SY_ZERODIVIDE` dump in progress bar (#7036)
|
||||
* JOBD: Clear `changedby` field (#7039)
|
||||
* SFPF: Add syntax highlighting for `xdp` files (#7040)
|
||||
* SFPF: Fix check if object exists (#7041)
|
||||
* Add package check when creating repository (#7037)
|
||||
* FUGS: serialization (#7045)
|
||||
* Enable CDS types (#7048)
|
||||
* Don't discard includes of nonexistent FUGR (#7053)
|
||||
* Added enhanced method resolution for background exit (#7059)
|
||||
* TABU: Display transport requests (#7063)
|
||||
* Show diffs in case of trailing spaces (#7062)
|
||||
- remove 200% icon scaling (#7003)
|
||||
|
||||
2024-07-01 v1.129.0
|
||||
-------------------
|
||||
|
||||
|
|
|
@ -345,6 +345,9 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
|||
DATA lt_table_keys TYPE STANDARD TABLE OF e071k.
|
||||
DATA lv_with_dialog TYPE abap_bool.
|
||||
|
||||
FIELD-SYMBOLS <ls_table> LIKE LINE OF lt_tables.
|
||||
FIELD-SYMBOLS <ls_table_key> LIKE LINE OF lt_table_keys.
|
||||
|
||||
cl_table_utilities_brf=>create_transport_entries(
|
||||
EXPORTING
|
||||
it_table_ins = it_table_ins
|
||||
|
@ -360,6 +363,7 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
|||
CALL FUNCTION 'TR_OBJECTS_CHECK'
|
||||
TABLES
|
||||
wt_ko200 = lt_tables
|
||||
wt_e071k = lt_table_keys
|
||||
EXCEPTIONS
|
||||
cancel_edit_other_error = 1
|
||||
show_only_other_error = 2
|
||||
|
@ -372,15 +376,24 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
|||
lv_with_dialog = abap_true.
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'TRINT_OBJECTS_CHECK_AND_INSERT'
|
||||
READ TABLE lt_tables ASSIGNING <ls_table> INDEX 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
LOOP AT lt_table_keys ASSIGNING <ls_table_key>.
|
||||
<ls_table_key>-objfunc = <ls_table>-objfunc.
|
||||
ENDLOOP.
|
||||
|
||||
CALL FUNCTION 'TR_OBJECT_INSERT'
|
||||
EXPORTING
|
||||
iv_order = iv_transport
|
||||
iv_with_dialog = lv_with_dialog
|
||||
CHANGING
|
||||
ct_ko200 = lt_tables
|
||||
ct_e071k = lt_table_keys
|
||||
wi_order = iv_transport
|
||||
wi_ko200 = <ls_table>
|
||||
iv_no_show_option = abap_true
|
||||
TABLES
|
||||
wt_e071k = lt_table_keys
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
cancel_edit_other_error = 1
|
||||
show_only_other_error = 2
|
||||
OTHERS = 3.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
|
|
@ -60,9 +60,9 @@ INTERFACE zif_abapgit_cts_api
|
|||
METHODS create_transport_entries
|
||||
IMPORTING
|
||||
!iv_transport TYPE trkorr
|
||||
!it_table_ins TYPE ANY TABLE
|
||||
!it_table_upd TYPE ANY TABLE
|
||||
!it_table_del TYPE ANY TABLE
|
||||
!it_table_ins TYPE ANY TABLE OPTIONAL
|
||||
!it_table_upd TYPE ANY TABLE OPTIONAL
|
||||
!it_table_del TYPE ANY TABLE OPTIONAL
|
||||
!iv_tabname TYPE tabname
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
|
|
@ -77,10 +77,12 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
|
|||
PRIVATE SECTION.
|
||||
" Cloud package hardcoded in cl_abap_language_version
|
||||
CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'.
|
||||
CONSTANTS c_language_cfg TYPE seoclsname VALUE 'CL_ABAP_LANGUAGE_VERSION_CFG'.
|
||||
|
||||
DATA:
|
||||
mt_versions TYPE string_table,
|
||||
mv_has_cloud_package TYPE abap_bool,
|
||||
mv_has_language_cfg TYPE abap_bool,
|
||||
mo_environment TYPE REF TO lcl_environment,
|
||||
mi_persistency TYPE REF TO zif_abapgit_persist_settings,
|
||||
mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit,
|
||||
|
@ -364,9 +366,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
" Assume on-prem (no cloud)
|
||||
set_environment( abap_false ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
IF mv_has_language_cfg = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
ENDIF.
|
||||
|
||||
IF mv_has_cloud_package = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -381,9 +385,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
" Assume cloud platform
|
||||
set_environment( abap_true ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
IF mv_has_language_cfg = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
ENDIF.
|
||||
|
||||
IF mv_has_cloud_package = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -401,6 +407,19 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
METHOD is_import_allowed.
|
||||
|
||||
DATA lv_version TYPE string.
|
||||
DATA ls_clskey TYPE seoclskey.
|
||||
|
||||
ls_clskey-clsname = c_language_cfg.
|
||||
|
||||
" Tests using ABAP language version "standard" only work if the required
|
||||
" SAP class is available. In older releases, all packages will have
|
||||
" ABAP language version "undefined" and are handled like a new package
|
||||
CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'
|
||||
EXPORTING
|
||||
clskey = ls_clskey
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
mv_has_language_cfg = boolc( sy-subrc = 0 ).
|
||||
|
||||
LOOP AT mt_versions INTO lv_version.
|
||||
|
||||
|
|
|
@ -37,10 +37,7 @@ CLASS ltcl_field_rules DEFINITION FOR TESTING RISK LEVEL HARMLESS
|
|||
RETURNING
|
||||
VALUE(ri_rules) TYPE REF TO zif_abapgit_field_rules,
|
||||
apply_clear_logic FOR TESTING,
|
||||
apply_fill_logic FOR TESTING,
|
||||
get_utc_timestamp
|
||||
RETURNING
|
||||
VALUE(rv_timestamp) TYPE timestamp.
|
||||
apply_fill_logic FOR TESTING.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -88,7 +85,7 @@ CLASS ltcl_field_rules IMPLEMENTATION.
|
|||
|
||||
METHOD fill3.
|
||||
DATA lv_timestamp TYPE timestamp.
|
||||
lv_timestamp = get_utc_timestamp( ).
|
||||
GET TIME STAMP FIELD lv_timestamp.
|
||||
fill_value(
|
||||
iv_rule = zif_abapgit_field_rules=>c_fill_rule-timestamp
|
||||
iv_len = 10
|
||||
|
@ -205,6 +202,8 @@ CLASS ltcl_field_rules IMPLEMENTATION.
|
|||
lv_ts TYPE string,
|
||||
lv_timestamp TYPE timestamp.
|
||||
|
||||
GET TIME STAMP FIELD lv_timestamp.
|
||||
|
||||
ls_act-key = 1.
|
||||
INSERT ls_act INTO TABLE lt_act.
|
||||
ls_act-key = 2.
|
||||
|
@ -241,17 +240,16 @@ CLASS ltcl_field_rules IMPLEMENTATION.
|
|||
act = ls_act-time(4)
|
||||
exp = sy-uzeit(4) ). " avoid comparing seconds
|
||||
|
||||
lv_timestamp = get_utc_timestamp( ).
|
||||
lv_ts = ls_act-ts.
|
||||
lv_ts = lv_ts(12).
|
||||
lv_ts = lv_ts(10).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_ts
|
||||
exp = |{ lv_timestamp DIV 100 }| ). " avoid comparing second
|
||||
exp = |{ lv_timestamp DIV 10000 }| ). " avoid comparing second
|
||||
lv_ts = ls_act-tl.
|
||||
lv_ts = lv_ts(12).
|
||||
lv_ts = lv_ts(10).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_ts
|
||||
exp = |{ lv_timestamp DIV 100 }| ). " avoid comparing seconds
|
||||
exp = |{ lv_timestamp DIV 10000 }| ). " avoid comparing seconds
|
||||
|
||||
READ TABLE lt_act INTO ls_act INDEX 2.
|
||||
|
||||
|
@ -269,21 +267,4 @@ CLASS ltcl_field_rules IMPLEMENTATION.
|
|||
exp = sy-uzeit(4) ). " avoid comparing seconds
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_utc_timestamp.
|
||||
DATA lv_syst_timezone TYPE timezone.
|
||||
CALL FUNCTION 'GET_SYSTEM_TIMEZONE'
|
||||
IMPORTING
|
||||
timezone = lv_syst_timezone
|
||||
EXCEPTIONS
|
||||
customizing_missing = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( 'Could not get system timezone' ).
|
||||
ENDIF.
|
||||
|
||||
CONVERT DATE sy-datum TIME sy-uzeit
|
||||
INTO TIME STAMP rv_timestamp
|
||||
TIME ZONE lv_syst_timezone.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -77,19 +77,21 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
ELSEIF iv_longtext_id IS NOT INITIAL.
|
||||
IF iv_main_lang_only = abap_true.
|
||||
SELECT * FROM dokil
|
||||
INTO TABLE lt_dokil
|
||||
WHERE id = iv_longtext_id
|
||||
AND object LIKE lv_object ESCAPE '#'
|
||||
AND masterlang = abap_true
|
||||
ORDER BY PRIMARY KEY.
|
||||
ELSE.
|
||||
SELECT * FROM dokil
|
||||
INTO TABLE lt_dokil
|
||||
WHERE id = iv_longtext_id
|
||||
AND object LIKE lv_object ESCAPE '#'
|
||||
ORDER BY PRIMARY KEY.
|
||||
IF lv_object NA '#'.
|
||||
IF iv_main_lang_only = abap_true.
|
||||
SELECT * FROM dokil
|
||||
INTO TABLE lt_dokil
|
||||
WHERE id = iv_longtext_id
|
||||
AND object LIKE lv_object ESCAPE '#'
|
||||
AND masterlang = abap_true
|
||||
ORDER BY PRIMARY KEY.
|
||||
ELSE.
|
||||
SELECT * FROM dokil
|
||||
INTO TABLE lt_dokil
|
||||
WHERE id = iv_longtext_id
|
||||
AND object LIKE lv_object ESCAPE '#'
|
||||
ORDER BY PRIMARY KEY.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
|
||||
|
|
|
@ -76,6 +76,8 @@ CLASS zcl_abapgit_object_shi8 IMPLEMENTATION.
|
|||
ls_node_data-tree_id = ls_assignment_data-tree_id.
|
||||
ls_node_data-node_id = ls_assignment_data-node_id.
|
||||
|
||||
tadir_insert( iv_package ).
|
||||
|
||||
CALL FUNCTION 'STREE_SFW_ASSIGNMENT_SAVE'
|
||||
EXPORTING
|
||||
assignment_id = ls_assignment_data-sfw_ass_id
|
||||
|
|
|
@ -7,6 +7,7 @@ CLASS zcl_abapgit_object_ssfo DEFINITION
|
|||
PUBLIC SECTION.
|
||||
|
||||
INTERFACES zif_abapgit_object.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
@ -14,7 +15,7 @@ CLASS zcl_abapgit_object_ssfo DEFINITION
|
|||
ty_string_range TYPE RANGE OF string .
|
||||
|
||||
CLASS-DATA gt_range_node_codes TYPE ty_string_range .
|
||||
CONSTANTS c_attrib_abapgit_leadig_spaces TYPE string VALUE 'abapgit-leadig-spaces' ##NO_TEXT.
|
||||
CONSTANTS c_prefix TYPE string VALUE 'File:'.
|
||||
|
||||
METHODS fix_ids
|
||||
IMPORTING
|
||||
|
@ -24,25 +25,26 @@ CLASS zcl_abapgit_object_ssfo DEFINITION
|
|||
!ii_xml_doc TYPE REF TO if_ixml_document
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS handle_attrib_leading_spaces
|
||||
IMPORTING
|
||||
!iv_name TYPE string
|
||||
!ii_node TYPE REF TO if_ixml_node
|
||||
CHANGING
|
||||
!cv_within_code_section TYPE abap_bool .
|
||||
METHODS get_range_node_codes
|
||||
RETURNING
|
||||
VALUE(rt_range_node_codes) TYPE ty_string_range .
|
||||
METHODS code_item_section_handling
|
||||
METHODS deserialize_sources
|
||||
IMPORTING
|
||||
!iv_name TYPE string
|
||||
!ii_node TYPE REF TO if_ixml_node
|
||||
EXPORTING
|
||||
!ei_code_item_element TYPE REF TO if_ixml_element
|
||||
CHANGING
|
||||
!cv_within_code_section TYPE abap_bool
|
||||
!ii_node TYPE REF TO if_ixml_node
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
zcx_abapgit_exception.
|
||||
METHODS serialize_sources
|
||||
IMPORTING
|
||||
!ii_node TYPE REF TO if_ixml_node
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS get_hash_for_path
|
||||
IMPORTING
|
||||
!ii_node TYPE REF TO if_ixml_node
|
||||
RETURNING
|
||||
VALUE(rv_hash) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -50,29 +52,36 @@ ENDCLASS.
|
|||
CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD code_item_section_handling.
|
||||
CONSTANTS: lc_node_item TYPE string VALUE 'item'.
|
||||
CONSTANTS: lc_node_text TYPE string VALUE '#text'.
|
||||
METHOD deserialize_sources.
|
||||
|
||||
IF iv_name IN get_range_node_codes( ).
|
||||
cv_within_code_section = abap_true.
|
||||
DATA:
|
||||
lv_extra TYPE string,
|
||||
ls_abap TYPE abaptxt255,
|
||||
lt_abap TYPE abaptxt255_tab,
|
||||
li_node TYPE REF TO if_ixml_node,
|
||||
li_ixml TYPE REF TO if_ixml,
|
||||
li_xml_doc TYPE REF TO if_ixml_document.
|
||||
|
||||
li_ixml = cl_ixml=>create( ).
|
||||
li_xml_doc = li_ixml->create_document( ).
|
||||
|
||||
" Old format
|
||||
lv_extra = ii_node->get_value( ).
|
||||
IF lv_extra NS c_prefix.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF cv_within_code_section = abap_true.
|
||||
IF iv_name = lc_node_item.
|
||||
TRY.
|
||||
ei_code_item_element ?= ii_node.
|
||||
RETURN.
|
||||
CATCH cx_sy_move_cast_error ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
" New format
|
||||
lv_extra = lv_extra+5(*).
|
||||
|
||||
ELSEIF iv_name NOT IN get_range_node_codes( ) AND
|
||||
iv_name <> lc_node_text.
|
||||
cv_within_code_section = abap_false.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
lt_abap = mo_files->read_abap( iv_extra = lv_extra ).
|
||||
|
||||
RAISE EXCEPTION TYPE zcx_abapgit_exception.
|
||||
ii_node->set_value( '' ).
|
||||
LOOP AT lt_abap INTO ls_abap.
|
||||
li_node = li_xml_doc->create_element( 'item' ).
|
||||
li_node->set_value( |{ ls_abap-line }| ).
|
||||
ii_node->append_child( li_node ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -150,6 +159,35 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_hash_for_path.
|
||||
|
||||
DATA:
|
||||
lv_name TYPE string,
|
||||
lv_path TYPE string,
|
||||
li_node TYPE REF TO if_ixml_node,
|
||||
li_name TYPE REF TO if_ixml_node,
|
||||
li_iname TYPE REF TO if_ixml_node.
|
||||
|
||||
li_node = ii_node->get_parent( ).
|
||||
WHILE NOT li_node IS INITIAL.
|
||||
lv_name = li_node->get_name( ).
|
||||
IF ( lv_name = 'CODE' OR lv_name = 'WINDOW' OR lv_name = 'PAGE' )
|
||||
AND li_node->get_namespace_prefix( ) IS NOT INITIAL.
|
||||
li_name = li_node->get_first_child( ).
|
||||
li_iname = li_node->get_first_child( ).
|
||||
lv_name = lv_name && ':' && li_iname->get_value( ).
|
||||
ENDIF.
|
||||
lv_path = lv_name && '/' && lv_path.
|
||||
li_node = li_node->get_parent( ).
|
||||
ENDWHILE.
|
||||
|
||||
rv_hash = substring(
|
||||
val = zcl_abapgit_hash=>sha1_string( lv_path )
|
||||
len = 8 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_range_node_codes.
|
||||
|
||||
DATA: ls_range_node_code TYPE LINE OF ty_string_range.
|
||||
|
@ -172,28 +210,36 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD handle_attrib_leading_spaces.
|
||||
METHOD serialize_sources.
|
||||
|
||||
DATA li_element TYPE REF TO if_ixml_element.
|
||||
DATA lv_leading_spaces TYPE string.
|
||||
DATA lv_coding_line TYPE string.
|
||||
DATA:
|
||||
lv_extra TYPE string,
|
||||
ls_abap TYPE abaptxt255,
|
||||
lt_abap TYPE abaptxt255_tab,
|
||||
li_node TYPE REF TO if_ixml_node,
|
||||
li_iterator TYPE REF TO if_ixml_node_iterator.
|
||||
|
||||
TRY.
|
||||
code_item_section_handling( EXPORTING iv_name = iv_name
|
||||
ii_node = ii_node
|
||||
IMPORTING ei_code_item_element = li_element
|
||||
CHANGING cv_within_code_section = cv_within_code_section ).
|
||||
" Store code as separate ABAP files instead of XML
|
||||
lv_extra = to_lower( ii_node->get_name( ) ).
|
||||
li_iterator = ii_node->get_children( )->create_iterator( ).
|
||||
li_node = li_iterator->get_next( ).
|
||||
WHILE NOT li_node IS INITIAL.
|
||||
ls_abap-line = li_node->get_value( ).
|
||||
INSERT ls_abap INTO TABLE lt_abap.
|
||||
|
||||
* for downwards compatibility, this code can be removed sometime in the future
|
||||
lv_leading_spaces = li_element->get_attribute_ns( c_attrib_abapgit_leadig_spaces ).
|
||||
li_node = li_iterator->get_next( ).
|
||||
ENDWHILE.
|
||||
|
||||
lv_coding_line = li_element->get_value( ).
|
||||
IF strlen( lv_coding_line ) >= 1 AND lv_coding_line(1) <> | |.
|
||||
SHIFT lv_coding_line RIGHT BY lv_leading_spaces PLACES.
|
||||
li_element->set_value( lv_coding_line ).
|
||||
ENDIF.
|
||||
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
" For CODE sections, get full path and hash it
|
||||
IF lv_extra = 'code'.
|
||||
lv_extra = get_hash_for_path( ii_node ).
|
||||
ENDIF.
|
||||
|
||||
mo_files->add_abap(
|
||||
iv_extra = lv_extra
|
||||
it_abap = lt_abap ).
|
||||
|
||||
ii_node->set_value( c_prefix && lv_extra ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -303,15 +349,15 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
|
|||
METHOD zif_abapgit_object~deserialize.
|
||||
* see function module FB_UPLOAD_FORM
|
||||
|
||||
DATA: li_node TYPE REF TO if_ixml_node,
|
||||
lv_formname TYPE tdsfname,
|
||||
lv_name TYPE string,
|
||||
li_iterator TYPE REF TO if_ixml_node_iterator,
|
||||
lo_sf TYPE REF TO cl_ssf_fb_smart_form,
|
||||
lo_res TYPE REF TO cl_ssf_fb_smart_form,
|
||||
lx_error TYPE REF TO cx_ssf_fb,
|
||||
lv_text TYPE string,
|
||||
lv_within_code_section TYPE abap_bool.
|
||||
DATA:
|
||||
li_node TYPE REF TO if_ixml_node,
|
||||
lv_formname TYPE tdsfname,
|
||||
lv_name TYPE string,
|
||||
li_iterator TYPE REF TO if_ixml_node_iterator,
|
||||
lo_sf TYPE REF TO cl_ssf_fb_smart_form,
|
||||
lo_res TYPE REF TO cl_ssf_fb_smart_form,
|
||||
lx_error TYPE REF TO cx_ssf_fb,
|
||||
lv_text TYPE string.
|
||||
|
||||
CREATE OBJECT lo_sf.
|
||||
|
||||
|
@ -330,9 +376,9 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
|
|||
|
||||
ENDCASE.
|
||||
|
||||
handle_attrib_leading_spaces( EXPORTING iv_name = lv_name
|
||||
ii_node = li_node
|
||||
CHANGING cv_within_code_section = lv_within_code_section ).
|
||||
IF lv_name IN get_range_node_codes( ) AND li_node->get_namespace_prefix( ) IS INITIAL.
|
||||
deserialize_sources( li_node ).
|
||||
ENDIF.
|
||||
|
||||
li_node = li_iterator->get_next( ).
|
||||
ENDWHILE.
|
||||
|
@ -530,6 +576,11 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
|
|||
OR lv_name = 'LASTUSER'.
|
||||
li_node->set_value( 'DUMMY' ).
|
||||
ENDIF.
|
||||
|
||||
IF lv_name IN get_range_node_codes( ) AND li_node->get_namespace_prefix( ) IS INITIAL.
|
||||
serialize_sources( li_node ).
|
||||
ENDIF.
|
||||
|
||||
li_node = li_iterator->get_next( ).
|
||||
ENDWHILE.
|
||||
|
||||
|
|
|
@ -5,18 +5,41 @@ CLASS zcl_abapgit_object_view DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
|||
PROTECTED SECTION.
|
||||
"! get additional data like table authorization group
|
||||
"! @parameter iv_name | name of the view
|
||||
METHODS read_extras IMPORTING iv_name TYPE ddobjname
|
||||
RETURNING VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras.
|
||||
METHODS read_extras
|
||||
IMPORTING
|
||||
iv_name TYPE ddobjname
|
||||
RETURNING
|
||||
VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras.
|
||||
|
||||
"! Update additional data
|
||||
"! @parameter iv_name | name of the table
|
||||
"! @parameter iv_transport | transport request
|
||||
"! @parameter is_tabl_extras | additional view data
|
||||
METHODS update_extras IMPORTING iv_name TYPE ddobjname
|
||||
is_tabl_extras TYPE zif_abapgit_object_tabl=>ty_tabl_extras.
|
||||
METHODS update_extras
|
||||
IMPORTING
|
||||
iv_name TYPE ddobjname
|
||||
iv_transport TYPE trkorr
|
||||
is_tabl_extras TYPE zif_abapgit_object_tabl=>ty_tabl_extras
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
"! Delete additional data
|
||||
"! @parameter iv_name | name of the view
|
||||
METHODS delete_extras IMPORTING iv_name TYPE ddobjname.
|
||||
"! @parameter iv_transport | transport request
|
||||
METHODS delete_extras
|
||||
IMPORTING
|
||||
iv_name TYPE ddobjname
|
||||
iv_transport TYPE trkorr
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS insert_transport
|
||||
IMPORTING
|
||||
iv_name TYPE ddobjname
|
||||
iv_transport TYPE trkorr
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: ty_dd26v TYPE STANDARD TABLE OF dd26v
|
||||
WITH NON-UNIQUE DEFAULT KEY,
|
||||
|
@ -66,13 +89,17 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_object_view IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD delete_extras.
|
||||
|
||||
DELETE FROM tddat WHERE tabname = iv_name.
|
||||
|
||||
insert_transport(
|
||||
iv_name = iv_name
|
||||
iv_transport = iv_transport ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -130,6 +157,27 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD insert_transport.
|
||||
|
||||
DATA:
|
||||
ls_key TYPE tddat,
|
||||
lt_keys TYPE TABLE OF tddat.
|
||||
|
||||
IF iv_transport IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ls_key-tabname = iv_name.
|
||||
INSERT ls_key INTO TABLE lt_keys.
|
||||
|
||||
zcl_abapgit_factory=>get_cts_api( )->create_transport_entries(
|
||||
iv_transport = iv_transport
|
||||
it_table_ins = lt_keys
|
||||
iv_tabname = 'TDDAT' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD read_extras.
|
||||
|
||||
SELECT SINGLE * FROM tddat INTO rs_tabl_extras-tddat WHERE tabname = iv_name.
|
||||
|
@ -238,9 +286,15 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
|
|||
METHOD update_extras.
|
||||
|
||||
IF is_tabl_extras-tddat IS INITIAL.
|
||||
delete_extras( iv_name ).
|
||||
delete_extras(
|
||||
iv_name = iv_name
|
||||
iv_transport = iv_transport ).
|
||||
ELSE.
|
||||
MODIFY tddat FROM is_tabl_extras-tddat.
|
||||
|
||||
insert_transport(
|
||||
iv_name = iv_name
|
||||
iv_transport = iv_transport ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -269,7 +323,10 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
|
|||
|
||||
lv_objname = ms_item-obj_name.
|
||||
delete_ddic( 'V' ).
|
||||
delete_extras( lv_objname ).
|
||||
|
||||
delete_extras(
|
||||
iv_name = lv_objname
|
||||
iv_transport = iv_transport ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -350,6 +407,7 @@ CLASS ZCL_ABAPGIT_OBJECT_VIEW IMPLEMENTATION.
|
|||
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 ).
|
||||
|
|
|
@ -59,6 +59,12 @@ CLASS zcl_abapgit_object_wdyn DEFINITION
|
|||
IMPORTING is_view TYPE wdy_md_view_meta_data
|
||||
RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object
|
||||
RAISING zcx_abapgit_exception,
|
||||
deserialize_sources
|
||||
IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
|
||||
RAISING zcx_abapgit_exception,
|
||||
serialize_sources
|
||||
IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_output
|
||||
RAISING zcx_abapgit_exception,
|
||||
add_fm_param_exporting
|
||||
IMPORTING iv_name TYPE string
|
||||
ig_value TYPE any
|
||||
|
@ -79,7 +85,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_OBJECT_WDYN IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_object_wdyn IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add_fm_exception.
|
||||
|
@ -382,6 +388,61 @@ CLASS ZCL_ABAPGIT_OBJECT_WDYN IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD deserialize_sources.
|
||||
|
||||
DATA:
|
||||
lv_extra TYPE string,
|
||||
lt_extra TYPE string_table,
|
||||
ls_abap TYPE abaptxt255,
|
||||
lt_abap TYPE abaptxt255_tab,
|
||||
lv_line TYPE wdy_ctlr_compo_source_vrs-line_number,
|
||||
lv_cmpname TYPE wdy_ctlr_compo_source_vrs-cmpname,
|
||||
ls_sources LIKE LINE OF mt_sources.
|
||||
|
||||
" Old format
|
||||
ii_xml->read( EXPORTING iv_name = 'SOURCES'
|
||||
CHANGING cg_data = mt_sources ).
|
||||
|
||||
IF mt_sources IS NOT INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
" New format
|
||||
ii_xml->read( EXPORTING iv_name = 'FILES'
|
||||
CHANGING cg_data = lt_extra ).
|
||||
|
||||
LOOP AT lt_extra INTO lv_extra.
|
||||
lv_line = 0.
|
||||
lt_abap = mo_files->read_abap( iv_extra = lv_extra ).
|
||||
LOOP AT lt_abap INTO ls_abap.
|
||||
" Start of method
|
||||
FIND REGEX '\s*method\s+(.*)\s*\.' IN ls_abap-line IGNORING CASE SUBMATCHES lv_cmpname.
|
||||
IF sy-subrc = 0.
|
||||
lv_line = 1.
|
||||
ENDIF.
|
||||
|
||||
IF lv_cmpname IS NOT INITIAL AND lv_line > 0.
|
||||
CLEAR ls_sources.
|
||||
ls_sources-component_name = ms_item-obj_name.
|
||||
ls_sources-controller_name = to_upper( lv_extra ).
|
||||
ls_sources-cmpname = to_upper( lv_cmpname ).
|
||||
ls_sources-line_number = lv_line.
|
||||
ls_sources-source_line = ls_abap-line.
|
||||
INSERT ls_sources INTO TABLE mt_sources.
|
||||
lv_line = lv_line + 1.
|
||||
ENDIF.
|
||||
|
||||
" End of method
|
||||
FIND REGEX '\s*endmethod\s*\.' IN ls_abap-line IGNORING CASE.
|
||||
IF sy-subrc = 0.
|
||||
lv_line = 0.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_limu_objects.
|
||||
|
||||
DATA: lv_name TYPE wdy_component_name.
|
||||
|
@ -786,6 +847,47 @@ CLASS ZCL_ABAPGIT_OBJECT_WDYN IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD serialize_sources.
|
||||
|
||||
DATA:
|
||||
lv_extra TYPE string,
|
||||
lt_extra TYPE string_table,
|
||||
ls_abap TYPE abaptxt255,
|
||||
lt_abap TYPE abaptxt255_tab.
|
||||
|
||||
FIELD-SYMBOLS <ls_sources> LIKE LINE OF mt_sources.
|
||||
|
||||
" Store code as separate ABAP files instead of XML (assumes sorted data, see "read")
|
||||
LOOP AT mt_sources ASSIGNING <ls_sources>.
|
||||
AT NEW controller_name.
|
||||
CLEAR lt_abap.
|
||||
lv_extra = to_lower( <ls_sources>-controller_name ).
|
||||
ENDAT.
|
||||
|
||||
ls_abap-line = <ls_sources>-source_line.
|
||||
INSERT ls_abap INTO TABLE lt_abap.
|
||||
|
||||
AT END OF cmpname.
|
||||
CLEAR ls_abap.
|
||||
INSERT ls_abap INTO TABLE lt_abap.
|
||||
ENDAT.
|
||||
AT END OF controller_name.
|
||||
IF lt_abap IS NOT INITIAL.
|
||||
mo_files->add_abap(
|
||||
iv_extra = lv_extra
|
||||
it_abap = lt_abap ).
|
||||
INSERT lv_extra INTO TABLE lt_extra.
|
||||
ENDIF.
|
||||
ENDAT.
|
||||
ENDLOOP.
|
||||
|
||||
ii_xml->add(
|
||||
iv_name = 'FILES'
|
||||
ig_data = lt_extra ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_object~changed_by.
|
||||
SELECT SINGLE changedby FROM wdy_component INTO rv_user
|
||||
WHERE component_name = ms_item-obj_name AND version = 'A'.
|
||||
|
@ -831,8 +933,8 @@ CLASS ZCL_ABAPGIT_OBJECT_WDYN IMPLEMENTATION.
|
|||
CHANGING cg_data = ls_component ).
|
||||
io_xml->read( EXPORTING iv_name = 'COMPONENTS'
|
||||
CHANGING cg_data = mt_components ).
|
||||
io_xml->read( EXPORTING iv_name = 'SOURCES'
|
||||
CHANGING cg_data = mt_sources ).
|
||||
|
||||
deserialize_sources( io_xml ).
|
||||
|
||||
ls_component-comp_metadata-definition-author = sy-uname.
|
||||
ls_component-comp_metadata-definition-createdon = sy-datum.
|
||||
|
@ -944,8 +1046,8 @@ CLASS ZCL_ABAPGIT_OBJECT_WDYN IMPLEMENTATION.
|
|||
ig_data = ls_component ).
|
||||
io_xml->add( ig_data = mt_components
|
||||
iv_name = 'COMPONENTS' ).
|
||||
io_xml->add( ig_data = mt_sources
|
||||
iv_name = 'SOURCES' ).
|
||||
|
||||
serialize_sources( io_xml ).
|
||||
|
||||
READ TABLE ls_component-comp_metadata-descriptions INTO ls_description INDEX 1.
|
||||
IF sy-subrc = 0.
|
||||
|
|
|
@ -131,6 +131,8 @@ CLASS zcl_abapgit_objects_program DEFINITION
|
|||
inactive TYPE r3state VALUE 'I',
|
||||
END OF c_state.
|
||||
|
||||
CONSTANTS c_native_dynpro TYPE c LENGTH 2 VALUE 'IN'.
|
||||
|
||||
METHODS:
|
||||
uncondense_flow
|
||||
IMPORTING it_flow TYPE swydyflow
|
||||
|
@ -359,6 +361,9 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
|
|||
it_flow = ls_dynpro-flow_logic
|
||||
it_spaces = ls_dynpro-spaces ).
|
||||
|
||||
IF ls_dynpro-flow_logic IS INITIAL.
|
||||
ls_dynpro-flow_logic = mo_files->read_abap( iv_extra = 'screen_' && ls_dynpro-header-screen ).
|
||||
ENDIF.
|
||||
|
||||
LOOP AT ls_dynpro-fields ASSIGNING <ls_field>.
|
||||
* if the DDIC element has a PARAMETER_ID and the flag "from_dict" is active
|
||||
|
@ -390,7 +395,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
|
|||
|
||||
ENDLOOP.
|
||||
|
||||
IF ls_dynpro-header-type = 'N' AND ls_dynpro-nat_header IS NOT INITIAL.
|
||||
IF ls_dynpro-header-type CA c_native_dynpro AND ls_dynpro-nat_header IS NOT INITIAL.
|
||||
DELETE FROM d021t WHERE prog = ls_dynpro-header-program AND dynr = ls_dynpro-header-screen ##SUBRC_OK.
|
||||
INSERT d021t FROM TABLE ls_dynpro-nat_texts ##SUBRC_OK.
|
||||
|
||||
|
@ -913,11 +918,15 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
|
|||
ENDLOOP.
|
||||
|
||||
APPEND INITIAL LINE TO rt_dynpro ASSIGNING <ls_dynpro>.
|
||||
<ls_dynpro>-header = ls_header.
|
||||
<ls_dynpro>-flow_logic = lt_flow_logic.
|
||||
<ls_dynpro>-header = ls_header.
|
||||
|
||||
" Store flow logic as separate ABAP files instead of XML
|
||||
mo_files->add_abap(
|
||||
iv_extra = 'screen_' && ls_header-screen
|
||||
it_abap = lt_flow_logic ).
|
||||
|
||||
READ TABLE lt_fieldlist_int TRANSPORTING NO FIELDS WITH KEY fill = 'X'.
|
||||
IF ls_header-type = 'N' AND sy-subrc = 0.
|
||||
IF ls_header-type CA c_native_dynpro AND sy-subrc = 0.
|
||||
" In particular for dynpros with splitter
|
||||
<ls_dynpro>-nat_header = <ls_d020s>.
|
||||
CLEAR: <ls_dynpro>-nat_header-dgen, <ls_dynpro>-nat_header-tgen.
|
||||
|
|
|
@ -739,6 +739,10 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION.
|
|||
fill_language_mapping( im_sap1 = 'C0C1'
|
||||
im_sap2 = 'WA'
|
||||
im_bcp47 = 'wa' ).
|
||||
|
||||
fill_language_mapping( im_sap1 = 'A'
|
||||
im_sap2 = 'AR'
|
||||
im_bcp47 = 'ar-SA' ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -331,12 +331,15 @@ CLASS ltcl_bcp47_to_sap1 IMPLEMENTATION.
|
|||
DATA lv_result TYPE sy-langu.
|
||||
lv_result = zcl_abapgit_convert=>language_bcp47_to_sap1( im_from ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = im_to
|
||||
act = lv_result ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = im_to
|
||||
act = lv_result
|
||||
msg = |Converting "{ im_from }" should result in "{ im_to }"| ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assert_bcp47_to_sap1_fail.
|
||||
DATA lv_result TYPE string.
|
||||
DATA lv_act TYPE sy-subrc.
|
||||
|
||||
zcl_abapgit_convert=>language_bcp47_to_sap1(
|
||||
EXPORTING
|
||||
|
@ -345,10 +348,15 @@ CLASS ltcl_bcp47_to_sap1 IMPLEMENTATION.
|
|||
re_lang_sap1 = lv_result
|
||||
EXCEPTIONS
|
||||
no_assignment = 1
|
||||
OTHERS = 2 ).
|
||||
OTHERS = 2 ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1
|
||||
act = sy-subrc ).
|
||||
" Assert itself might change sy-subrc (it does in 702!)
|
||||
lv_act = sy-subrc.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lv_act
|
||||
msg = |Converting "{ im_from }" should fail| ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD english.
|
||||
|
@ -466,14 +474,18 @@ CLASS ltcl_sap1_to_bcp47 IMPLEMENTATION.
|
|||
|
||||
METHOD assert_sap1_to_bcp47.
|
||||
DATA lv_result TYPE string.
|
||||
|
||||
lv_result = zcl_abapgit_convert=>language_sap1_to_bcp47( im_from ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = im_to
|
||||
act = lv_result ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = im_to
|
||||
act = lv_result
|
||||
msg = |Converting "{ im_from }" should result in "{ im_to }"| ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD assert_sap1_to_bcp47_fail.
|
||||
DATA lv_result TYPE string.
|
||||
DATA lv_act TYPE sy-subrc.
|
||||
|
||||
zcl_abapgit_convert=>language_sap1_to_bcp47(
|
||||
EXPORTING
|
||||
|
@ -482,10 +494,15 @@ CLASS ltcl_sap1_to_bcp47 IMPLEMENTATION.
|
|||
re_lang_bcp47 = lv_result
|
||||
EXCEPTIONS
|
||||
no_assignment = 1
|
||||
OTHERS = 2 ).
|
||||
OTHERS = 2 ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( exp = 1
|
||||
act = sy-subrc ).
|
||||
" Assert itself might change sy-subrc (it does in 702!)
|
||||
lv_act = sy-subrc.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 1
|
||||
act = lv_act
|
||||
msg = |Converting "{ im_from }" should fail| ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD english.
|
||||
|
|
|
@ -2,6 +2,6 @@ INTERFACE zif_abapgit_version
|
|||
PUBLIC .
|
||||
|
||||
CONSTANTS c_xml_version TYPE string VALUE 'v1.0.0' ##NO_TEXT.
|
||||
CONSTANTS c_abap_version TYPE string VALUE '1.129.0' ##NO_TEXT.
|
||||
CONSTANTS c_abap_version TYPE string VALUE '1.130.0' ##NO_TEXT.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
Loading…
Reference in New Issue
Block a user