Skip to Content
author's profile photo Former Member
Former Member

How to send the data from ABAP to WEB SERVER in XML format

Hi all,

How to send the data from ABAP to WEB SERVER in XML format ?

Thanks

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

2 Answers

  • Best Answer
    author's profile photo Former Member
    Former Member
    Posted on Jan 17, 2008 at 03:20 AM

    Hi Pabitra, this is the code.

    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.

    kindly reward if found helpful.

    cheers,

    Hema.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jan 17, 2008 at 03:21 AM

    Hi Pabitra, also check this. this will give u some idea.

    if you on SAP R/3 Enterprise version and above you could use the solutions

    described at following link:

    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/b2dcbdfc-0801-0010-97bd-b3f39420759c

    /people/r.eijpe/blog/2005/11/10/xml-dom-processing-in-abap-part-i--convert-an-abap-table-into-xml-file-using-sap-dom-approach

    Look at the below link for example code

    http://www.sap-img.com/abap/sample-xml-source-code-for-sap.htm

    ********************************************************************

    Check this sample:

    *&----


    *

    *& Report ZULH_MM_RP_XMLtest001

    *&

    *&----


    *

    *&

    *&

    *&----


    *

    REPORT ZULH_MM_RP_XMLtest001.

    PARAMETERS: GK_RUTA TYPE RLGRAP-FILENAME DEFAULT 'C: est01.XML'.

    • TYPE TURNOS *

    TYPES: BEGIN OF TURNOS,

    LU LIKE T552A-TPR01,

    MA LIKE T552A-TPR01,

    MI LIKE T552A-TPR01,

    JU LIKE T552A-TPR01,

    VI LIKE T55AA-TPR01,

    SA LIKE T552A-TPR01,

    DO LIKE T552A-TPR01,

    END OF TURNOS.

    • TYPE TURNOS *

    *----


    *

    *----


    *

    • TYPE SOCIO *

    TYPES: BEGIN OF SOCIO,

    NUMERO LIKE PERNR-PERNR,

    REPOSICION LIKE PA0050-ZAUVE,

    NOMBRE LIKE PA0002-VORNA,

    TURNOS TYPE TURNOS,

    END OF SOCIO.

    • TYPE SOCIO *

    *----


    *

    *----


    *

    • ESTRUCTURA ACCESOS *

    DATA: BEGIN OF ACCESOS OCCURS 0,

    SOCIO TYPE SOCIO,

    END OF ACCESOS.

    • ESTRUCTURA ACCESOS *

    *----


    *

    *----


    *

    • START OF SELECTION *

    START-OF-SELECTION.

    PERFORM LLENA_ACCESOS.

    PERFORM DESCARGA_XML.

    END-OF-SELECTION.

    • END OF SELECTION *

    *----


    *

    *----


    *

    • FORM LLENA_ACCESOS *

    FORM LLENA_ACCESOS.

    REFRESH ACCESOS.

    CLEAR ACCESOS.

    MOVE: '45050' TO ACCESOS-SOCIO-NUMERO,

    'MOISES MORENO' TO ACCESOS-SOCIO-NOMBRE,

    '0' TO ACCESOS-SOCIO-REPOSICION,

    'T1' TO ACCESOS-SOCIO-TURNOS-LU,

    'T2' TO ACCESOS-SOCIO-TURNOS-MA,

    'T3' TO ACCESOS-SOCIO-TURNOS-MI,

    'T4' TO ACCESOS-SOCIO-TURNOS-JU,

    'T5' TO ACCESOS-SOCIO-TURNOS-VI,

    'T6' TO ACCESOS-SOCIO-TURNOS-SA,

    'T7' TO ACCESOS-SOCIO-TURNOS-DO.

    APPEND ACCESOS.

    CLEAR ACCESOS.

    MOVE: '45051' TO ACCESOS-SOCIO-NUMERO,

    'RUTH PEÑA' TO ACCESOS-SOCIO-NOMBRE,

    '0' TO ACCESOS-SOCIO-REPOSICION,

    'T1' TO ACCESOS-SOCIO-TURNOS-LU,

    'T2' TO ACCESOS-SOCIO-TURNOS-MA,

    'T3' TO ACCESOS-SOCIO-TURNOS-MI,

    'T4' TO ACCESOS-SOCIO-TURNOS-JU,

    'T5' TO ACCESOS-SOCIO-TURNOS-VI,

    'T6' TO ACCESOS-SOCIO-TURNOS-SA,

    'T7' TO ACCESOS-SOCIO-TURNOS-DO.

    APPEND ACCESOS.

    ENDFORM.

    • FORM LLENA_ACCESOS *

    *----


    *

    *----


    *

    • FORM DESCARGA_XML *

    FORM DESCARGA_XML.

    DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,

    M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,

    G_IXML TYPE REF TO IF_IXML,

    W_STRING TYPE XSTRING,

    W_SIZE TYPE I,

    W_RESULT TYPE I,

    W_LINE TYPE STRING,

    IT_XML TYPE DCXMLLINES,

    S_XML LIKE LINE OF IT_XML,

    W_RC LIKE SY-SUBRC.

    DATA: XML TYPE DCXMLLINES.

    DATA: RC TYPE SY-SUBRC,

    BEGIN OF XML_TAB OCCURS 0,

    D LIKE LINE OF XML,

    END OF XML_TAB.

    CLASS CL_IXML DEFINITION LOAD.

    G_IXML = CL_IXML=>CREATE( ).

    CHECK NOT G_IXML IS INITIAL.

    M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).

    CHECK NOT M_DOCUMENT IS INITIAL.

    WRITE: / 'Converting DATA TO DOM 1:'.

    CALL FUNCTION 'SDIXML_DATA_TO_DOM'

    EXPORTING

    NAME = 'ACCESOS'

    DATAOBJECT = ACCESOS[]

    IMPORTING

    DATA_AS_DOM = L_DOM

    CHANGING

    DOCUMENT = M_DOCUMENT

    EXCEPTIONS

    ILLEGAL_NAME = 1

    OTHERS = 2.

    IF SY-SUBRC = 0.

    WRITE 'Ok'.

    ELSE.

    WRITE: 'Err =',

    SY-SUBRC.

    ENDIF.

    CHECK NOT L_DOM IS INITIAL.

    W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).

    IF W_RC IS INITIAL.

    WRITE 'Ok'.

    ELSE.

    WRITE: 'Err =',

    W_RC.

    ENDIF.

    CALL FUNCTION 'SDIXML_DOM_TO_XML'

    EXPORTING

    DOCUMENT = M_DOCUMENT

    IMPORTING

    XML_AS_STRING = W_STRING

    SIZE = W_SIZE

    TABLES

    XML_AS_TABLE = IT_XML

    EXCEPTIONS

    NO_DOCUMENT = 1

    OTHERS = 2.

    IF SY-SUBRC = 0.

    WRITE 'Ok'.

    ELSE.

    WRITE: 'Err =',

    SY-SUBRC.

    ENDIF.

    LOOP AT IT_XML INTO XML_TAB-D.

    APPEND XML_TAB.

    ENDLOOP.

    CALL FUNCTION 'WS_DOWNLOAD'

    EXPORTING

    BIN_FILESIZE = W_SIZE

    FILENAME = GK_RUTA

    FILETYPE = 'BIN'

    TABLES

    DATA_TAB = XML_TAB

    EXCEPTIONS

    OTHERS = 10.

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    ENDFORM.

    cheers,

    Hema.

    Add a comment
    10|10000 characters needed characters exceeded

    • Former Member

      Hi hema,

      i need to send some purchase order data from SAP to WEB SERVICE. while saving the purchase order, i want to send some data from SAP to WEB SERVICE ( address in WEB).

      i want to see those datas in xml format in WEB.

      Now i am using SAP 4.7 version. Is this web service configuration is possible or not?

      In SE37, i can not see the CREATE WEB SERVICE option in utilitities--> More utilities menu.

      can anyone give any suggestion ? it's very urgent.

      Thnaks

      pabitra

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.