cancel
Showing results for 
Search instead for 
Did you mean: 

Is Asynchronous ABAP proxy client possible without XI ?

Former Member
0 Kudos

Hi there,

Does anyone of you know if it is possible to create an asynchronous ABAP proxy client, without XI, thus directly in a SAP ERP 60 ABAP ?

Karim

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi Karim,

I guess, you want to create an asynchronous ABAP Proxy Client i.e. something like we create for sending message to XI.

We can do it directly.

The following example shows how to create a synchronous proxy client.

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/6066fbe8-edc4-2910-9584-a9601649...

All the steps are same for asynchronous proxy client as well.

In Short,

Get the WSDL.

Go to SE80,

creat proxy object.

specify the wsdl path (on your local machine).

Generate the proxy class.

Transaction SM59.

create an RFC destination.

provide host name and the service no. (Note: this is not the port no. It should be something like 50000).

Transaction LPCONFIG

create logical port.

In http destinattion : provide this RFC destination.

for path prefix:

check your wsdl.

check for soap:address location.

whatever is there afer <host:service no>, copy that and paste that in against path suffix.

dont forget to activate this.

write an abap report and call the method inside your proxy class to send the message out of R/3.

Regards

Pushkar

Former Member
0 Kudos

Hi Karim,

the SOAP runtime does not support creating something like an asynchronous client directly, though you are of course able to program such a behaviour yourself once you have decided what you (and your communication partner) do exactly mean with asynchronous.

1) store and forward like operation:

you want to submit some message now but want it to be delivered to the communication partner only at some later point in time => prepare the message and save it locally; create a scheduled job which scans the storage place(e.g. some table), sends the message (synchronously), saves the answer locally and raises some event

2) acknowledge only and receive full answer later:

you send the message to the receiver synchronously but it needs some time to process your request and therefore sends you a preliminary acknowledgement only ('received and understood it') and a complete reply later; additionally to your webservice client you have to provide a webservice, which the receiver calls once it completes your request; this webservice stores the received data somwhere and again raises some event to notify the original application that an answer has been received;

There are of course a number of variants to the above mentionend processes depending on what you really mean with 'asynchronous'.

hope it helps,

anton

Former Member
0 Kudos

Hi Anton,

thanks for your answer, it confirmed what I was thinking (asynchronous not possible in that case).

Now this leads me to a second question:

I would like to implement the scenario "acknowledge only and receive full answer later".

As you indicate: "...additionally to your webservice client you have to provide a webservice, which the receiver calls once it completes your request..."

In order to do this, I must practice as follows:

The service I call is using the WS-Addressing specifications.

Therefore, the information regarding the webservice that will be called when the request is completed should be sent as a special SOAP WS-addressing parameter, that should be indicated in the header of the SOAP Message, here is an example:

(001) <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"

xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">

(002) <S:Header>

(003) <wsa:MessageID>

(004) uuid:6B29FC40-CA47-1067-B31D-00DD010662DA

(005) </wsa:MessageID>

(006) <wsa:ReplyTo>

(007) <wsa:Address>http://business456.example/client1</wsa:Address>

(008) </wsa:ReplyTo>

(009) <wsa:To>http://fabrikam123.example/Purchasing</wsa:To>

(010) <wsa:Action>http://fabrikam123.example/SubmitPO</wsa:Action>

(011) </S:Header>

(012) <S:Body>

(013) ...

(014) </S:Body>

(015) </S:Envelope>

You can see that the WS-A specific part is in the header of the SOAP Message, not in the body, so not covered by the WSDL.

Question: Is it possible to include this in the header of the SOAP Message generated by the ABAP proxy client ???

Former Member
0 Kudos

Hi Karim,

Stand alone Asysnc Proxy Client (Without XI) is possible in R/3.

Try the above steps & you will be able to create an async proxy client.

Here by Asynchronous , I mean sending a message without getting any response.

If you want any acknowledgement from the target system, it has to be synchcronous here.

Regards

Pushkar

Message was edited by:

Pushkar Anand

Former Member
0 Kudos

Hello Karim,

afaik the SOAP runtime as of ERP2005 is not supporting ws-addressing (easily).

Maybe there is a chance to fiddle around with it, though I haven't tried it myself yet. A quick look revealed that the generated proxy class is derived from CL_PROXY_BASIS. It has a method get_protocol which returns an IF_WSPROTOCOL object. This interface is implemented (amongst others) by a class CL_WSPROTOCOL_WS_HEADER....

Maybe you can acess the header this way.

Given the current state of the SOAP runtime I personally would stick with a more static approach (for the moment being), i.e. using static addresses, known at design time.

cheers, anton

Former Member
0 Kudos

Hi Pushkar,

By asynchronous, I was meaning really asynchronous, thus with a response received later on.

We were already using the steps you described for various synchronous proxies...

Karim

Former Member
0 Kudos

Anton,

Thanks for your answer, I'll try that

Karim