50% found this document useful (2 votes)
1K views

ABAP Program To Build Internal Table Into XML File

This document explains how to use the CL_IXML class to convert XML data to a DOM tree and vice versa. It provides sample code that selects sales order data, converts it to XML format, and downloads the XML file to the C:\ drive. The code defines classes to retrieve the sales order data, prepare the XML document, and execute the report.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
50% found this document useful (2 votes)
1K views

ABAP Program To Build Internal Table Into XML File

This document explains how to use the CL_IXML class to convert XML data to a DOM tree and vice versa. It provides sample code that selects sales order data, converts it to XML format, and downloads the XML file to the C:\ drive. The code defines classes to retrieve the sales order data, prepare the XML document, and execute the report.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

*&---------------------------------------------------------------------* *& Report ZZMIL_XML_SAMPLE_001 *& *&---------------------------------------------------------------------* *& Explains *& : Usage of *& Class: CL_IXML *& FM:

SDIXML_DATA_TO_DOM *& FM: SDIXML_DOM_TO_XML *& *& Downloads XML file to "C:\" drive *& *&---------------------------------------------------------------------* REPORT zzmil_xml_sample_001.

*<< Types and Tables Decl. TABLES: vbak, vbap. TYPES: BEGIN OF ty_so_data, vbeln posnr auart matnr matkl pstyv kwmeng END OF ty_so_data, ty_t_so_data *>>

TYPE TYPE TYPE TYPE TYPE TYPE TYPE

vbeln_va, posnr_va, auart, matnr, matkl, pstyv, kwmeng,

TYPE STANDARD TABLE OF ty_so_data.

*<< Selection Screen SELECTION-SCREEN BEGIN OF BLOCK block-0 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_vbeln FOR vbak-vbeln. PARAMETERS: p_auart TYPE auart OBLIGATORY. SELECT-OPTIONS: s_vkorg FOR vbak-vkorg, s_vtweg FOR vbak-vtweg, s_matnr FOR vbap-matnr, s_pstyv FOR vbap-pstyv. SELECTION-SCREEN END OF BLOCK block-0. *>> *----------------------------------------------------------------------* * CLASS cl_so_xml DEFINITION *----------------------------------------------------------------------* CLASS cl_so_xml DEFINITION CREATE PUBLIC. PUBLIC SECTION. METHODS: get_so_data. PRIVATE SECTION. METHODS: prepare_so_xml, download_so_xml. DATA: lt_so_data lt_xml DATA:

TYPE ty_t_so_data, TYPE dcxmllines.

li_size CONSTANTS: cc_tag_root cc_order_items_row ENDCLASS.

TYPE i.

TYPE string VALUE 'entity-data', TYPE string VALUE 'so_item'. "cl_so_xml DEFINITION

*----------------------------------------------------------------------* * CLASS cl_execute DEFINITION *----------------------------------------------------------------------* CLASS cl_execute DEFINITION CREATE PUBLIC. PUBLIC SECTION. CLASS-METHODS: execute_report. ENDCLASS. "cl_execute DEFINITION

*----------------------------------------------------------------------* * CLASS cl_so_xml IMPLEMENTATION *----------------------------------------------------------------------* CLASS cl_so_xml IMPLEMENTATION. *<< Get sales order data METHOD get_so_data. SELECT k~vbeln p~posnr k~auart p~matnr p~matkl p~pstyv p~kwmeng FROM vbak AS k INNER JOIN vbap AS p ON p~vbeln = k~vbeln INTO TABLE lt_so_data WHERE k~vbeln IN s_vbeln AND k~auart EQ p_auart AND k~vkorg IN s_vkorg AND k~vtweg IN s_vtweg. "AND * * p~matnr IN p~pstyv IN IF sy-subrc = 0. DELETE lt_so_data WHERE matnr NOT DELETE lt_so_data WHERE pstyv NOT s_matnr AND s_pstyv. IN s_matnr. IN s_pstyv.

SORT lt_so_data BY vbeln posnr. CALL METHOD me->prepare_so_xml. ELSE. MESSAGE 'No data to fetch' TYPE 'S'. ENDIF. ENDMETHOD. *>> *<< Prepare XML data METHOD prepare_so_xml. TYPES: BEGIN OF ty_so_item_data, "get_so_data

posnr matnr matkl pstyv kwmeng END OF ty_so_item_data. DATA: lr_ixml lr_xmldoc lr_root lr_elem_head lr_elem lr_text lr_elem_item lr_nodes lr_child DATA: li_rval li_cnt li_rc li_idx DATA: lc_so DATA: lx_string DATA: lt_so_item_data DATA: ls_so_item_data ls_control FIELD-SYMBOLS: <fs_so_data> * Create the xml document CLASS cl_ixml DEFINITION LOAD. lr_ixml = cl_ixml=>create( ). CHECK NOT lr_ixml IS INITIAL.

TYPE TYPE TYPE TYPE TYPE

posnr_va, matnr, matkl, pstyv, kwmeng,

TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE

REF REF REF REF REF REF REF REF REF

TO TO TO TO TO TO TO TO TO

if_ixml, if_ixml_document, if_ixml_element, if_ixml_node, if_ixml_node, if_ixml_text, if_ixml_element, if_ixml_node_list, if_ixml_node.

sy-subrc, sy-subrc, sy-subrc, sy-subrc.

TYPE string. TYPE xstring. TYPE STANDARD TABLE OF ty_so_item_data. TYPE ty_so_item_data, TYPE dcxmlsercl. TYPE ty_so_data.

lr_xmldoc = lr_ixml->create_document( ). CHECK NOT lr_xmldoc IS INITIAL. * Create the root element lr_root = lr_xmldoc->create_simple_element( name = cc_tag_root parent = lr_xmldoc ). LOOP AT lt_so_data ASSIGNING <fs_so_data>. AT NEW vbeln. REFRESH lt_so_item_data. Create element for every new sales order lr_elem_head = lr_xmldoc->create_simple_element( name = 'Sales_Order' parent = lr_root ). MOVE <fs_so_data>-vbeln TO lc_so. lr_elem = lr_xmldoc->create_element( name = 'VBELN' ). lr_text = lr_xmldoc->create_text( lc_so ). li_rval = lr_elem->append_child( new_child = lr_text ). li_rval = lr_elem_head->append_child( new_child = lr_elem ).

MOVE <fs_so_data>-auart TO lc_so. lr_elem = lr_xmldoc->create_element( name = 'AUART' ). lr_text = lr_xmldoc->create_text( lc_so ). li_rval = lr_elem->append_child( new_child = lr_text ). li_rval = lr_elem_head->append_child( new_child = lr_elem ). ENDAT. MOVE-CORRESPONDING <fs_so_data> TO ls_so_item_data. APPEND ls_so_item_data TO lt_so_item_data. AT END OF vbeln. * Create subtree for all SO items CALL FUNCTION 'SDIXML_DATA_TO_DOM' EXPORTING name = 'Order_Items' dataobject = lt_so_item_data control = ls_control IMPORTING data_as_dom = lr_elem_item CHANGING document = lr_xmldoc EXCEPTIONS illegal_name = 1 OTHERS = 2. Change tag name of node lr_nodes = lr_elem_item->get_children( ). li_cnt = lr_nodes->get_length( ). li_idx = 0. WHILE li_idx < l_cnt. lr_child = lr_nodes->get_item( li_idx ). li_rc = lr_child->set_name( name = cc_order_items_row ). li_idx = li_idx + 1. ENDWHILE. Add subtree for all SO items li_rval = lr_elem_head->append_child( new_child = lr_elem_item ). ENDAT. ENDLOOP. * Serialization CALL FUNCTION 'SDIXML_DOM_TO_XML' EXPORTING document = lr_xmldoc IMPORTING xml_as_string = lx_string size = li_size TABLES xml_as_table = lt_xml EXCEPTIONS no_document = 1 OTHERS = 2. IF lt_xml IS NOT INITIAL. CALL METHOD me->download_so_xml. ENDIF. ENDMETHOD. *>> "get_so_data

* * * * * * * * * *

*<< Download file to presentation server METHOD download_so_xml.

CALL METHOD cl_gui_frontend_services=>gui_download EXPORTING bin_filesize = li_size filename = 'C:\SO_DATA_XML.XML' filetype = 'BIN' CHANGING data_tab = lt_xml EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 not_supported_by_gui = 22 error_no_gui = 23 OTHERS = 24. IF sy-subrc <> 0. ENDIF. ENDMETHOD. *>> ENDCLASS. "download_so_xml "cl_so_xml IMPLEMENTATION

*----------------------------------------------------------------------* * CLASS cl_execute IMPLEMENTATION *----------------------------------------------------------------------* CLASS cl_execute IMPLEMENTATION. METHOD execute_report. DATA: or_so_xml TYPE REF TO cl_so_xml. CREATE OBJECT or_so_xml. CALL METHOD or_so_xml->get_so_data. ENDMETHOD. ENDCLASS. "execute "cl_execute_report IMPLEMENTATION

START-OF-SELECTION. CALL METHOD cl_execute=>execute_report.

Output of report and xml file

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy