Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

uploading data from xml format

Former Member
0 Likes
1,134

Hi Experts,

i am working under ' ZTOOLREV ' transaction which is plant maintainence. i maintain one rfc in se37.

import parameters are mandatory fields entering in this application , export parameters are for the errors -


it is of error structutre name.

further i am creating one web service using transaction ' WSCONFIG ' . so it will be coverted in xml data.

now my client will enter data in xml it has to come to sap and store in sap. and show if any errors.

my requirement is the data is coming from xml format. i have to upload data from xml.

what is the function module should be used to upload the data anad also what function module should used to handle errors?

here in this case i am using gui_download. but i want to put in export parameters.

which i maintained previously.

please guide me experts.

i can get a solution for this query because there are so many experts are there in sdn.sap.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
914

Hi Chaitanya,

You may use the following program to upload your xml data into internal table

REPORT z_read_xml_file.

PARAMETERS: p_filnam TYPE localfile OBLIGATORY

DEFAULT 'C:\Documents and Settings\ssaha\Desktop\test.xml'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filnam.

DATA: l_v_fieldname TYPE dynfnam.

l_v_fieldname = p_filnam.

CALL FUNCTION 'F4_FILENAME'

EXPORTING

program_name = syst-cprog

dynpro_number = syst-dynnr

field_name = l_v_fieldname

IMPORTING

file_name = p_filnam.

START-OF-SELECTION.

TYPES:

BEGIN OF ty_tab,

name TYPE string,

value TYPE string,

END OF ty_tab.

DATA:

lcl_xml_doc TYPE REF TO cl_xml_document,

v_subrc TYPE sysubrc,

v_node TYPE REF TO if_ixml_node,

v_child_node TYPE REF TO if_ixml_node,

v_root TYPE REF TO if_ixml_node,

v_iterator TYPE REF TO if_ixml_node_iterator,

v_nodemap TYPE REF TO if_ixml_named_node_map,

v_count TYPE i,

v_index TYPE i,

v_attr TYPE REF TO if_ixml_node,

v_name TYPE string,

v_prefix TYPE string,

v_value TYPE string,

v_char TYPE char2.

DATA:

itab TYPE STANDARD TABLE OF ty_tab,

wa TYPE ty_tab.

CREATE OBJECT lcl_xml_doc.

CALL METHOD lcl_xml_doc->import_from_file

EXPORTING

filename = p_filnam

RECEIVING

retcode = v_subrc.

CHECK v_subrc = 0.

v_node = lcl_xml_doc->m_document.

CHECK NOT v_node IS INITIAL.

v_iterator = v_node->create_iterator( ).

v_node = v_iterator->get_next( ).

WHILE NOT v_node IS INITIAL.

CASE v_node->get_type( ).

WHEN if_ixml_node=>co_node_element.

v_name = v_node->get_name( ).

v_nodemap = v_node->get_attributes( ).

IF NOT v_nodemap IS INITIAL

  • attributes

v_count = v_nodemap->get_length( ).

DO v_count TIMES.

v_index = sy-index - 1.

v_attr = v_nodemap->get_item( v_index ).

v_name = v_attr->get_name( ).

v_prefix = v_attr->get_namespace_prefix( ).

v_value = v_attr->get_value( ).

ENDDO.

ENDIF.

WHEN if_ixml_node=>co_node_text OR

if_ixml_node=>co_node_cdata_section.

  • text node

v_value = v_node->get_value( ).

MOVE v_value TO v_char.

IF v_char <> cl_abap_char_utilities=>cr_lf.

wa-name = v_name.

wa-value = v_value.

APPEND wa TO itab.

CLEAR wa.

ENDIF.

ENDCASE.

  • advance to next node

v_node = v_iterator->get_next( ).

ENDWHILE.

LOOP AT itab INTO wa.

ENDLOOP.

3 REPLIES 3
Read only

Former Member
0 Likes
915

Hi Chaitanya,

You may use the following program to upload your xml data into internal table

REPORT z_read_xml_file.

PARAMETERS: p_filnam TYPE localfile OBLIGATORY

DEFAULT 'C:\Documents and Settings\ssaha\Desktop\test.xml'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filnam.

DATA: l_v_fieldname TYPE dynfnam.

l_v_fieldname = p_filnam.

CALL FUNCTION 'F4_FILENAME'

EXPORTING

program_name = syst-cprog

dynpro_number = syst-dynnr

field_name = l_v_fieldname

IMPORTING

file_name = p_filnam.

START-OF-SELECTION.

TYPES:

BEGIN OF ty_tab,

name TYPE string,

value TYPE string,

END OF ty_tab.

DATA:

lcl_xml_doc TYPE REF TO cl_xml_document,

v_subrc TYPE sysubrc,

v_node TYPE REF TO if_ixml_node,

v_child_node TYPE REF TO if_ixml_node,

v_root TYPE REF TO if_ixml_node,

v_iterator TYPE REF TO if_ixml_node_iterator,

v_nodemap TYPE REF TO if_ixml_named_node_map,

v_count TYPE i,

v_index TYPE i,

v_attr TYPE REF TO if_ixml_node,

v_name TYPE string,

v_prefix TYPE string,

v_value TYPE string,

v_char TYPE char2.

DATA:

itab TYPE STANDARD TABLE OF ty_tab,

wa TYPE ty_tab.

CREATE OBJECT lcl_xml_doc.

CALL METHOD lcl_xml_doc->import_from_file

EXPORTING

filename = p_filnam

RECEIVING

retcode = v_subrc.

CHECK v_subrc = 0.

v_node = lcl_xml_doc->m_document.

CHECK NOT v_node IS INITIAL.

v_iterator = v_node->create_iterator( ).

v_node = v_iterator->get_next( ).

WHILE NOT v_node IS INITIAL.

CASE v_node->get_type( ).

WHEN if_ixml_node=>co_node_element.

v_name = v_node->get_name( ).

v_nodemap = v_node->get_attributes( ).

IF NOT v_nodemap IS INITIAL

  • attributes

v_count = v_nodemap->get_length( ).

DO v_count TIMES.

v_index = sy-index - 1.

v_attr = v_nodemap->get_item( v_index ).

v_name = v_attr->get_name( ).

v_prefix = v_attr->get_namespace_prefix( ).

v_value = v_attr->get_value( ).

ENDDO.

ENDIF.

WHEN if_ixml_node=>co_node_text OR

if_ixml_node=>co_node_cdata_section.

  • text node

v_value = v_node->get_value( ).

MOVE v_value TO v_char.

IF v_char <> cl_abap_char_utilities=>cr_lf.

wa-name = v_name.

wa-value = v_value.

APPEND wa TO itab.

CLEAR wa.

ENDIF.

ENDCASE.

  • advance to next node

v_node = v_iterator->get_next( ).

ENDWHILE.

LOOP AT itab INTO wa.

ENDLOOP.

Read only

Former Member
0 Likes
914

Hi Chaitanya,

This can easily be done using XSLT. I've written a tutorial which can be found here: http://www.heidoc.net/joomla/en/technology-science/sap-and-xslt/5-tutorial-data-exchange-between-aba...

If you have any questions about it, please ask.

Best wishes,

Jan

Edited by: Jan Krohn on Jul 15, 2011 10:55 AM

Read only

Former Member
0 Likes
914

Hi,

Use GUI_UPLOAD to upload data from XML format.

Hope this will help.

Regards,

Abhishak