SSFO: Fix order of T_CAPTION data (#6609)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-11-03 10:28:31 -04:00 committed by GitHub
parent 241b95af91
commit 98ea342593
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,11 @@
CLASS zcl_abapgit_object_ssfo DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
CLASS zcl_abapgit_object_ssfo DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
PROTECTED SECTION.
PRIVATE SECTION.
@ -14,6 +19,11 @@ CLASS zcl_abapgit_object_ssfo DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
METHODS fix_ids
IMPORTING
!ii_xml_doc TYPE REF TO if_ixml_document .
METHODS sort_texts
IMPORTING
!ii_xml_doc TYPE REF TO if_ixml_document
RAISING
zcx_abapgit_exception .
METHODS handle_attrib_leading_spaces
IMPORTING
!iv_name TYPE string
@ -188,6 +198,73 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
ENDMETHOD.
METHOD sort_texts.
DATA: li_node TYPE REF TO if_ixml_node,
li_item TYPE REF TO if_ixml_node,
li_field TYPE REF TO if_ixml_node,
li_item_list TYPE REF TO if_ixml_node_list,
li_iterator TYPE REF TO if_ixml_node_iterator,
li_items TYPE REF TO if_ixml_node_iterator,
lv_index TYPE i,
ls_item TYPE stxfobjt,
lt_items TYPE STANDARD TABLE OF stxfobjt.
FIELD-SYMBOLS <lv_field> TYPE any.
li_iterator = ii_xml_doc->create_iterator( ).
li_node = li_iterator->get_next( ).
WHILE NOT li_node IS INITIAL.
IF li_node->get_name( ) = 'T_CAPTION'.
" Read all records for T_CAPTION
CLEAR lt_items.
li_item_list = li_node->get_children( ).
li_items = li_item_list->create_iterator( ).
DO.
li_item = li_items->get_next( ).
IF li_item IS INITIAL.
EXIT.
ENDIF.
CLEAR ls_item.
li_field = li_item->get_first_child( ).
WHILE NOT li_field IS INITIAL.
ASSIGN COMPONENT li_field->get_name( ) OF STRUCTURE ls_item TO <lv_field>.
ASSERT sy-subrc = 0.
<lv_field> = li_field->get_value( ).
li_field = li_field->get_next( ).
ENDWHILE.
INSERT ls_item INTO TABLE lt_items.
ENDDO.
SORT lt_items.
" Write all records back after sorting
lv_index = 1.
li_items = li_item_list->create_iterator( ).
DO.
li_item = li_items->get_next( ).
IF li_item IS INITIAL.
EXIT.
ENDIF.
READ TABLE lt_items INTO ls_item INDEX lv_index.
li_field = li_item->get_first_child( ).
WHILE NOT li_field IS INITIAL.
ASSIGN COMPONENT li_field->get_name( ) OF STRUCTURE ls_item TO <lv_field>.
ASSERT sy-subrc = 0.
li_field->set_value( |{ <lv_field> }| ).
li_field = li_field->get_next( ).
ENDWHILE.
lv_index = lv_index + 1.
ENDDO.
ENDIF.
li_node = li_iterator->get_next( ).
ENDWHILE.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE lastuser FROM stxfadm INTO rv_user
@ -455,6 +532,8 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
fix_ids( li_xml_doc ).
sort_texts( li_xml_doc ).
li_element = li_xml_doc->get_root_element( ).
li_element->set_attribute(
name = 'sf'