RFC Call in Message Mapping

Hi there
I am trying to do a table lookup from XI in my message mapping by calling an remote RFC. The return values must return ALL the value for a specific column. The code I have here returns a blank value. Can someone see what my problem may be?
My variables for my UDF is:
public String UDF_RFC(String DBTABLE,String MATNR,String FIELDS,String businessSystem,String communicationChannel,Container container)
And my Code:
"My code appears to mess up my message structure, I will attach it in a responce..
Thanks,
Jan
Edited by: Jan de Lange on Sep 16, 2009 11:09 AM
Edited by: Jan de Lange on Sep 16, 2009 11:09 AM

// declare parameters
String returnValue = "";
String rfcXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns0:ZINT_XI_GET_SITES xmlns:ns0=\"urn:sap-com:document:sap:rfc:functions\"><LT_SITES><item><WERKS></WERKS></item></LT_SITES></ns0:ZINT_XI_GET_SITES>";
AbstractTrace trace = container.getTrace();
RfcAccessor accessor = null;
ByteArrayOutputStream out = null;
try
// 1. Determine a communication channel (Business system + Communication channel)
Channel channel = LookupService.getChannel(businessSystem,communicationChannel);
// 2. Get a RFC accessor for the channel.
accessor = LookupService.getRfcAccessor(channel);
// 3. Create an XML input stream that represents the RFC request message.
InputStream inputStream = new ByteArrayInputStream(rfcXML.getBytes());
// 4. Create the XML Payload
XmlPayload payload = LookupService.getXmlPayload(inputStream);
// 5. Execute the lookup.
Payload result = null;
result = accessor.call(payload);
InputStream in = result.getContent();
// 6. Create a DOM structure from the input XML
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(in);
NodeList      nodelist = document.getElementsByTagName("*");
Node          node;
Element       element;
NamedNodeMap  nnm = null;
String attrname;
String attrval;
int    i, len;
len = nodelist.getLength();
for (int j=0; j < len; j++) {
            element = (Element)nodelist.item(j);
            System.out.println(element.getTagName() + ":");
            nnm = element.getAttributes();
        if (nnm != null) {
            for (i=0; i<nnm.getLength(); i++) {
                node = nnm.item(i);
                attrname = node.getNodeName();
                attrval  = node.getNodeValue();
                returnValue += attrname + " = " + attrval + "##";
// 7. To free resources, close the accessor..
if (accessor!=null) {
try {
accessor.close();
} catch (LookupException e) {
trace.addWarning("Error while closing accessor " + e.getMessage() );
} catch (Exception e) {
trace.addWarning("Error" + e);
// 8. return a single id value to the message mapping
return returnValue;

Similar Messages

  • RFC lookUp during Message mapping

    All
       I want to get soem values from SAP table during message mapping.After getting the values am going  to do 2:1 mapping by using BPM.
      Could you please let me know the basic and fundamental things about RFC look up during mapping and RFC settings in XI as well in R3?
    Please explain

    Hi Rajesh,
    Pl post this in XI Forums to get quick replies.
    Regards
    Ayyapparaj

  • XML pay load for RFC call in java mapping

    Hi,
    I searched in many forums about the payload to be given for RFC Lookup from a functional module,but i think i am not able to get it correct.
    Can any one please give me the exact structure of XML Payload to be sent while invoking the function module via RFC LOOKUP
    Say i have 2 import parameters(input1,input2) and one output(output1)......
    Thanks in advance,
    H.L.Babu

    >
    hlbabu123 wrote:
    > Hi,
    > I searched in many forums about the payload to be given for RFC Lookup from a functional module,but i think i am not able to get it correct.
    >
    > Can any one please give me the exact structure of XML Payload to be sent while invoking the function module via RFC LOOKUP
    >
    > Say i have 2 import parameters(input1,input2) and one output(output1)......
    >
    > Thanks in advance,
    > H.L.Babu
    have a look at this document - https://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/a03e7b02-eea4-2910-089f-8214c6d1b439&overridelayout=true
    in case u still have issues do get back

  • Skip record in message mapping

    I have scenario where I am doing a RFC call in message mapping.Based on the result I need to create
    IDOC.If result does not meet the condition then I dont have to create IDOC for that record.
    Is any thing can be worked out that I can skip those
    records which does not meet condition in message mapping.
    Any help is appericiated.
    Rekha.

    Rekha,
    You need to use the BPM to check your RFC return data.
    Then you can have the logic to create / Not create the IDoc.
    Are you using XI 3.0?
    Regards,
    Simon

  • RFC calls from XI to r/3 inside mapping

    Hi All,
    We have a interface where we make a call to BAPI in R/3.This interface in production runs almost 75 times/ hour on an average.
    Kindly let me know will there be any performance issues from R/3 or XI on the same.
    thanks!!
    regards,
    rajesh

    Hi Rajesh,
    Could you please eloborate your reuirement,
    in  existing interface there is a RFC look in message mapping right?? if my understanding correct There is no perfromance issue from R/3 point of view,even XI point of view also it will work .
    but how you perfromed RFC lookup?? like calling RFC receiver communication channel from UDF ?? but better to follow good JAVA coding standards.
    Regards,
    Raj

  • Can we call a Java Map in Message  Map

    Hello,
    Can we call a Java Map in Message  Map
    Thanks and Regards
    Hemant

    Hello Vijay,
    I think this is your code:
    import com.sap.aii.mapping.api.StreamTransformation;
    import com.sap.aii.mapping.api.AbstractTrace;
    import com.sap.aii.mapping.api.StreamTransformationConstants;
    import java.util.Map;
    import java.io.*;
    public class PayloadToXMLField1 implements StreamTransformation {
        String strXML = new String();
       //Declare the XML tag for your XML message
       String StartXMLTag = "<DocumentBody>";
       String EndXMLTag = "</DocumentBody>";
       //String StartXMLTag1 = "<Code>";
       //String EndXMLTag1 = "</Code>";
        AbstractTrace trace;
        private Map param = null;
        public void setParameter(Map param) {
            this.param = param;
        public void execute(InputStream in, OutputStream out) {
            trace =
                (AbstractTrace) param.get(
                    StreamTransformationConstants.MAPPING_TRACE);
            trace.addInfo("Process Started");
            try {
                StringBuffer strbuffer = new StringBuffer();
                byte[] b = new byte[4096];
                for (int n;(n = in.read(b)) != -1;) {
                    strbuffer.append(new String(b, 0, n));
                strXML = strbuffer.toString();
            } catch (Exception e) {
                System.out.println("Exception Occurred");
            String outputPayload =
                StartXMLTag
             + "<![CDATA["
             + strXML
             + "]]>"
             + EndXMLTag;
            try {
                out.write(outputPayload.getBytes());
             trace.addInfo("Process Completed");;
            } catch (Exception e) {
                trace.addInfo("Process Terminated: Error in writing out payload");;
    I need this code to be converted in UDF if Java map cannot be called in Message Map.
    Can anyone help me how to write UDF for the same java map.
    Thanks and Regards
    Hemant

  • Message mapping RFC lookup

    Hi.
    I'm trying to do a RFC inside a message mapping with java code. I have to send a field (id) and return the vendor code (lifnr).
    I'm searching michal Krawczyk's weblog to see how can i do that but the link is broken.
    Does anybody has that document that can send me to [email protected]?
    Regards.
    Inigo.

    hi Inigo,
    please look at the following blogs,
    /people/sravya.talanki2/blog/2005/12/21/use-this-crazy-piece-for-any-rfc-mapping-lookups
    /people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
    /people/michal.krawczyk2/blog/2005/09/15/xi-rfc-mapping-lookups-from-bc-to-xi
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/uuid/801376c6-0501-0010-af8c-cb69aa29941c
    /people/alessandro.guarneri/blog/2006/03/27/sap-xi-lookup-api-the-killer
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/uuid/801376c6-0501-0010-af8c-cb69aa29941c
    /people/sravya.talanki2/blog/2005/12/21/use-this-crazy-piece-for-any-rfc-mapping-lookups
    /people/sravya.talanki2/blog/2005/12/21/use-this-crazy-piece-for-any-rfc-mapping-lookups
    Regards
    Sreeram.G.Reddy
    Message was edited by:
            Sreeram Reddy

  • RFC Lookup's in message mapping fail with RuntimeException for no reason

    Hi guys,
    We have developed interfaces that execute a lot of RFC's from Message Mapping, by making use of RFC Lookup API.
    In ID, in the corresponding RFC Receiver Communication Channel we have set the number of maximum connections to 100.
    However, when a big number of Idocs with lots of items is sent to XI some messages fail in XI because mapping fails with a runtime exception that is not correct, since there is a return value found from the execution of the RFC function. And when I am testing the mapping in Test mode of XI IR, the mapping is executed successfully.
    Do you think that by increasing the maximum number of connections in Communication Channel, it will take effect?
    Evaggelos

    Hi Evaggelos,
    DECREASE, may be til 10.
    Regards,
    Udo

  • Question on service userid - for RFC call

    Hi
       In XI 3.0 SP18 , we are making a RFC call from XI mapping runtime - to XI's ABAP stack - RFC function module . In the RFC receiver communication channel , I tried using service user XIISUSER , XIAPPLUSER for this RFC call - I got short dumps on XI ABAP stack mentioning that these two service users do not have authorization to make RFC calls -
    Does anybody out there know what service user on XI has RFC call authorization that can used to make RFC calls onto XI ABAP stack from its mapping runtime ?
    Correct answers will be rewarded rightaway. Thanks for your time in advance.

    Hi,
    u have to make entry in sld...
    Hi,,
    2 Introduction
    Configuring IDoc adapter in Exchange Infrastructure 3.0 requires some configuration on the SAP
    systems, for both XI and the backend system where the IDoc message is to be sent. These steps, although
    simple, are many times missed or mis-configured, causing the delivery of messages to fail.
    Since IDoc adapter uses the ABAP stack, instead of J2EE, the configuration requirements are mainly in
    ABAP.
    Setting up IDoc adapters requires the XI integration server to be able to communicate with the backend
    SAP system, and also to make sure that the Logical System Name used when posting IDoc exists on the
    backend SAP system.
    3 The Step By Step Solution
    The basic steps for the IDoc configuration are outline below:
    1. Configure SM59 on XI to communicate to SAP backend system.
    2. Configure port on XI for IDoc communication.
    3. Create or verify the Logical System Name on the SAP backend system.
    4. Create or verify business system in XI’s System Landscape Directory.
    5. Verify the Logical System Name of the business system.
    6. Verify or add the Logical System Name for the sender business system.
    7. Create/configure the Communication Channel for the IDoc receiver adapter
    3.1 Configure SM59 on XI to communicate to SAP backend system.
    1. Using transaction SM59, create an RFC destination with Connection Type = “3”.
    In this example, the RFC destination name is “NDVCLNT510”.
    2. Enter the logon information:
    3. Test the connection by clicking on “Testing connection” and “Remote logon”.
    Both must be successful.
    3.2 Configure port on XI for IDoc communication.
    4. Go to transaction IDX1 on XI, and create a port. In this example, the Port name is “SAPNDV”.
    • &#61472;The Port name must be in the form of “SAPxxx”, where xxx is the system ID of the backend SAP
    system.
    • The Client must be the client number of the backend SAP system.
    • Select the RFC Destination which was created in the previous step.
    3.3 Create or verify the Logical System Name on the SAP backend system.
    5. Enter transaction SALE on the SAP backend system.
    6. Create or verify the Logical System Name. In our example, NDVCLNT510 is verified.
    3.4 Create or verify business system in XI’s System Landscape Directory.
    The business system name for the SAP backend system must contain a valid Logical System Name. This Logical System Name is the one verified or created in the previous step.
    7. In the System Landscape Directory, select the SAP backend business system. If one does not exist, then create the business system. Verify the Logical System Name.
    3.5 Verify the Logical System Name of the business system.
    8. In the Integration Directory, doubleclick on the business system (in our example, it is NDVCLNT510).
    Navigate the menu:
    Service • Adapter Specific Identifiers.
    If information is empty or incorrect, then it will have to be synchronized with the content of the System Landscape Directory. Follow the steps below for synchronization.
    9. (Optional) Synchronization of the business system in Integration Directory to the business system in System
    Landscape Directory.
    • &#61472;Double-click on the business system in the Integration Directory.
    • &#61472;Switch to Edit mode.
    • &#61472;Select menu: Service • Adapter-Specific Identifiers
    10. (Optional) Within the dialog box, click on the button as indicated below to resynchronize.
    11. (Optional) If the expected data from the System Landscape Directory is not updated, then the SLD cache may need to be cleared first.
    3.7 Create/configure the Communication Channel for the IDoc receiver adapter.
    15. In the Integration Directory, create an IDoc receiver communication channel.
    • &#61472;The RFC Destination is from step 3.1.
    • &#61472;The Port is from step 3.2.
    NOTE:
    There is no need to create an IDoc sender Communication Channel for XI. Instead, the backend SAP system must be configure to send the IDoc to XI.
    4 Appendix
    Transaction: IDX2
    There are a couple of situation where IDX2 can be useful on the XI system.
    1. When we want to test connection between the XI and SAP backend system.
    2. When an IDoc has changed, and the meta data stored in XI needs to be update. When an IDoc is sent from the SAP backend system to XI, XI will first check to see if the meta data for the IDoc is already in its persistent cache. If not, then XI will use the configuration in IDX1 to retrieve the IDoc meta data from the backend system. If the
    meta is already in cache, then it will NOT do so. Therefore, when an IDoc has changed, it is necessary to manually update the new meta data on XI, or delete it from the cache, so that the latest version can be retrieved. IDX2 is used for this purpose.
    Go to transaction IDX2 and click on “Create”.
    Enter the IDoc Type and the Source Port as defined in step #2. Click “Continue”.If successful, the following will show up. If error occurs, then the IDX1 configurations will need to be re-checked.
    Reward points if find useful.

  • How can I access RFC data in transaction? (SAP to MII rfc calling)

    If I keep the incoming RFC calling by message rules with category, then using the message actions to handle, that is a solution.
    But if I want process the incoming RFC data in transaction directly, how can I get these data?

    You will need to define an XML typed Transaction input property for processing the message synchronously.  Then in the processing rule for this message you need to associate the proper transaction and map the parameter.
    So essentially the transaction and input parameter mapping in your message services processing rule replaces the category setup that you already have working.

  • How to implement validations in message mapping?

    Hi experts,
    I have a simple requirement:
    I have a simple synchronous scenario:
    SOAP -> XI -> RFC
    In a message mapping, one of the fields in the source message is of type String.
    However, the target application (RFC) does not expect a non-numeric characters in this string.
    My question is how can I perform the validation in XI and tell the sender that this field contains Non-numeric characters?
    Please help.
    Thanks.
    Ron

    > Ron,
    >
    > >>With a RunTime Exception thrown, how can I tell
    >  the sender an error has occured?
    >
    > Sure. You can do this with out a BPM. You need to
    > configure alerts for this. If you configure ALERTS
    > and SCOTT, this will send an email of the errors
    > occuring in your scenario.
    >
    > For configuring and trouble shooting alerts check
    > these
    >
    > https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/
    > 2327
    > https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/
    > 2328
    >
    > Regards,
    > Jai Shankar
    Hi Jai
    I already have alerts configured.
    But what I had in mind is to send a response to the sender (The sender is waiting for a reply since this is synchronous), instead of telling the sender through an alternative means such as email, sms, etc.
    Is this possible?

  • Retrive message mapping error from java class

    Hi,
    I'm trying to create a scenario that if exist an error in the message mapping step this error will be inserted in a Ztable. I'm thinking in to call to the message mapping from a java class to catch the exception and this java class will be used in the interface mapping.
    Is it possible? If yes, How to call the message mapping from java code?
    Exists other possible solution?
    I need to do it because we want store all mapping errors in a Ztable. (Customer requeriment)
    Thanks, in advance
    Jose Manuel

    you can throw generic exceptions from the message mapping like this - /people/michal.krawczyk2/blog/2007/04/26/xipi-throwing-generic-exceptions-from-any-type-of-mapping
    you can then decide how to handle these exceptions

  • Message mapping transformation error for RFC calls

    Hi,
    I am having a weird problem. recently client migrated the server and we started getting all possible errors in XI which we are able to fix. Now we have a strange problem in quality system alone where the bapi calls are made from QA11 and MIGO. The bapi call from MIGO is sucessfull but from QA11 it fails with below error
    com.sap.aii.utilxi.misc.api.BaseRuntimeException
    thrown during application mapping
    com/sap/xi/tf/_MP_RFC_PROXY_GOODS_RECEIPT_:
    RuntimeException in Message-Mapping transformatio~
    I checked in development system and production where it is sucessfull but in quality its failing. I checked the cache and refreshed for confirmation and checked the trace and log files but couldt find any solution. The call made from a test report is also sucesfull but only bapi calls from QA11 are failing.
    Note: i am using same bapi in MIGO and QA11 and the integration is same as well. There is no difference in data between 2 transaction just the trigerring point is differenct.
    I tested my message mapping, interface mapping and configuration as well with sample payload and they are working fine.
    I checked SDN and saw that similar issue is faced by others but no solution is provided.
    Regards,
    Jayaram
    Edited by: JAYARAM MAGANTI on Jun 9, 2009 1:14 PM

    Hi all,
    Has anyone ever faced this issue?
    i tried all the options that i think of and as a last attempt even restarted XI engine though it makes no sense. but still i am having the same issue.
    If anyone had come across similar kindly update the solution
    Jayaram

  • [RFC to File]Problem about Changing file name in message mapping.

    Hi,
    my problem:
        Type:RFC to File
        I change the file name in message mapping.
    when I call the RFC to send the data twice at the same time, both of the output file names are changed while I only want to change the second output file name.
        thanks
    Sam

    In my MM, the input values to these variables (var1, var2 and var3) are (<ZZCOMBI>array,G499999,END_FIFC0029) ,
    var1 is an array of input <ZZCOMBI> item list;
    var2 is get from a property file by call another UDF;
    var3 is constant value.
    the test input data :
    I send the data for the first time:
    - <rfc:Z_IFCFR821_ZIFCTT82100010 xmlns:rfc="urn:sap-com:document:sap:rfc:functions">
    - <T_ZIFCTS82100010>
    - <item>
    <ZZCOMBI>G000002G000002</ZZCOMBI>
    <ZZKYKBN>*</ZZKYKBN>
    <ENAME_VE />
    <ENAME_Z5 />
    </item>
    </T_ZIFCTS82100010>
    </rfc:Z_IFCFR821_ZIFCTT82100010>
    so the input values to these variables (var1, var2 and var3) are (G000002G000002,G499999,END_FIFC0029)
    the output file name(File1) :END_FIFC002920090413-171534-053.dat
    output record: G000002G000002
    because the data what I send is the last record, the system send the dummy data for the second time by program.
    - <rfc:Z_IFCFR821_ZIFCTT82100010 xmlns:rfc="urn:sap-com:document:sap:rfc:functions">
    - <T_ZIFCTS82100010>
    - <item>
    <ZZCOMBI>G499999</ZZCOMBI>
    <ZZKYKBN />
    <ENAME_VE />
    <ENAME_Z5 />
    </item>
    </T_ZIFCTS82100010>
    </rfc:Z_IFCFR821_ZIFCTT82100010>
    so the input values to these variables (var1, var2 and var3) are (G499999,G499999,END_FIFC0029)
    the output file name(File2) :END_FIFC002920090413-171533-928.dat
    output record: G499999
    I find that File2(20090413-171533-928) was ouput before File1(20090413-171534-053 ) from the time stamp.
    I am not sure about that "XI will create a message ID for each message and the messages are independent." as you mentioned above.
    Best regards
    Sam
    Edited by: YONGHE ZHOU on Apr 15, 2009 3:59 AM

  • RFC to SOAP Interface - Problem in Request Message Mapping

    Dear All,
    We are working on RFC to SOAP Scenario i.e. pulling out data from an WebService from SAP via PI.
    In Request Message Mapping, when the wsdl file is uploaded as Target Message, the wsdl request shows the nested elements like below.
    <Request>
       <Request_New>
          <PAR1>xyz</PAR1>
          <PAR2>123</PAR2>
       </Request_New>
    </Request>
    But the desired Request should go like below.
    <Request>
       <PAR1>xyz</PAR1>
       <PAR2>123</PAR2>
    </Request>
    Hence it gives an error saying that the tag Request_New does not exist.

    Dear All,
    Our target webservice cotains multiple methods.
    The every method contains its corresponding request, response and SQL ecxeption as messages.
    In case of request structures, every method (except crmPaymentReceived) contains more than 1 root element.
    So while calling those methods having more than 1 root element, the additional header tag will always appear(not avoidable) in the request coming from SAP PI.
    For Example,
    Request Structure for method u2018isLoginIdExistu2019 (having more than 1 root element)
    <?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
    <ns1:isLoginIdExistRequest xmlns:ns1="http://netpricing">      -
    >>>>>  u201CThis Header tag will always appear u201D
    <isLoginIdExistin0>asp</isLoginIdExistin0>
    <isLoginIdExistin1>1</isLoginIdExistin1>
    </ns1:isLoginIdExistRequest>
    </soap:Body>
    </soap:Envelope>
    For this method, we get the error(saying that ns1:isLoginIdExistRequest xmlns:ns1="http://netpricing" does not exists).
    Request Structure for method u2018crmPaymentReceivedu2019 (having only 1 root element)
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd=http://www.w3.org/2001/XMLSchema-instance xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
    <ns1:crmPaymentReceivedin0 xmlns:ns1="http://netpricing">false</ns1:crmPaymentReceivedin0>
    </soap:Body>
    </soap:Envelope>
    For this method, we get the success response.
    I tested their wsdl URL in XMLspy and wizdal(a wsdl testing tool), it shows request in the format having only root elements and not the header tags.
    But header tags will always appear when header tag contains more than 1 root element.
    Can anybody suggest me how do I tackle this?
    Thanks in Advance.

Maybe you are looking for

  • Why is Firefox 6.0.2 really slow compared to previous Firefox versions?

    After updating to Firefox 6.0.2 , all web pages to every place I visit takes a long time to load. No matter what I try, this version is slow! I have restarted Firefox in safe mode. I have disabled all add-on's and extensions. I have uninstalled and r

  • Visual attribute for records in MULTISELECT block

    Hi, For some type of records I need to set background colour yellow. The block has property set to QMSSO$MSEL_BLOCK. I am using below code for each field in the block displayed: POST_QUERY for the block: set_item_instance_property('block.column_name'

  • Approval notification with email

    i would like to set up approval notification with email. when searching in help.sap.com i did not find the information i need. does anyone know where to find the information to configure that in approval process notifications are sent per email?

  • SD Billing - Difficult requirement

    I have a typical requirement where the client works out of a customer location and has a maintenance contract running. For work orders against the contract, they currently absorb costs at each cost center. Based on a cost roll up at the end of the mo

  • Link on Jpeg

    I have a jpeg of a button . I want to put  text on it and then add a link and make it so it has change of text color on mouseover. I have tried every way I know of put can not get it to work THXS for the help Steve