Application Development 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: 

Uploading XML File

Former Member
0 Kudos
735

Hi All,

I have a requirement where I need to upload the XML file in one client(or system)

which has been downloaded using another client(or system)

I am using

call method cl_gui_frontend_services=>gui_upload

to upload the file but it is going for dump.

I have also tried with

call method w_xml->import_from_file

but it is also going for dump as both methods are using the same FM GUI_UPLOAD.

Can anyone please tell me how to resolve this.

Regards

Haritha

5 REPLIES 5

Former Member
0 Kudos
233

hi,

Look at the below link for an example Program

*&----


*

*& Report z_xit_xml_check

*&----


*

report z_xit_xml_check.

class cl_ixml definition load.

type-pools: ixml.

types: begin of t_xml_line,

data(256) type x,

end of t_xml_line,

begin of tsfixml,

data(1024) type c,

end of tsfixml.

data: l_ixml type ref to if_ixml,

l_streamfactory type ref to if_ixml_stream_factory,

l_parser type ref to if_ixml_parser,

l_istream type ref to if_ixml_istream,

l_document type ref to if_ixml_document,

l_node type ref to if_ixml_node,

l_xmldata type string.

data: l_elem type ref to if_ixml_element,

l_root_node type ref to if_ixml_node,

l_next_node type ref to if_ixml_node,

l_name type string,

l_iterator type ref to if_ixml_node_iterator.

data: l_xml_table type table of t_xml_line,

l_xml_line type t_xml_line,

l_xml_table_size type i.

data: l_filename type string.

parameters: pa_file type char1024 default

'd:joaodesenvolvimentos i act este.xml'.

  • Validation of XML file: Only DTD included in xml document is supported

parameters: pa_val type char1 as checkbox.

start-of-selection.

  • Creating the main iXML factory

l_ixml = cl_ixml=>create( ).

  • Creating a stream factory

l_streamfactory = l_ixml->create_stream_factory( ).

Regards,

Maria João Rocha

perform get_xml_table changing l_xml_table_size l_xml_table.

  • wrap the table containing the file into a stream

l_istream = l_streamfactory->create_istream_itable( table =

l_xml_table

size =

l_xml_table_size ).

  • Creating a document

l_document = l_ixml->create_document( ).

  • Create a Parser

l_parser = l_ixml->create_parser( stream_factory = l_streamfactory

istream = l_istream

document = l_document ).

  • Validate a document

if pa_val eq 'X'.

  • l_parser->set_validating( mode = if_ixml_parser=>co_validate ).

endif.

  • Parse the stream

if l_parser->parse( ) ne 0.

if l_parser->num_errors( ) ne 0.

data: parseerror type ref to if_ixml_parse_error,

str type string,

i type i,

count type i,

index type i.

count = l_parser->num_errors( ).

write: count, ' parse errors have occured:'.

index = 0.

while index < count.

parseerror = l_parser->get_error( index = index ).

i = parseerror->get_line( ).

write: 'line: ', i.

i = parseerror->get_column( ).

write: 'column: ', i.

str = parseerror->get_reason( ).

write: str.

index = index + 1.

endwhile.

endif.

endif.

  • Process the document

if l_parser->is_dom_generating( ) eq 'X'.

perform process_dom using l_document.

endif.

*&----


*

*& Form get_xml_table

*&----


*

form get_xml_table changing l_xml_table_size type i

l_xml_table type standard table.

  • Local variable declaration

data: l_len type i,

l_len2 type i,

l_tab type tsfixml,

l_content type string,

l_str1 type string,

  • c_conv TYPE REF TO cl_abap_conv_in_ce,

l_itab type table of string.

l_filename = pa_file.

  • upload a file from the client's workstation

call method cl_gui_frontend_services=>gui_upload

exporting

filename = l_filename

filetype = 'BIN'

importing

filelength = l_xml_table_size

changing

data_tab = l_xml_table

exceptions

others = 19.

if sy-subrc <> 0.

message id sy-msgid type sy-msgty number sy-msgno

with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

endif.

  • Writing the XML document to the screen

  • CLEAR l_str1.

  • LOOP AT l_xml_table INTO l_xml_line.

  • c_conv = cl_abap_conv_in_ce=>create( input = l_xml_line-data

*replacement = space ).

  • c_conv->read( IMPORTING data = l_content len = l_len ).

  • CONCATENATE l_str1 l_content INTO l_str1.

  • ENDLOOP.

  • l_str1 = l_str1+0(l_xml_table_size).

  • SPLIT l_str1 AT cl_abap_char_utilities=>cr_lf INTO TABLE l_itab.

  • WRITE: /.

  • WRITE: /' XML File'.

  • WRITE: /.

  • LOOP AT l_itab INTO l_str1.

  • REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab

*IN

  • l_str1 WITH space.

  • WRITE: / l_str1.

  • ENDLOOP.

  • WRITE: /.

endform. "get_xml_table

*&----


*

*& Form process_dom

*&----


*

form process_dom using document type ref to if_ixml_document.

data: node type ref to if_ixml_node,

iterator type ref to if_ixml_node_iterator,

nodemap type ref to if_ixml_named_node_map,

attr type ref to if_ixml_node,

name type string,

prefix type string,

value type string,

indent type i,

count type i,

index type i.

data: name2 type string,

name_root type string,

node_parent type ref to if_ixml_node,

node_root type ref to if_ixml_node,

num_children type i.

node ?= document.

check not node is initial.

uline.

write: /.

write: /' DOM-TREE'.

write: /.

if node is initial. exit. endif.

  • create a node iterator

iterator = node->create_iterator( ).

  • get current node

node = iterator->get_next( ).

  • loop over all nodes

while not node is initial.

indent = node->get_height( ) * 2.

indent = indent + 20.

num_children = node->num_children( ).

case node->get_type( ).

when if_ixml_node=>co_node_element.

  • element node

name = node->get_name( ).

nodemap = node->get_attributes( ).

node_root = node->get_root( ).

name_root = node_root->get_name( ).

write: / 'ELEMENT :'.

write: at indent name color col_positive inverse.

write: 'NUM_CHILDREN:', num_children.

write: 'ROOT:', name_root.

node_parent = node->get_parent( ).

name2 = node_parent->get_name( ).

write: 'NAME2: ' , name2.

if not nodemap is initial.

  • attributes

count = nodemap->get_length( ).

do count times.

index = sy-index - 1.

attr = nodemap->get_item( index ).

name = attr->get_name( ).

  • prefix = attr->get_namespace_prefix( ).

value = attr->get_value( ).

write: / 'ATTRIBUTE:'.

write: at indent name color col_heading inverse, '=',

value color col_total inverse.

enddo.

endif.

when if_ixml_node=>co_node_text or

if_ixml_node=>co_node_cdata_section.

  • text node

value = node->get_value( ).

write: / 'VALUE :'.

  • mjprocha

node_parent = node->get_parent( ).

write: at indent value color col_group inverse.

name2 = node_parent->get_name( ).

write: 'NAME2: ' , name2.

endcase.

  • advance to next node

node = iterator->get_next( ).

endwhile.

endform. "process_dom

0 Kudos
233

hi

<b>Please refer to</b>

http://www.sap-img.com/abap/abap-object-oriented-spreadsheet-with-unlimited-power.htm

Visit

http://help.sap.com/saphelp_47x200/helpdata/en/e9/0be775408e11d1893b0000e8323c4f/frameset.htm

and

http://help.sap.com/saphelp_47x200/helpdata/en/e9/0be775408e11d1893b0000e8323c4f/frameset.htm

You need some basic idea of range object in excel.

You need to create XLS with named ranges or create ranges dynamically.

This could be a neat way to upload XLS the OO way!

The function Module zjnc_get_range reads 1 range into any Internal

table.

DATA: BEGIN OF it_test OCCURS 0,
        vpd  LIKE mseg-menge,
        vas  LIKE mkpf-budat,
        vkm  LIKE mseg-matnr,
      END OF it_test.

  CALL FUNCTION 'ZJNC_GET_RANGE'
    EXPORTING
      rangename       = 'test'
      itabname        = 'IT_TEST[]'
      irecname        = 'it_test'
      spreadsheetintf = spreadsheetintf.

=Work!$A$14:$C$16 is range "test"

Numbers & Character data are no problem BUT dates are.

In Excel default date is mm/dd/yyyy but is dependent on PC's

international setting which is normally default

To Avoid any 5-March 3-May type mix-up, I have designed the FM so that you need to

enter dates as 'dd.Mon.yyyy i.e. in Characters in "Internet Date Format"


FUNCTION zjnc_get_range.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(RANGENAME) TYPE  C
*"     REFERENCE(ITABNAME) TYPE  C
*"     REFERENCE(IRECNAME) TYPE  C
*"     REFERENCE(SPREADSHEETINTF) TYPE REF TO  I_OI_SPREADSHEET
*"----------------------------------------------------------------------
*
*"     REFERENCE(SPREADSHEETINTF) TYPE REF TO  I_OI_SPREADSHEET
*"----------------------------------------------------------------------
  DATA:
    stru_ref    TYPE REF TO cl_abap_structdescr,
    comp_tab    TYPE abap_compdescr_tab,
    one_comp    TYPE abap_compdescr,
    one_name    TYPE string,
    type_ref    TYPE REF TO cl_abap_typedescr,
    is_ddic     TYPE abap_bool,
    lt_ddic     TYPE dd_x031l_table,
    wa_ddic     TYPE x031l.

  DATA: zjncranges    TYPE soi_range_list,
        zjnccontents  TYPE soi_generic_table,
        zjnconerange  TYPE soi_range_item,
        zjnconeitem   TYPE soi_generic_item,
        prevrow(4)    TYPE n,
        nrow(4)       TYPE n,
        ncolumn(4)    TYPE n,
        mystring      TYPE string,
        mydate        LIKE sy-datum.

  FIELD-SYMBOLS: <fs_type>  TYPE ANY,
                 <fs_table> TYPE STANDARD TABLE,
                 <fs_line>  TYPE ANY.

  CONCATENATE '(' sy-cprog ')' itabname INTO mystring.
  ASSIGN (mystring) TO <fs_table>.

  CONCATENATE '(' sy-cprog ')' irecname INTO mystring.
  ASSIGN (mystring) TO <fs_line>.

  stru_ref ?= cl_abap_structdescr=>describe_by_data( <fs_line> ).

  comp_tab = stru_ref->components.

  REFRESH zjncranges.

  MOVE rangename TO zjnconerange-name.
  APPEND zjnconerange TO zjncranges.

  CALL METHOD spreadsheetintf->get_ranges_data
    IMPORTING
      contents = zjnccontents
      error    = zjncerror
      retcode  = zjncretcode
    CHANGING
      ranges   = zjncranges.

  MOVE 0 TO prevrow.
  LOOP AT zjnccontents INTO zjnconeitem.
    MOVE zjnconeitem-row TO nrow.
    IF nrow <> prevrow.
      IF prevrow <> 0.
        APPEND <fs_line> TO <fs_table>.
      ENDIF.
      CLEAR <fs_line>.
      MOVE nrow TO prevrow.
    ENDIF.

    MOVE zjnconeitem-column TO ncolumn.
    READ TABLE comp_tab INDEX ncolumn INTO one_comp.
    CONCATENATE '(' sy-cprog ')' irecname '-' one_comp-name INTO one_name.
    ASSIGN (one_name) TO <fs_type>.

    IF one_comp-type_kind <> 'D'.
      MOVE zjnconeitem-value TO <fs_type>.
    ELSE.
      TRANSLATE zjnconeitem-value TO UPPER CASE.
      CALL FUNCTION 'CONVERSION_EXIT_SDATE_INPUT'
        EXPORTING
          input  = zjnconeitem-value
        IMPORTING
          output = mydate.
      MOVE mydate TO <fs_type>.
    ENDIF.

  ENDLOOP.

  IF prevrow <> 0.
    APPEND <fs_line> TO <fs_table>.
  ENDIF.

ENDFUNCTION.

-


SAP has a facility called BDS.

<b>Read</b>

http://www.intelligententerprise.com/channels/applications/feature/archive/schulze.jhtml

Read http://www.sappro.com/download03.cfm?session=

There is ready code of BDS+DOI -- uses CL_BDS_DOCUMENT_SET global class.

If you wish to store a Word/Excel/AutoCad or any other document in SAP,

then you can use the Business Document Service (BDS). I did not - as

Cluster Data Directory is a simple beginning ...

<b><u>Uploading data directly from Excel file format </u></b>


* 
* Upload data direct from excel.xls file to SAP 
* 
REPORT ZEXCELUPLOAD. 
PARAMETERS: filename LIKE rlgrap-filename MEMORY ID M01, 
            begcol TYPE i DEFAULT 1 NO-DISPLAY, 
            begrow TYPE i DEFAULT 1 NO-DISPLAY, 
            endcol TYPE i DEFAULT 100 NO-DISPLAY, 
            endrow TYPE i DEFAULT 32000 NO-DISPLAY. 
* Tick don't append header 
PARAMETERS: kzheader AS CHECKBOX. 

DATA: BEGIN OF intern OCCURS 0. 
        INCLUDE STRUCTURE  alsmex_tabline. 
DATA: END OF intern. 

DATA: BEGIN OF intern1 OCCURS 0. 
        INCLUDE STRUCTURE  alsmex_tabline. 
DATA: END OF intern1. 

DATA: BEGIN OF t_col OCCURS 0, 
       col LIKE alsmex_tabline-col, 
       size TYPE i. 
DATA: END OF t_col. 

DATA: zwlen TYPE i, 
      zwlines TYPE i. 

DATA: BEGIN OF fieldnames OCCURS 3, 
        title(60), 
        table(6), 
        field(10), 
        kz(1), 
      END OF fieldnames. 
* No of columns 
DATA: BEGIN OF data_tab OCCURS 0, 
       value_0001(50), 
       value_0002(50), 
       value_0003(50), 
       value_0004(50), 
       value_0005(50), 
       value_0006(50), 
       value_0007(50), 
       value_0008(50), 
       value_0009(50), 
       value_0010(50), 
       value_0011(50), 
       value_0012(50), 
       value_0013(50), 
       value_0014(50), 
       value_0015(50), 
       value_0016(50), 
       value_0017(50), 
       value_0018(50), 
       value_0019(50), 
       value_0020(50), 
       value_0021(50), 
       value_0022(50), 
       value_0023(50), 
       value_0024(50), 
       value_0025(50), 
       value_0026(50), 
       value_0027(50), 
       value_0028(50), 
       value_0029(50), 
       value_0030(50), 
       value_0031(50), 
       value_0032(50), 
       value_0033(50), 
       value_0034(50), 
       value_0035(50), 
       value_0036(50), 
       value_0037(50), 
       value_0038(50), 
       value_0039(50), 
       value_0040(50), 
       value_0041(50), 
       value_0042(50), 
       value_0043(50), 
       value_0044(50), 
       value_0045(50), 
       value_0046(50), 
       value_0047(50), 
       value_0048(50), 
       value_0049(50), 
       value_0050(50), 
       value_0051(50), 
       value_0052(50), 
       value_0053(50), 
       value_0054(50), 
       value_0055(50), 
       value_0056(50), 
       value_0057(50), 
       value_0058(50), 
       value_0059(50), 
       value_0060(50), 
       value_0061(50), 
       value_0062(50), 
       value_0063(50), 
       value_0064(50), 
       value_0065(50), 
       value_0066(50), 
       value_0067(50), 
       value_0068(50), 
       value_0069(50), 
       value_0070(50), 
       value_0071(50), 
       value_0072(50), 
       value_0073(50), 
       value_0074(50), 
       value_0075(50), 
       value_0076(50), 
       value_0077(50), 
       value_0078(50), 
       value_0079(50), 
       value_0080(50), 
       value_0081(50), 
       value_0082(50), 
       value_0083(50), 
       value_0084(50), 
       value_0085(50), 
       value_0086(50), 
       value_0087(50), 
       value_0088(50), 
       value_0089(50), 
       value_0090(50), 
       value_0091(50), 
       value_0092(50), 
       value_0093(50), 
       value_0094(50), 
       value_0095(50), 
       value_0096(50), 
       value_0097(50), 
       value_0098(50), 
       value_0099(50), 
       value_0100(50). 
DATA: END OF data_tab. 
DATA: tind(4) TYPE n. 
DATA: zwfeld(19). 
FIELD-SYMBOLS: <fs1>. 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename. 
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4' 
       EXPORTING 
            mask      = '*.xls' 
            static    = 'X' 
       CHANGING 
            file_name = filename. 
  

START-OF-SELECTION. 

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' 
       EXPORTING 
            filename                = filename 
            i_begin_col             = begcol 
            i_begin_row             = begrow 
            i_end_col               = endcol 
            i_end_row               = endrow 
       TABLES 
            intern                  = intern 
       EXCEPTIONS 
            inconsistent_parameters = 1 
            upload_ole              = 2 
            OTHERS                  = 3. 

  IF sy-subrc <> 0. 
    WRITE:/ 'Upload Error ', SY-SUBRC. 
  ENDIF. 

END-OF-SELECTION. 

  LOOP AT intern. 
    intern1 = intern. 
    CLEAR intern1-row. 
    APPEND intern1. 
  ENDLOOP. 

  SORT intern1 BY col. 
  LOOP AT intern1. 
    AT NEW col. 
      t_col-col = intern1-col. 
      APPEND t_col. 
    ENDAT. 
    zwlen = strlen( intern1-value ). 
    READ TABLE t_col WITH KEY col = intern1-col. 
    IF sy-subrc EQ 0. 
      IF zwlen > t_col-size. 
        t_col-size = zwlen. 
*                          Internal Table, Current Row Index 
        MODIFY t_col INDEX sy-tabix. 
      ENDIF. 
    ENDIF. 
  ENDLOOP. 

  DESCRIBE TABLE t_col LINES zwlines. 

  SORT intern BY row col. 
  IF kzheader = 'X'. 
    LOOP AT intern. 
      fieldnames-title = intern-value. 
      APPEND fieldnames. 
      AT END OF row. 
        EXIT. 
      ENDAT. 
    ENDLOOP. 
  ELSE. 
    DO zwlines TIMES. 
      WRITE sy-index TO fieldnames-title. 
      APPEND fieldnames. 
    ENDDO. 
  ENDIF. 

  SORT intern BY row col. 
  LOOP AT intern. 
    IF kzheader = 'X' 
    AND intern-row = 1. 
      CONTINUE. 
    ENDIF. 
    tind = intern-col. 
    CONCATENATE 'DATA_TAB-VALUE_' tind INTO zwfeld. 
    ASSIGN (zwfeld) TO <fs1>. 
    <fs1> = intern-value. 
    AT END OF row. 
      APPEND data_tab. 
      CLEAR data_tab. 
    ENDAT. 
  ENDLOOP. 

  CALL FUNCTION 'DISPLAY_BASIC_LIST' 
       EXPORTING 
            file_name     = filename 
       TABLES 
            data_tab      = data_tab 
            fieldname_tab = fieldnames. 

*-- End of Program 

Reward all helpfull answers

Regards

Pavan

Message was edited by:

Pavan praveen

Former Member
0 Kudos
233

Hi,

Check this link for uploading xml file..

http://wiki.ittoolbox.com/index.php/Download_and_upload_OO_ABAP_class_in_XML_format

reward if it helps..

Regards,

Omkar.

0 Kudos
233

Hi Sudheer and Omkar,

Thanks for your quick response.

But by using the code which u gave the data will not be fetched into an internal table.

My requirement is I want to upload the XML into an internal table

Regards

Haritha

0 Kudos
233

Ok Haritha...

Try using the Function - SMUM_XML_PARSE. This will upload an XMl file into an internal table

regards,

Omkar.