Skip to Content

ABAP Proxies in XI(Client Proxy)

The other way of interfacing XI is through proxies. From WAS 6.20, proxy generation feature enables application systems to communicate with XI using proxies. Proxy generation enables you to create proxies in application systems. Proxies encapsulate the creation or parsing of XML messages and the communication with the relevant runtime components required to send or receive the messages.

Proxies

There are two types of Proxies.

1. Java Proxies.
2. ABAP Proxies.

Java proxies are used when java applications needs to send and receive data and ABAP proxies are used when ABAP applications needs to send and receive data. I am going to demonstrate a simple client proxy which sends the employee data to XI and it routes the information to a file.

We use two clients of XI here. Client 100 acts as XI server .Client 105 acts as a client ABAP proxy which sends employee information as a message to XI which routes the info to a file. Logical flow is depicted as shown below. Note that conversion of sending system format to XI specific format is not done at the outbound side of the XI server.

Demonstration of ABAP Proxy

Necessary integration repository objects are developed at the design time. The out bound client proxy message interface and message type is depicted as shown below.

Message Interface

Message Type

After the message interface is developed in the integration repository, proxy is generated on the client 100 using SPROXY transaction. SPROXY transaction lists all the message interfaces in the integration repository. We have to choose our message interface Proxy_Interface_OB and click Create.

Create Proxies

ABAP proxy will generate 3 objects :

1. ABAP Class ( ZBLOGCO_ Proxy_Interface_OB).

2. Structure for the message type in ABAP Data Dictionary (ZBLOGEMP_PROFILE_MSG).

3. Structure for the data type in ABAP Data Dictionary (ZBLOGEMP_PROFILE_DT).

Proxy Objects

Once the proxy objects are activated we can check the ZBLOGCO_Proxy_Interface_OB in the SE24 editor. Since the proxy message interface is asynchronous the ZBLOGCO_ Proxy_Interface_OB has EXECUTE_ASYNCHRONOUS and message type ZBLOGEMP_PROFILE_MSG as the importing parameter. With this proxy generation is over.

Activate Proxy

Proxy Class

ABAP Proxy Class(SE24)

Outbound  Proxy Mesage Structure

We need to develop an ABAP Report in 100 client to trigger a client proxy. The following report is executed in the SE38 Editor for triggering an ABAP Proxy request from client 105.

Receiver adapter configurations should be done in the integration directory and the necessary sender/receiver binding should be appropriately configured. We need not do any sender adapter configurations as we are using proxies.

Sender Service

Receiver Service

Triggering ABAP Proxy

We can trigger the ABAP proxy by logging into client 105 of XI server and executing the ABAP report through SE38 editor. Once the report is executed we can see the file on the XI server and contents of file by double clicking the file.

File

Contents of File

I hope this blog will be useful for trying out real time applications on ABAP Proxies.

To report this post you need to login first.

33 Comments

You must be Logged on to comment or reply to a post.

  1. Tuhin Oza
    Hi Ravi,
    I have some doubts in  weblog u have posted.

    client 105 acts as application system
    ( sender   or receiver ), then SPROXY transaction we should run in client 105 to generate proxies for interfaces which we have created in XI.

    The code which u wrote for  triggering  Proxy request from client 105 should also be written in client 105(Application System).
    Plesae clarify this.

    Thanks & Regards,
    Tuhin Oza

    (0) 
    1. Ravikumar Allampallam Post author
      Here as an example we have taken different clients of the same system. As the code is client independent you can generate / write proxy anywhere. However, when you are executing the same you cannot do it from the same client as of the integration server.

      Regards,

      (0) 
      1. Mickael Huchet
        Hi,
        I don’t understand why is not possible to use the IS (e.g client 100 in your exm) for the sending of data thanks to proxy?
        In my case, I have only one client for XI and other SAP systems are in R/3 4.7 (without WAS).

        Regards
        Mickael

        (0) 
        1. Jozef Zeman
          hi.
          Proxy on same client as IS is not allowed, because of constructor of CL_XMS_RUN_TIME_ENV:

          METHOD constructor.
             IF parser IS INITIAL.
               CREATE OBJECT parser
                 exporting im_property = me.
             ENDIF.

             proxy_allowed_on_is = ‘ ‘.  “do not allow proxies on is

          ENDMETHOD.

          you can see it in SE24.

          I have problem to generate proxy on R/3 4.7. Transaction SPROXY on 4.7 can’t connect to Integration Builder. In my opinion, 4.7 can communicate only with IS XI2.0, and i’ve IS XI3.0 .

          j.

          j.

          (0) 
          1. Ravikumar Allampallam Post author
            In the example I was trying as I had only one system that can generate proxies as it has to be over and above 6.2. At the time of doing this, I did not had access to such a system so I had to use one of the clients of XI system as a business system as well to write a proxy. In essence this is what I was trying to do.

            XI(Client 105) —–> XI (Client 100)  —> Target System.

            You can generate proxies in 4.7.

            Jozef,

            The error that you are getting “Cannot connect to Integration Builder”, is due to setting not done on the R/3 side. You will have install a patch and do the required settings to get the connectivity between R/3 and XI up – only then you will be able to use proxies.

            Ravi

            (0) 
            1. Leonardo Machado
              Hi Ravi
              I’m getting the same problem as Jozef (e.g. “Cannot connect to Integration Builder” from R/3), could you tell me how to configure the R/3 System to connecty with XI?
              Best regards
              (0) 
                  1. Karma Ghale
                    We just want to create xi abap server proxy on the same box. Can we create on the same client? or we have to follow the same guidelines as mentioned above for creating abap client proxy on xi box.
                    Thanks.
                    Karma
                    (0) 
                    1. Ravikumar Allampallam Post author
                      You cannot create it on the same client of the Integration Server. You have to have a application system or at least have a different client which acts as a application system.

                      Regards,
                      Ravi

                      (0) 
                      1. Pushkar Anand
                        Hi Ravi,

                        Its really an informative blog, but could you please tell me, how do we push a complete table with multiple entries via outbound abap proxy?
                        In your example, only a single entry is being sent.

                        (0) 
  2. Dmitriy Mindich
    Hi Ravi,

    A simple question. I have a problem creating an ABAP proxy, since the system requests an object key? Is there any way to avoid using object key? The client I am working in does not wants us to change any SAP objects. Therefore, it is very hard to get object key from him.

      Thanks,

    (0) 
    1. Ravikumar Allampallam Post author
      Dmitriy,

      No, there is no work around for a developer key. By generating an ABAP Proxy you are writing some code and that defintely needs a developer key.

      Ravi

      (0) 
    2. Karsten Berßuck
      Hi Dmitriy,

      an object key will be requested because the system creates proxy objects in SAP’s namespace. Simply give a prefix beginning with Z when creating a proxy with SPROXY.

      (0) 
  3. Sergio Oliveira
    Hi,Ravikumar

    I am trying to do with that a program abap sends data for SAP XI. I got to create the proxy of the type OUTBOUND and SYNCH in my R/3. I am using your program as template. When I execute the report abap, error message doesn’t appear and nor of success, appears only an empty screen. 
     
    During the debuging of the program, we found that exit XML is not well formatted.  
     
    The program abap that I am using proceeds

    REPORT  zco_teste_xi_abap_proxy_out.
    DATA prxy TYPE REF TO zco_mi_teste_xi_proxy_out.
    *
    CREATE OBJECT prxy.
    DATA it TYPE  zzmt_teste_xi_proxy.
    TRY.
        it-z_mt_teste_xi_abap_proxy-empname = ‘Sravya’.
        it-z_mt_teste_xi_abap_proxy-empno = ‘80101’.
        it-z_mt_teste_xi_abap_proxy-departmentname = ‘NetWeaver’.

        CALL METHOD prxy->execute_synchronous
          EXPORTING
            output = it.
         commit work
    CATCH cx_ai_system_fault .
        DATA fault TYPE REF TO cx_ai_system_fault .
        CREATE OBJECT fault.
        WRITE :/ fault->errortext.
    ENDTRY.

    (0) 
    1. Ravikumar Allampallam Post author
      Sergio,

      The ABAP Code example given is not full fledged. There is noting written if everything is successful. However if its unable to create a message, then it should write a text as you can see from the statement –   WRITE :/ fault->errortext.

      Coming to your XML formation, as I don’t have details, I can pin point the problem but

      1. Have you tested your message mapping ?
      2. Have you tested you interface mapping ?

      If you are able to see a proper XML there, then ideally Proxy also should be able to do the same.

      If you are still having problems, can you mail me the exact details, will try and see if I can figure out.

      Regards,
      Ravi

      (0) 
  4. XIer XIer
    Dear Ravi,

              If I have scenario with SAP (ABAP Proxy) —> XI —> File System (File Adapter)

    would your code and the procedure remain the same?

    Regards,
    Ashish

    (0) 
  5. XIer XIer
    Dear Ravi,

              When I try to create proxy for the interface defined in XI using sproxy in IR, by right clicking on the Outbound interface, it asks me for inputing the Package name???

    Please advice…

    Also how do I check if my SAP is on WEB AS 6.20 or above or not.

    Regards,
    Ashish

    (0) 
  6. Fadel Taha
    Thanks for this blog.
    Do we have to create then sender service NAJ_105 in sld with the product and swc or do we have to create it in IR.
    How does XI know which service is sending the message by proxy.
    (0) 
  7. sandeep bodapati
    HAI RAVI,

    can u tell me how we push data from sap,

    r we going to use any rfc.

    in case of idocs we can trigger them.

    in this case what is the procedure.

    regards

    sandeep

    (0) 
  8. Ranjit Deshmukh
    The blog is really nice Ravi…
    but I have a problem with this- what if you are not able to see all the namespaces other than just Basis objects in the list of software comp. ver.’s? Though the connection test is successful…Do we have to make some settings in exchange profile for this or Do we need to create a ABAP table each for a SWCV?

    Ranjit

    (0) 
  9. Samuel Chandrasekaran
    hi ravi,

    great blog for beginners (like myself).. could you do one for Server Proxy? 😉

    just one small niggle that has already been pointed out by someone else.. this had me stuck for a while so maybe if you edit the text in the blog that will be helpful.

    “After the message interface is developed in the integration repository, proxy is generated on the client 100 using SPROXY transaction. SPROXY transaction lists all the message interfaces in the integration repository. We have to choose our message interface Proxy_Interface_OB and click Create.”

    Isn’t the proxy actually created on the XI-105 Client Proxy? i.e. isn’t the proxy created on the SAP system and not on XI?

    thanks,

    sam

    (0) 
  10. Jayaram Sridhar M
    Hi,

    What would be the link between the ABAP program and the reciever? I mean how would the program know that it should send the message to the particular reciever ? where is this specified ?

    (0) 
  11. Ravindra babu Immadisetty
    Hi Ravi,
    I have created all the configuration for Synchronous connection from XI TO r/3, I am able to generate the proxy susccessfully. But After generating the Class is not generated with the extension EXECUTE_SYNCHRONOUS. Just Message interface is generated instead of that EXECUTE_SYNCHRONOUS. I Tested the outbound is generated with ASYNCHRONOUS in XI.

    Please help me on this.

    Regards
    Ravindra

    (0) 
    1. Ranjit Deshmukh
      Hi Ravindra,
      Are there any naming conflicts while creating the proxy?
      Also are you creating a server proxy or client proxy?
      Please try to save the changes and activate the proxy, and then check it again.

      Ranjit

      (0) 
  12. Jaya Katyare
    I want to know why we want to put Commit work after calling method.Is it mandatory ?
    In my case i want to call proxy method before commit work in MB1A to send data to PI.
    Can i avoid to write commit work after calling proxy method, because this commit work is working as main program commit work.
    Please help.

    Regards,
    Jaya

    (0) 
    1. Stefan Grube
      You put the commit work after the LUW. You need not put it direct after the proxy call, but you have to make sure, that commit work or rollback work is processed in your program.

      Regards
      Stefa

      (0) 
  13. Juan Manuel
    Hello Ravikumar, I followed your blog step by step but when I make the syntax check (or I try to activate it) of the report, it shows me:

    Method “execute_asynchronous” is unknown or PROTECTED or PRIVATE

    I read another posts like:

    Re: Client Proxy – asynchronous

    I’m not an ABAP expert, but I really don’t see that method.

    Do you know what’s happening ?

    Regards,

       Juan

    (0) 
    1. Stefan Grube
      Starting with SAP BASIS 7.0 SP14, the methods of the generated ABAP proxy classes are derived from the operation name or interface name.

      The method execute_asynchronous is no longer used for new generated ABAP proxies.

      Hope that helps
      Stefan

      (0) 
  14. Stefan Grube
    I suppose this blog is the cause of many issues in ABAP proxies implementation. Please adjust your code to make it work correctly.

    Instead of:

      CATCH cx_ai_system_fault .
        DATA fault TYPE REF TO cx_ai_system_fault .
        CREATE OBJECT fault.
        WRITE :/ fault->errortext.

    It should be:

      DATA lo_fault TYPE REF TO cx_ai_system_fault .
      CREATE OBJECT lo_fault.

       …
      CATCH cx_ai_system_fault into lo_fault.
       
       
        WRITE :/ lo_fault->errortext.

    (0) 

Leave a Reply