Message Mapping using UseOneAsMoney

Hi Experts,
I am doing the Message Mapping as mentioned in the below blog. I am getting the Error as
05:15:46 Start of test
Exception:[com.sap.aii.mappingtool.tf7.FunctionException: Too few values in the first queue in function useOneAsMany. It must have the same number of contexts as the second queue] in class com.sap.aii.mappingtool.flib7.NodeFunctions method useOneAsMany[[Ljava.lang.String;@478d13c, [Ljava.lang.String;@17f0bc6f, [Ljava.lang.String;@3de327b0, com.sap.aii.mappingtool.tf7.rt.ResultListImpl@c42b38e, com.sap.aii.mappingtool.tf7.rt.Context@6f1a35eb]
com.sap.aii.utilxi.misc.api.BaseRuntimeException: Exception:[com.sap.aii.mappingtool.tf7.FunctionException: Too few values in the first queue in function useOneAsMany. It must have the same number of contexts as the second queue] in class
I have searched in other blog also and ended up with the same error. Please check and do the needful.
The Basic Problem
We have an IDoc ORDERS05 with purchase order information where each purchase order line item (represented by segment .<E1EDP01>) can contain multiple schedule lines (represented by segment <E1EDP20>). For example, we have 2 line items with 3, resp. 2 schedule lines. Then the corresponding portion of message ORDERS05 can look as follows:
   <E1EDP01>
      <POSEX>00010</POSEX>
      <E1EDP20 SEGMENT="1">
         <WMENG>15</WMENG>
      </E1EDP20>
      <E1EDP20 SEGMENT="1">
         <WMENG>44</WMENG>
      </E1EDP20>
      <E1EDP20 SEGMENT="1">
         <WMENG>3</WMENG>
      </E1EDP20>
   </E1EDP01>
   <E1EDP01>
      <POSEX>00020</POSEX>
      <E1EDP20 SEGMENT="1">
         <WMENG>32</WMENG>
      </E1EDP20>
      <E1EDP20 SEGMENT="1">
         <WMENG>12</WMENG>
      </E1EDP20>
   </E1EDP01>
We want to map the information of the IDoc ORDERS05 to the message OrderCreate of the CIDX v4.0 standard. This message uses a more flat
structure where the purchase order line items and the corresponding schedule lines are on the same level. The corresponding portion of the
message OrderCreate (for the same information as in the IDoc) looks as follows:
   <OrderCreateProductLineItem>
<PurchaseOrderLineItemNumber>00010</PurchaseOrderLineItemNumber>
      <ProductQuantity>15</ProductQuantity>
   </OrderCreateProductLineItem>
   <OrderCreateProductLineItem>
      <PurchaseOrderLineItemNumber>00010</PurchaseOrderLineItemNumber>
      <ProductQuantity>44</ProductQuantity>
   </OrderCreateProductLineItem>
   <OrderCreateProductLineItem>
      <PurchaseOrderLineItemNumber>00010</PurchaseOrderLineItemNumber>
      <ProductQuantity>3</ProductQuantity>
   </OrderCreateProductLineItem>
   <OrderCreateProductLineItem>
      <PurchaseOrderLineItemNumber>00020</PurchaseOrderLineItemNumber>
      <ProductQuantity>32</ProductQuantity>
   </OrderCreateProductLineItem>
   <OrderCreateProductLineItem>
      <PurchaseOrderLineItemNumber>00020</PurchaseOrderLineItemNumber>
      <ProductQuantity>12</ProductQuantity>
   </OrderCreateProductLineItem>
The data in red correspond to data of the segment <E1EDP01>, while the information in blue correspond to data of the segment <E1EDP20> of the original IDoc. Note that the data in red need to be duplicated based on the occurence of segment <E1EDP20>.
Solution 1
A simple solution of this mapping problem exists under the assumption that in the IDoc ORDERS05 each segment <E1EDP01> contains at least one segment <E1EDP20>. Luckily this assumption holds true for IDocs created via the purchase order creation process in ERP.
1. Mapping of <OrderCreateProductLineItem>
The segment <OrderCreateProductLineItem> of the target structure needs to be created once for each occurrence of segment <E1EDP20> of our source structure. This can easily be achieved via the following mapping:
Remember to change the context to IDOC.
2. Mapping of <PurchaseOrderLineItemNumber>
Since the information for the node <PurchaseOrderLineItemNumber> comes from the IDoc segment <E1EDP01>, this node needs to be replicated based on the occurrence of segment <E1EDP20> under each segment <E1EDP01>. This can be achieved using the node function useOneAsMany as follows:
I will not describe the functionality of the node function useOneAsMany in detail since there is a lot of excellent documentation available on this function, for example in the SAP help . In our scenario you only need to change the context of the second input parameter to E1EDP01.
With the sample input from above, the function useOneAsMany will give the following result:
3. Mapping of <ProductQuantity>
Since the <ProductQuantity> is derived from a value of the IDoc segment <E1EDP20> the mapping for this field is trivial (remember that <ProductQuantity> must occur once per <E1EDP20> segment):
Please check the error and guide me how to proceed further.
Regards,
GIRIDHAR

Hi
The problem is that you the first and second input queue of UseOneAsMany function does not have the same number of context changes.
Do your mapping like this
E1EDP20(set context to Idoc level )----> OrderCreateProductLineItem
First input of UseOneAsMany   --->POSEX ( set context to E1EDP01)
Second input of UseOneAsMany--->  E1EDP20 ( set context to E1EDP01 )
Third  input of UseOneAsMany--->  E1EDP20 ( set context to E1EDP01 )
Then after UseOneAsMany use removeContext--->SplitByEachValue--->PurchaseOrderLineItemNumber
WMENG ( set context to E1EDP20) ----> ProductQuantity
This will give you the output in the format you are asked for.
Let me know if any issues.

Similar Messages

  • Is it possible to do message mapping using different namespace message type

    Hi all,
    Is it possible to do message mapping using different namespaces message types
    Example :
    i am having message type MT_1 in namespace http://sap.com/abc
    and second message type MT_2 in namespace http://partner.com/xyz
    so MT_1 can be mapped with MT_2 or not having different namespace.
    Thanks

    Read through my reply in this thread for Defining Software component dependencies.
    Though it explains this for Improted Archives, it also holds true for Message Types to be used in message mappings.
    Re: Payload Extraction
    Regards
    Bhavesh

  • Message-Mapping: Use same RFC lookup for different target fields

    Hello,
    I need to apply an RFC Lookup which delivers a boolean flag back (true or false). This RFC lookup should be used for different target fields.
    Is there a way to execute the RFC lookup just once and then store the result in an internediate variable that I can use for all futher checks for different target fields?
    If this is not possible and I have to apply the RFC lookup for all necessary target fields is it then executed for each target field ? This is exactly what I want to avoid in order not to slow down performance.
    The input parameter (=source field value) would be the same.
    Thank you for your advice!

    Exactly.
    Here is a UDF example I have that you could adapt to your needs.
    Set
    public String setCounter(String a,String b,Container container){
    /* Store values in global datacontainer
    a: mapping value and return valueparameter
    b: name for stored value parameter
    GlobalContainer myGlobalContainer;
    myGlobalContainer = container.getGlobalContainer();
    myGlobalContainer.setParameter(b.toUpperCase(), a);
    return a;
    Get
    public String getCounter(String a,Container container){
       //write your code here
    GlobalContainer gc = container.getGlobalContainer();
    if (gc.getParameter(a) != null) {
      return String.valueOf(gc.getParameter(a));
    } else {
    return "1";

  • Message Mapping using Left justified, right blank/space filled

    Hi,
    My Interface is outbound Interface.
    Suppose source field named 'Filename' is mapped with Target field named 'Filename'.Condition is AS IS(Left justified, right blank/space filled).
    How should i do this mapping?

    Hi Sanghamitra Duttagupta,
                                                you can try this UDF below
    public static String fieldJustified(String s)
              try
                   final int fieldLength=20;
                   char filler=' ';
                   s=s.trim();
                   int l=s.length();
                   while(l<fieldLength)
                        s=s+filler;
                        l++;
              catch(Exception e)
                   return s;
              return s;
    Please reset the value of the variable "fieldLength",  in code above to the field length as per your need. The right side will be filled with extra spaces since value of "filler" variable is ' '. you can set this to any character of your choice so that total field length is equal to value of variable "fieldLength" (which is 20 here).
    so if input is  "        hi"
    output           "hi                  "
    regards
    Anupam
    Edited by: anupamsap on Aug 1, 2011 1:53 PM

  • Using Right-justified and left zero-filled condition in message mapping of

    Hi,
    My Interface is outbound Interface.
    Suppose source field named 'MobNumber' is mapped with Target field named 'MobileNumber'.Condition is AS IS(Right-justified and left zero-filled).
    How should i do this mapping?
    Thanks,
    Sanghamitra

    Hi Sanghamitra,
         Similar question ahs been answered earlier in this thread
    Re: Message Mapping using Left justified, right blank/space filled
    just replace the filler variable by zero in my post
    One small request, if you think your questions are being answered correctly and properly, please kindly, if possible, close down the threads. This way forum members/users  who later look up for solutions to similar problem, they know for sure that the problem was finally solved, with the solutions provided in the thread.   
    regards
    Anupam
    Edited by: anupamsap on Aug 3, 2011 11:27 AM

  • Problems using very large XSD in Message Mapping - POSLog

    Hi,
    I am trying to build a message mapping based on an external definition (.xsd) downloaded from the ARTS webpage (Association for Retail Technology Standards). In PI (7.0) I am able to succesfully create an External Definition based on the downloaded XSD. The resulting external definition syntax checks ok and contains the message type POSLog.
    Next I try to create a message mapping using the external definition as the source message type. This is where it all starts to wrong. When I select the external definition as the source message type PI seems unable to complete the task, I get an hour glass. No matter how long I leave it in this state, it never comes back.
    I'm thinking because the xsd is so large PI is having problems trying to render the mapping. I am working over a VPN but cannot see any network traffic. Windows task manager shows that process javaws is taking up the majority of the processing. My laptop slows to a crawl until I kill the repository. Though my laptop only has 504Mb of RAM we have another with 1Gb which has the same problem.
    Any ideas? The exact same xsd can be downloaded from...
    http://www.nrf-arts.org/
    ARTS Standards -> ARTS XML
    All public shemas -> download
    download the POSLog schema (which is free) not the documentation.
    Any help appreciated.

    Thanks Patrick,
    That did the trick and I like the idea of changing a local copy of the jnlp file. Finally had to run the task on a laptop with 2Gb of RAM with heap-size = 1536m and sap.theme = Tradeshow (not sure if this helps).
    It is still very slow moving around the graphical mapping so I have placed an order for more RAM (upto 4Gb). I think Win32 can use upto 3.5 Gb so i'm hoping for a further improvement.
    It is a ludicrously large xsd.
    Thanks Again
    Surbjeet

  • PI 7.11: IDoc Message mapping

    Hi there,
    I'm currently working on a graphical message mapping using IDoc HRMD_A06 as source structure (HR master data transferred via PFAL).
    In my result structure I have to fill a field CostCenter with the following logic:
    If field KOSTL (cost center) is filled in node E1P0315, map this field to CostCenter in result structure, otherwise take KOSTL of node E1P0001.
    The end date (ENDDA) has to be '99991231' in each case.
    This is how the result structure looks like:
    <e>                       [1...1]
      <CostCenter>            [1...1]
    </e>
    This is the simplified source structure:
    <E1PLOGI SEGMENT="1">
      <E1PITYP SEGMENT="1">                        [0...n]
         <E1P0001 SEGMENT="1">                     [0...n]
           <INFTY>0001</INFTY>                     [0...1]
           <ENDDA>99991231</ENDDA>                 [0...1]
           <KOSTL>0000012345</KOSTL>               [0...1]
        </E1P0001>
      </E1PITYP>
      <E1PITYP SEGMENT="1">                        [0...n]
        <E1P0315 SEGMENT="1">                      [0...n]
          <INFTY>0315</INFTY>                      [0...1]
          <ENDDA>99991231</ENDDA>                  [0...1]
          <KOSTL>0000024001</KOSTL>                [0...1]
        </E1P0315>
      </E1PITYP>
    </E1PLOGI>
    How can I do the check if field KOSTL of node E1P0315 is null?
    I've tried an existence check for the whole node (E1P0315->exists), but then it fails, because all E1PITYP nodes are processed.
    I hope my problem is clear to you.
    Would it be better to use another mapping type?
    As I'm an ABAP developer, I would of course prefer some lines of code to this graphical drag&drop thing.
    Thanks in advance!

    Cheers, guys!
    I did it now like that:
    http://www.abload.de/image.php?img=mappingflknz.jpg
    Click on the image to enlarge it!
    The logic is as following (ABAP Pseudo-code ):
    IF 0315_KOSTL and 0315_ENDDA are populated.
      IF 0315_ENDDA equals '99991231'.
        map 0315_KOSTL to Cost_Center.
      ENDIF.
    ELSE.
      IF 0001_KOSTL and 0001_ENDDA are populated.
        IF 0001_ENDDA equals '99991231'.
          map 0001_KOSTL to Cost_Center.
        ENDIF.
      ENDIF.
    ENDIF.
    Is that a good way to do that mapping?
    Do I also have to use the removeContexts function or is it ok like that?
    Could I also do that with an ABAP mapping program?
    Thanks in advance!

  • Can I find out the full filename of input file in message mapping?

    I have in XI 2.0 the following scenario :
    In the inbound fileadapter I read my input file. The filename of the input file is part fixed, part variable (Like INDATA01.txt, INDATA03.txt, etc).
    So in my Adapterconfiguration, I specify the filename with a wildcard (INDATA*.txt).
    What I now want to do, is in my Message Mapping use the full filename , so I can do something different for every filenumber. Is there a way where I can get the full filename available in my message mapping (I did not find the filename in the XML in the message trace).

    You're backing up hundreds or thousands of files:  There's the catalog (database) itself and also the media files. 
    In PSE10, when doing a backup, PSE displays the size of the backup before you begin the actual backup:
    I assume PSE8 will have something similar.
    Ken

  • Accessing Element's name in Message mapping

    Hi,
       I need to Access the Element's name in Message mapping (Using graphical tool or in user defined function).
    For Example:
    Element: <Company_Name>XYZ Co </Company_Name>
    I need to access the Element's name(i.e.)<b>"Company_Name"</b>. So that I can map it as
    <Element>Company_Name</Element>
    <Element_Value>XYZ Co </Element_Value>
    in the target message.
    Kindly provide your inputs.

    Hi Santhosh,
    I am not sure if this can be done using your Graphical Mapping, but this is possible using JAVA mapping. Your SAX and DOM parsers for JAVA mapping provides methods like getChildNodes, getElementName using which you can get the name of the element.
    Check this link for the methods available for Java Mapping,
    http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/package-summary.html
    I think the same can also be done using XSL mapping. Though, I am not sure what method should be used for the same.
    Hope this helps,
    Regards,
    Bhavesh

  • MESSAGE MAPPING FROM SQL TO RFC(BAPI)

    Hello Guys,
    Im just new here in SAP XI version 7.0 . Can anyone teach me how to map objects using IR (design) between sender (data coming from sql 2005) and receiver (using Bapi_Salesorder_Createfromdat2)?
    there are only specific fields i need to transfer the data like the followings :
    do i need to map all fields from sender to receiver?tell me how..
    *ORDER_HEADER_IN
    -DOC_TYPE = ZTRV
    -SALES_ORG =4000
    -DISTR_CHAN =40
    -DIVISION=41
    -SALES_OFF=4101
    -SALES_GRP=411
    -PURCH_NO_C='TEST TPL1' (MUST BE UNIQUE)
    -PMNTTRMS =Z015
    -PURCH_DATE=09/04/2008
    *ORDER_PARTNERS
    -PARTN_ROLE= AG
    -PARTN_NUMB=1100074
    Thanks in advance
    aVaDuDz

    Hi,
    Create :
    1. Source & Target Data Types
    2. Messge Type (for source & target data types)
    3. Two Message Interface for using above message types
    4. One Message mapping using source & target message Type
    5. One Interface mapping.
    In message mapping just map those field which you require. You can leave rest of the fileds un mapped at source which are not required to map.
    Regards,
    Sarvesh

  • Function Module Undefined during message mapping.

    Hi,
    My Scenario is Idoc to Multiple Files without any condition i have to drop 2 files at the 2 differient directories of  FTP,
    So we are using PI 7.1 and in the Message Mapping using Signature Tab we have added 2 Target messages and at the source we have used the IDOC.
    When we see the structure under Definition Tab in Message Mapping, We are facing the below error
    "FUNCTION MODEL UNDEFINED"
    So can anyone suggest what could be the problem, do i need to change any occurence in the signature tab for the message types else what shuld i do to get the structures in the Definiton Tab.
    Please suggest how to approach this..
    Thanks,
    --Kishore

    My Scenario is Idoc to Multiple Files without any condition i have to drop 2 files at the 2 differient directories of FTP,
    1. Use multi mapping - /people/jin.shin/blog/2006/02/07/multi-mapping-without-bpm--yes-it146s-possible
    2. use two different inbound interfaces, and do two different interface determination without conditions for the same receiver determination

  • Unable to select IS from the drop down list in message mapping

    Hi,
    i  know that we can monitor 'Integration server' in message monitoring rather than choosing integration engine or adapter engine.
    But in our existing land scapes i am unable to select IS from the drop down list in message mapping.
    using PI 7.1 SP 08.
    please let me know that we need to set up additional configurations settings to select IS form drop down list.
    Regards,
    Pradeep A.

    Hi Pradeep,
    please let me know that we need to set up additional configurations settings to select IS form drop down list.
    There are no extra settings that needs to be done for this. I don't know whether you have noticed this, but IS option will only come up when you want to monitor the messages from the "Database" and not from the "Database overview" or "Archive".
    Regards,
    Neetesh

  • Message Mapping from flat XML to a Record structure

    Hi All,
    We have a scenario in which the input message is a PDF document. we are following below the blog to convert PDF to XML format which uses <b>PDF box utitlity</b>.
    /people/sap.user72/blog/2005/07/31/xi-read-data-from-pdf-file-in-sender-adapter
    We are able to convert the PDF doc to a flat XML file.
    Now we have the following queries...
    what are the different ways to map the flat XML to our record structure?
    Do we have any utitlity in PDF box to do that?
    Regards,
    Rakesh.

    Hi Rakesh,
    You have Graphical mapping, Java mapping, ABAP mapping and XSLT mapping. The choice depends on the scenario and what target result you require.
    <b>Message mapping using graphical mapping editor:</b>
    http://help.sap.com/saphelp_nw04/helpdata/en/49/1ebc6111ea2f45a9946c702b685299/frameset.htm
    <b>XSLT mapping:</b>
    http://help.sap.com/saphelp_nw04/helpdata/en/73/f61eea1741453eb8f794e150067930/frameset.htm
    <b>Java Mapping:</b>
    http://help.sap.com/saphelp_nw04/helpdata/en/e2/e13fcd80fe47768df001a558ed10b6/frameset.htm
    <b>ABAP mapping:</b>
    http://help.sap.com/saphelp_nw04/helpdata/en/ba/e18b1a0fc14f1faf884ae50cece51b/frameset.htm
    As said earlier, graphical mapping is the simplest and quite a few built in options are available with it, explore it and see which is suitable for your scenario.
    Regards,
    Chandra

  • SOAP lookups from withing message mapping

    Hi
       We are doing a call to a webservice from within a udf in a message mapping using the SOAP API described in one of the blogs in SDN. We are using a soap receiver communication channel to make this webservice call -
    We see activity on the communication channel monitoring - indicating that there is a call going out and a response coming back from the webservice. But there are no details shown on the payload in communication channel monitoring. We do not see this webservice lookup as a message on the adapter engine either ?
    Is there any place from within XI runtime environment we can get a hold of the message going out to webservice call and the return from webservice ?  We are facing problems in the webservice not doing the required action desired and hence this question on visibility of the call to the webservice.
    Thanks in advance for your time.

    My udf is basically makes a call to the webserservice lookup method ( line - CallCentralMonitoring.LogToCentralMonitoring( "IN130.10", "COMPLETED"); ) - the definition of CallCentralMonitoring class is given below after the udf
    UDF
    String adapter = "RECEIVE_FusionDBLookUpRequest";
    Channel channel = null;
    boolean retry = false;
    int noOfRetries = 0;
    String sqlQuery = new String("");
    DataBaseAccessor accessor = null;
    DataBaseResult resultSet = null;
    String parameterValue = new String("");
    MappingTrace trace = container.getTrace();
    // Build the Query String
    //sqlQuery = "select * from CTL_BusinessRules with (nolock) where parameter_key = '" + parameterKey + "'";
    sqlQuery = "exec uspCTL_GetBusinessRule '" + parameterKey + "'";
    do
         try
              //trace.addInfo( "SQL query is: " + sqlQuery);
              // Determine a channel, as created in the Configuration
              channel = LookupService.getChannel(businessService,adapter);
              // Get a system accessor for the channel. As the call is being made to a DB, a DatabaseAccessor is obtained.
              accessor = LookupService.getDataBaseAccessor(channel);
              //trace.addInfo( "Successfully obtained the system accessor..." );
              // Execute Query and get the values in resultset
              resultSet = accessor.execute(sqlQuery);
              Iterator rows = resultSet.getRows();
              //trace.addInfo( "Executed query successfully..." );
              while( rows.hasNext() )
                   Map rowMap = (Map)rows.next();
                   parameterValue =  rowMap.get("CHARACTER_VALUE").toString();
                   //trace.addInfo( "Parameter Value is: " + parameterValue );
              retry = false;
              CallCentralMonitoring.LogToCentralMonitoring( "IN130.10", "COMPLETED");
              return parameterValue;
         catch( Exception ex )
              //trace.addInfo( ex.toString() );
              if ( noOfRetries < 3 )
                   retry = true;
                   noOfRetries++;
              else
                   retry = false;
                   CallCentralMonitoring.LogToCentralMonitoring( "SD152.01", "Error");
                   ExceptionThrower.fire( "Database connectivity error: " + ex.toString() );
         finally
              try
                   if ( accessor != null ) accessor.close();
              catch( Exception e )
                   ExceptionThrower.fire("Error closing accesor: " + e.getMessage() );
                   //return e.getMessage();
    } while( retry );
    return null;
    Class CallCentralMonitoring
    package com.xxxxx.xi.mapping.udf;
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import com.sap.aii.mapping.lookup.Channel;
    import com.sap.aii.mapping.lookup.LookupException;
    import com.sap.aii.mapping.lookup.LookupService;
    import com.sap.aii.mapping.lookup.Payload;
    import com.sap.aii.mapping.lookup.SystemAccessor;
    import com.sap.aii.mapping.lookup.XmlPayload;
    public class CallCentralMonitoring {
         public static void LogToCentralMonitoring (String MON_EISLDCTLID, String MON_MsgStatus)  {
              String soapXML = new String("");
              /* Pass the Business System and Communication Channel as  input to the getChannel().
              /* BS_SOAPLOOKUP – Business System*CC_Webservice_SOAP_CURRENCY_CONVERTOR – Receiver SOAP Adapter */
              Channel channel = null;
              try {
                   channel = LookupService.getChannel( "EI_CentralMonitoringServives", "Receive_SOAP_TrackingServiceWS" );
              } catch (LookupException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              SystemAccessor accessor = null;
              try {
                   accessor = LookupService.getSystemAccessor(channel);
              } catch (LookupException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
              /* Construct the SOAP Request Message using the InputParameters */          
              soapXML = "<LogToCentralMonitoring xmlns=\"http://xxxxx.EI.CentralMonitoring\"> <loggingData> <MON_EISLDCTLID>"
               + MON_EISLDCTLID
               + "</MON_EISLDCTLID><MON_ProgramID>"
               + MON_EISLDCTLID
               + "</MON_ProgramID><MON_ProcessID>"
               + MON_EISLDCTLID
               + "</MON_ProcessID><MON_ClientAlert>"
               + "N"
               + "</MON_ClientAlert><MON_MsgStartTimeStamp>"
               + "03/30/2007 10:00:00"
               + "</MON_MsgStartTimeStamp><MON_MsgEndTimeStamp>"
               + "03/30/2007 10:00:01"
               + "</MON_MsgEndTimeStamp><MON_MsgStatus>"
               + MON_MsgStatus
               + "</MON_MsgStatus><MON_MsgStatusDescription>"
               + MON_MsgStatus
               + "</MON_MsgStatusDescription> </loggingData> </LogToCentralMonitoring>";
              InputStream inputStream = new ByteArrayInputStream(soapXML.getBytes());
              XmlPayload payload = LookupService.getXmlPayload(inputStream);
              Payload soapOutPayload = null;
              /The SOAP call is made here and the response obtained is in the soapOutPayload./
              try {
                   soapOutPayload = accessor.call(payload);
              } catch (LookupException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
         }//end LogToCentralMonitoring
    }//end class

  • Parameterized Message Mapping (RFCLookup) test in ESB message behaviour

    Hi Gurus,
    I am using parameterized message mapping using RFCLookup function
    In the TEST tab of the mapping, I've provided my test xml instance message and inputted the Message Mapping Parameter (MMP) value with the RFC Receiver Communication Channel I am using,
    looking at the Trace level in the editor, the source field value was put to the RFC as the import parameter, but the mapping fails with error that the RFC returned my defined exception (no POnumber available for MaterialNumber) --> which is not the expected result because in the ERP backend there is an existing PO for the material.    I tested the RFC in the backend ERP itself and it is performing ok, with a PO number returned for the material (testing in SE37)
    I checked on the Comm Channel and my message is being passed to the RFC adapter, but up to this point only:
    RfcAdapter received a synchronous message. Trying to send sRFC for Z_RFC_NAME.
    RfcAdapter received a synchronous message. Trying to send sRFC for PIREPUSER.
    I have created the Binding for the Operation Mapping.
    Would any of you have an idea on what is missing or what is wrong?
    P.S.   my RFC has a defined exception in it, but currently I am not using it in the RFCLookup  mapping (unchecked "Use Exception" checkbox)

    Hi All,
    Solved the issue by passing the complete length of input parameter as defined in my RFC, e.g. input param in RFC is TYPE to a 12 char field, and the input parameter value being passed by the IDoc is only 6 chars.
    In this case i used formatNumber function to put leading zeroes to complete the input parameter length
    sourceField -->formatNumber --> RFCLookup --> targetField
    Weird behaviour though is that even if my message is successfully received in the receiving system, the RFC CommChannel that my RFCLookup is using is still only showing this:
    2010-12-01 23:14:32 Information RfcAdapter received a synchronous message. Trying to send sRFC for Z_FM_NAME.
    2010-12-01 23:14:32 Information RfcAdapter received a synchronous message. Trying to send sRFC for J2EE_GUEST.
    Why isn't the whole request response of the RFC captured by the RFC adapter?  (e.g. MDT has status DLVG, DLV...)

Maybe you are looking for