Automatic IDOC parse in ABAP Mapping?

Hi,
I'm creating a very complex mapping in an IDOC -> PI -> File scenario and I'm using ABAP Mapping to do that.
I already know how to parse an inbound xml but it's a "heavy" job and the code finishes very "hardcoded".
As you know, SAP uses the structure EDIDD to send/receive IDOC data generically. So I'm sure that internally SAP has a method/function or something to convert the XML data sent by PI to that EDIDD data structure when you send an Idoc through PI. I can't found that, do you know if it exists?
Thanks

You can use function module IDX_XML_TO_IDOC to convert the XML to IDOC type internal tables.
Check for other function module in function group IDOC_ADAPTER_MB.
KK

Similar Messages

  • File to IDoc : XML parsing in ABAP mapping

    Hi,
    In ABAP mapping I want to parse all of the incoming XML strings to internal table.Later I add few more fields to this table and transfer them to IDOC adapter in IDOC-XML format.In thsi case how do i get all of the input file data(converted from XML) into internal table using XML parsing in ABAP Mapping?
    Thansk in advance,
    RP

    Hi Amil,
    I insert into table but not immediately,I want all the parsed xml data into internal table and do something before I insert into DB /send it to IDOC.
    I knwo how to get single Xml parsing,but how to get multple records(looping xml parse) to internal table?
    Thanks,
    RP
    Edited by: RP@261 on Jun 3, 2009 2:14 PM

  • Problem in parsing in ABAP mapping

    Hi all , In our ABAP mapping  we are trying to create a DOM tree from a XML file but we are getting the error in the following statement
    l_rc = if_iparser->parse( ).
    when we track the error using
    i = l_error->get_line( ). (result 0)
    i = l_error->get_column( ). (result 2017)
    str = l_error->get_reason( ). (Expected '<' or '/>' tag)
    but strange thing is we can open the file using Stylus studio/ Altova / IE ..so may the problem is not in the XML file ....Has anybody faced the problem before ??
    Kind regarrds
    Goutam

    Hi,
    Have a look at this link.
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/46759682-0401-0010-1791-bd1972bc0b8a
    I guess,your code may have problem.
    Try doing this from document.
    iparser = ixmlfactory->create_parser( stream_factory = streamfactory
    istream = istream
    document = idocument ).
    iparser->parse( ).
    Regards,
    Akshay Jamgaonkar.
    Hope this will help.

  • Webservice  to Idoc/File using ABAP mapping

    Hi Experts,
    I need your expert advise on below scenario.The flow of the scenario is..
    1)I will get a control record from a webservice(SOAP sender adpater), this initiates the process flow.
    2)based on control record ,The ABAP mapping program will call a program(within the PI sys) to fetch the data from DB table.then the ABAP mapping program will have to create 2 messages for the target. One is IDoc and another one is File.
    Pls suggest the best approach.
    Regards,
    Srini

    Hi Prateek,
    Thanks for quick reply.
    there is a main program which has different classes and methoda to fetch the data from DB tables.I dont want to touch this main program.
    what  i am going to do is, I will this main program from abap mapping by passing the control record information.based on this control record,the main program will fetch data for ABAP mapping.From ABAP mapping, i have to generate 2 messages,one for IDOc and another one is for File.
    Hope you got my requirement.
    Regards,
    Srini

  • IDOC conevrsion through ABAP mapping

    Hi,
    I am trying to map to an IDOC MATMAS05 with an extension ZMATMAS05, using ABAP mapping. The source and target structures are external definition formats(xsd) of the IDOC.(I did this because I am using a BPM and used the xsds as abstract interfaces)
    When I run the Map I get an error "Extension ZMATMAS05 Unknown". I have hardcoded the EDI_DC40 values in the map. So I have set CIMTYP to ZMATMAS05.
    I have loaded the metadata using idx2. Still I am getting this error. Would need help on this.
    reagards,
    Saswata

    Hi,
    Have a look into this SAP note- 751839
    Is all the segments of idoc is released ?
    Delete the IDX2 entry and reload it, And reimport into Repository
    Regards,
    moorthy

  • IDOC--XI--IDOC Using ABAP MAPPING

    Hi all,
    My requirement is to map source IDOC fields to target IDOC fields using ABAP Mapping.
    few fields in source idoc structure has to be merged into a single field in target idoc structure.
    need help on how to start with as i am not exposed to ABAP Mapping.
    regards,
    Subba

    Hi Subba,
    I suggest you also go through these links:
    https://websmp101.sap-ag.de/~sapdownload/011000358700003082332004E/HowToABAPMapping.pdf
    /people/ravikumar.allampallam/blog/2005/02/10/different-types-of-mapping-in-xi
    /people/r.eijpe/blog
    ABAP Mapping Vs Java Mapping.
    Re: Message Mapping of type ABAP Class not being shown
    Re: Performance of mappings (JAVA, XSLT, ABAP)
    Refer to following SDN Demo which explains the need and how to do the ABAP mapping.
    https://www.sdn.sap.com/irj/sdn/docs?rid=/webcontent/uuid/110ff05d-0501-0010-a19d-958247c9f798#jdi [original link is broken]
    This document will help you to create ABAP Mapping.
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/e3ead790-0201-0010-64bb-9e4d67a466b4
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/xi/3.0/how%20to%20use%20abap-mapping%20in%20xi%203.0.pdf
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/5c46ab90-0201-0010-42bd-9d0302591383
    Regards,
    Abhy
    Message was edited by: Abhy Thomas

  • Parser error in ABAP mapping

    Hi ,
      i am using the following ABAP mapping program
    method if_mapping~execute .
    data: t_edidc type table of edi_dc40,
    ls_edidc type edi_dc40,
    ls_edidc_h type edi_dc40,
    t_edidd type table of edi_dd40,
    ls_edidd_h type edi_dd40,
    ls_idx_xmb type idx_xmb,
    t_result type string,
    t_resultc type string,
    t_resultd type string.
    data: ls_idx1 type idxporsm59.
    data: t_segtyp type table of edilsegtyp,
    el_segtyp type edilsegtyp,
    el_released type segdefrel,
    el_error_text type string.
    =======================
    0. parse input document
    =======================
    initialize iXML
    type-pools: ixml.
    break-point.
    class cl_ixml definition load.
    create main factory
    data: ixmlfactory type ref to if_ixml.
    break-point.
    ixmlfactory = cl_ixml=>create( ).
    create stream factory
    data: streamfactory type ref to if_ixml_stream_factory.
    streamfactory = ixmlfactory->create_stream_factory( ).
    create input stream
    data: istream type ref to if_ixml_istream.
    istream = streamfactory->create_istream_xstring( source ).
    initialize input document
    data: idocument type ref to if_ixml_document.
    idocument = ixmlfactory->create_document( ).
    parse input document
    data: iparser type ref to if_ixml_parser.
    iparser = ixmlfactory->create_parser( stream_factory = streamfactory
    istream = istream
    document = idocument ).
    iparser->parse( ).
    =================================================
    1. get IDoc header data and connection parameters
    =================================================
    data: el_message_id type sxmsguid.
    el_message_id = param->get( if_mapping_param=>message_id ).
    data: el_element type ref to if_ixml_element.
    el_element = idocument->find_from_name( 'TABNAM' ).
    ls_edidc-tabnam = el_element->get_value( ).
    el_element = idocument->find_from_name( 'MANDT' ).
    ls_edidc-mandt = el_element->get_value( ).
    el_element = idocument->find_from_name( 'DOCNUM' ).
    ls_edidc-docnum = el_element->get_value( ).
    el_element = idocument->find_from_name( 'STATUS' ).
    ls_edidc-status = el_element->get_value( ).
    el_element = idocument->find_from_name( 'OUTMOD' ).
    ls_edidc-outmod = el_element->get_value( ).
    el_element = idocument->find_from_name( 'TEST' ).
    if not el_element is initial.
    ls_edidc-test = el_element->get_value( ).
    endif.
    el_element = idocument->find_from_name( 'IDOCTYP' ).
    ls_edidc-idoctyp = el_element->get_value( ).
    el_element = idocument->find_from_name( 'CIMTYP' ).
    if not el_element is initial.
    ls_edidc-cimtyp = el_element->get_value( ).
    endif.
    el_element = idocument->find_from_name( 'MESTYP' ).
    ls_edidc-mestyp = el_element->get_value( ).
    el_element = idocument->find_from_name( 'STDVRS' ).
    if not el_element is initial.
    ls_edidc-stdvrs = el_element->get_value( ).
    endif.
    el_element = idocument->find_from_name( 'STD' ).
    if not el_element is initial.
    ls_edidc-std = el_element->get_value( ).
    endif.
    el_element = idocument->find_from_name( 'STDMES' ).
    ls_edidc-stdmes = el_element->get_value( ).
    el_element = idocument->find_from_name( 'SNDPOR' ).
    ls_edidc-sndpor = el_element->get_value( ).
    el_element = idocument->find_from_name( 'SNDPRT' ).
    ls_edidc-sndprt = el_element->get_value( ).
    el_element = idocument->find_from_name( 'SNDPRN' ).
    ls_edidc-sndprn = el_element->get_value( ).
    el_element = idocument->find_from_name( 'RCVPOR' ).
    ls_edidc-rcvpor = el_element->get_value( ).
    el_element = idocument->find_from_name( 'RCVPRT' ).
    ls_edidc-rcvprt = el_element->get_value( ).
    el_element = idocument->find_from_name( 'RCVPRN' ).
    ls_edidc-rcvprn = el_element->get_value( ).
    el_element = idocument->find_from_name( 'CREDAT' ).
    ls_edidc-credat = el_element->get_value( ).
    el_element = idocument->find_from_name( 'CRETIM' ).
    ls_edidc-cretim = el_element->get_value( ).
    el_element = idocument->find_from_name( 'SERIAL' ).
    ls_edidc-serial = el_element->get_value( ).
    ls_edidc-direct = '2'.
    move-corresponding ls_edidc to ls_idx_xmb.
    Connection data to application system to get IDoc metadata
    select single * from idxporsm59 into ls_idx1
    where port = ls_edidc-sndpor
    and client = ls_edidc-mandt.
    ls_idx_xmb-port = ls_edidc-sndpor.
    ls_idx_xmb-rfcdest = 'NONE'. "not necessary
    Get DOCREL and SAPREL
    el_element = idocument->find_from_name( 'DOCREL' ).
    if not el_element is initial.
    ls_edidc-docrel = el_element->get_value( ).
    else.
    select segtyp into table t_segtyp from idxidocsyn
    where port = ls_edidc-sndpor
    and idoctyp = ls_edidc-idoctyp
    and cimtyp = ls_edidc-cimtyp.
    loop at t_segtyp into el_segtyp.
    select released into el_released from idxedisdef
    where port = ls_edidc-sndpor
    and segtyp = el_segtyp
    and actrelease = 'X'.
    endselect.
    if el_released gt ls_edidc-docrel.
    ls_edidc-docrel = el_released.
    endif.
    endloop.
    endif.
    ======================================
    2. convert XML to IDoc table structure
    ======================================
    break-point.
    call function 'IDX_XML_TO_IDOC'
    exporting
    xml_data = source
    guid = el_message_id
    edidc40 = ls_edidc
    idx_xmb = ls_idx_xmb
    typ_def = 'X'
    tables
    idoc_control_40 = t_edidc
    idoc_data_40 = t_edidd
    exceptions
    unknown_xml = 1
    customizing_error = 2
    no_data_found = 3
    syntax_error = 4
    others = 5.
    if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    To keep the original DOCNUM uncomment the following 8 lines of coding
    Otherwise a new DOCNUM will be created
    LOOP AT t_edidc into ls_edidc_h.
    ls_edidc_h-DOCNUM = ls_edidc-DOCNUM.
    modify t_edidc from ls_edidc_h.
    ENDLOOP.
    LOOP AT t_edidd into ls_edidd_h.
    ls_edidd_h-DOCNUM = ls_edidc-DOCNUM.
    modify t_edidd from ls_edidd_h.
    ENDLOOP.
    =========================================
    3. convert IDoc table structure to string
    =========================================
    call function 'ZSOTR_SERV_TABLE_TO_STRING'
    EXPORTING
    FLAG_NO_LINE_BREAKS = ' '
    LINE_LENGTH = 0
    LANGU = SY-LANGU
    importing
    text = t_resultc
    tables
    text_tab = t_edidc.
    convert IDoc table structure to string
    call function 'ZSOTR_SERV_TABLE_TO_STRING'
    EXPORTING
    FLAG_NO_LINE_BREAKS = ' '
    LINE_LENGTH = 0
    LANGU = SY-LANGU
    importing
    text = t_resultd
    tables
    text_tab = t_edidd.
    concatenate t_resultc t_resultd into t_result.
    convert string to xstring
    call function 'SCMS_STRING_TO_XSTRING'
    exporting
    text = t_result
    MIMETYPE = ' '
    ENCODING =
    importing
    buffer = result.
    EXCEPTIONS
    FAILED = 1
    OTHERS = 2
    if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    endmethod.
    <b> i am getting the following parse error in FM IDX_XML_TO_IDOC :
    " unexpected symbol; expected '<', '</', entity reference, character data, CDATA section, processing instruction or comment "
    can anybody help
    points will be given
    Regards</b>

    HI,
    is it possible that you have to use "-" instead of "=" in this [ixmlfactory = cl_ixml=>create( ).] line ?
    regards,
    gordon

  • Idoc  - JMS queue using ABAP Mapping

    Hi all,
    I am doing a idoc to JMS queue scenario using ABAP Mapping. I am new to ABAP
    Basically i want to know how to read the OUTBOUND idoc segments and their field values. I have gone through link : IDOC--XI--IDOC Using ABAP MAPPING(Idoc to Idoc using ABAP Mapping).
    If any body could suggest me how to read idoc->segment->fields or give some sample code, it would be very helpful.
    Thanks in advance&
    Regards,
    Mani

    Hi Mani,
    Maybe it would be easier to use graphical mapping. In ABP mapping you have to parse XML and than create target document. If you want to do it I'd strongly advice you to read it:
    http://help.sap.com/saphelp_nw04/helpdata/en/47/b5413acdb62f70e10000000a114084/frameset.htm
    Regards,
    Wojtek

  • IDOC-XI-FILE Scenario: Error in ABAP Mapping

    Dear All,
    I am working on IDOC-XI-Flat FIle scenario in which I am using ABAP Mapping as per document "How To Convert an IDoc-XML
    structure to a flat file and vice versa in XI 3.0".
    I created one customized Idoc for this. The Idoc is reacing XI but its flat file is not getting created. Its giving me following error:
    <SAP:Stack>Error in mapping program Z_ABAP_MAPPING_PACKING_LIST (type SAP-ABAP, kernel error ID UNCAUGHT_EXCEPTION) An exception with the type CX_SY_REF_IS_INITIAL occurred, but was neither handled locally, nor declared in a RAISING clause Dereferencing of the NULL reference.</SAP:Stack>
      <SAP:Retry>M</SAP:Retry>
    I have also gone thru threads posted for the same topic earlier but still I am not been to resolve this error.
    Please help me out in resolving this error.
    Regards,
    N.Jain

    HI,
       Log saying that, u have problem in the mapping program.
      i.e Z_ABAP_MAPPING_PACKING_LIST
       the problem is due declaration of data.
       i hope that, you have some methods.
       those are declared under intialization section in mapping program.
      please use start of selection before the method.
    other wise, it will come under intilization section.
    warm regards
    mahesh.

  • Creating multiple idocs in ABAP mapping

    Hi,
    my scenario is source message (JDBC) to target message (idoc).
    There can be multiple idocs (unbounded).
    I am using ABAP mapping to create the Idoc XML structure. For this i use function module IDX_IDOC_TO_XML.
    The idoc is getting created but the problem occurs in case of generating multiple idoc instances.
    I changed the idoc occurence to unbounded & used the new idoc external definition in the interface mapping.
    I also call the IDX_IDOC_TO_XML & create the output stream factory in a loop (per idoc ).
    However only 1 idoc gets generated every time.
    Can someone suggest how to create the multiple idocs.
    Regards
    Prasenjit

    Hi Prasenjit,
    In order to generate multiple idoc first of all you need to change the target structure with multiple occurence...that you have already done...
    Now while generating XML in abap mapping you have to make sure you have element idoc(with its content) repeating for your "N" number of idocs...
    can you please copy paste your final xml generated...
    Nilesh

  • ABAP Mapping - Testing - IDoc - Trouble

    Hi Friends,
    There is one ABAP Mapping used in our system. The outbound interface is based on one message in external definition and inbound interface is IDoc.
    When I try to test this mapping in our PI System using the transaction "SXI_MAPPING_TEST", in the initial screen/input screen in F4 help for the Sender Interface selection, our outbound interface is not displayed. In the Receiver Interface also, it is not display the IDoc.
    What could be the problem ? How to test our Z class in this case with the input XML.
    Could you please help me?
    Kind regards
    Jegathees P.

    Hi,
    don't use SXI_MAPPING_TEST
    use my report which is much better
    XI/PI: Easy ABAP mapping tests - no more SXI_MAPPING_TEST
    BTW
    there is no need to use any HTTP client nor anything to test ABAP mapping - just my report
    Regards,
    Michal Krawczyk

  • Abap Mapping: XML iterative parsing.

    Hi All,
    I am trying to parse an XML file which structure is the following.
    <Order>
      <BookingCode>AAAAA</BookingCode>
           <F1>
           <F1>
           <F2>
           <F2>
    <BookingCode>BBBBBB</BookingCode>
           <F1>
           <F1>
           <F2>
           <F2>
    </Order>
    More exactly I try to check all values of tag name "BookingCode" up to the end of the XML file. The number of occurrences of "BookingCode" is not determinated.
    Is it necessary a loop after collecting a list of occurrences of "BookingCode"?
    I am trying to use:
    data: node_iterator type ref to if_ixml_node_iterator.
    node_iterator = incode->CREATE_ITERATOR( ).
    data: emp_node type ref to if_ixml_node.
    emp_node = node_iterator->GET_NEXT( ).
    data: emp_node_list type ref to if_ixml_node_list.
    emp_node_list = emp_node->GET_CHILDREN( ).
    data: emp_node_list_lenth type I.
    emp_node_list_lenth = emp_node_list->GET_LENGTH( ).
    Using the debugging I can not find exactly the behaviour.
    Any suggestion for solving my issue will be well appreciated.
    Thanks in advance.
    Regards,
        Giovanni

    Hi,
    referring to a document in the net, I am trying to define the loop for understanding the behaviour but I receive the abend:
    document: Understanding and working with ABAP Mapping (Steps to be followed in ABAP Mapping classes )
    data: emp_node_list_iterator type ref to if_ixml_node_iterator.
    data: emp_subnode type ref to if_ixml_node.
    DO emp_node_list_lenth TIMES.
         emp_subnode = emp_node_list_iterator->get_next( ).
    Abend:
    Runtime Errors         OBJECTS_OBJREF_NOT_ASSIGNED_NO
    Except.                CX_SY_REF_IS_INITIAL
    Thanks in advance for your kind support.
    Regards,
        Giovanni

  • Abap mapping - IDoc structure

    Hi,
    I realize an Abap mapping for "IDoc -> XI -> File" and I want to "play" with idoc segments and idoc fields...
    Thus in my coding, I need to define some internal structures which are exactly the same than IDoc segments (e.g E2LFA1M for supplier).
    Such a structure exists in R/3 (cf. tcode SE11), but this one does NOT exist in XI. It seems there is only the table IDXEDSAPPL with the list of all fields for one segment.
    Is is possible to import and use directly this structure (e.g E2LFA1M) from R/3 to XI ?
    or must I define manually in my code the same structure than in R/3 ?
    Regards.
    Mickael

    Hi Mickael,
    I have the same problem.
    How did you solve this problem?
    Regards
    Elsa

  • IDoc to Flat file scenario - abap mapping

    Hi All,
    I have to do some IDOC to Flat file scenarios. In Order to generate the file in required format I will have to add all segments(Nodes) of Idoc in FCC receiver. We also have other option of doing it through ABAP Mapping which I found in one blog.
    Now my question is : Is it better way of doing it through FCC or ABAP Mapping?
    Ofcourse from development point of view ABAP Mapping looks easier as FCC is very time consuming task.
    Is there and performance issues in either of the approach?
    Thanks and Regards,
    Atul

    Hi VJ and Harald,
    Thanks for your replies.
    I am not having PI7.1 however the given blog was very informative.
    I will try using file port approach as suggested.
    Thanks and Regards,
    Atul

  • ABAP mapping - File to Idoc

    Hi All,
    I want help on ABAP mapping to perform File to Idoc posting.
    Kindly provide any sample code / document for this.?
    Thanks.
    Ramiz.

    Hi
    Please do a search before posting.
    This link will provide you all about abap mapping.
    https://www.sdn.sap.com/irj/scn/advancedsearch?query=abap+mapping&cat=sdn_all
    Thanks
    Saiyog

Maybe you are looking for

  • HP C7250 AIO will not print wirelessly or connected

    I have tried to download HP's latest drivers as well as their older drivers to get my printer working with my ibook. I have had no luck, all print jobs go straight into the completed tab and do not print anything. I downloaded an HP printer utility (

  • How to do media recovery from cold backup?????????/

    Hi i take cold backup of my 9i database .... in case my database is up ..... how will i recover my database if i lose a single database file and i want to recover it from cold backup...... Thanks in advance Gagan

  • WCS 6.0.170.0 moving building to campus map

    I've got a lot of building registered in the WCS I'm working with. I've now started the process of adding campus maps and would like to place the excisting buildings on that map somehow. Is this possible at all or do you always have to create campus

  • Find the reason for ClassNotFoundException

    Hello together, we have a problem with an ear application on an WebLogic server that runs with jRockit. The exception is: [ServletContext@31470652[app:XYZ module:/XYZ path:/XYZ spec-version:2.5 version:V2.0]] Root cause of ServletException. oracle.ad

  • What is a good partition size

    I am bootcamping because I want to play games. I want to play games on the windows partition and work on the mac partition but I am unsure of the partition sizes I should use. please help