From 98ea342593b1810dcd14d571ce6ed226f748a469 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:28:31 -0400 Subject: [PATCH] SSFO: Fix order of T_CAPTION data (#6609) Co-authored-by: Lars Hvam --- src/objects/zcl_abapgit_object_ssfo.clas.abap | 81 ++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/src/objects/zcl_abapgit_object_ssfo.clas.abap b/src/objects/zcl_abapgit_object_ssfo.clas.abap index eec2288fc..34e1ae992 100644 --- a/src/objects/zcl_abapgit_object_ssfo.clas.abap +++ b/src/objects/zcl_abapgit_object_ssfo.clas.abap @@ -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 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 . + ASSERT sy-subrc = 0. + = 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 . + ASSERT sy-subrc = 0. + li_field->set_value( |{ }| ). + 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'