cancel
Showing results for 
Search instead for 
Did you mean: 

Help SOAP to RFC Scenario (Sequencial BAPIs) using BPM (Synchronous communication)

Former Member
0 Kudos

Hi All,

Here I am creating a PM Notification in the SAP system through a webservice.  I am using two BAPI'S here,

1. BAPI_ALM_NOTIF_CREATE

2. BAPI_ALM_NOTIF_SAVE

3. BAPI_TRANSACTION_COMMIT

Below is the content to be written regarding the steps created in BPM and the process flow.For sequential calling of 3 bapi's BAPI_ALM_NOTIF_CREATE,

BAPI_ALM_NOTIF_SAVE and finally BAPI_TRANSACTION_COMMIT, a BPM has been defined in SAP PI with the below steps and it is soap-RFC scenario.

Please note that BAPI_TRANSACTION_COMMIT has not been used in the BPM as we could use Channel Monitoring Commit. Hence we have BPm for the first 2 functions itself.


3 message mappings have been defined.


1) soap req to BAPI_ALM_NOTIF_CREATE

2) BAPI_ALM_NOTIF_CREATE.Response to BAPI_ALM_NOTIF_SAVE

3) BAPI_ALM_NOTIF_SAVE.Response to soap response


Start--->Receive1--->Send1--->Send2--Transform<-----Send3----Stop


1) A block has been created

2) All the steps are defined with in the block

3) Receive1 step by opening Sync/Async bridge for receiving the soap

request from third party

4) Send1 step is for getting the BAPI_ALM_NOTIF_CREATE.Response in

synchronous mode.

5) Send2 step is for getting the BAPI_ALM_NOTIF_SAVE.Response in

synchronous mode.

6) Transformation step is for providing the operation mapping which

contains the final mapping between BAPI_ALM_NOTIF_SAVE.Response to

soap response

7) Send3 step is for closing the Sync/Async bridge opened by Receive1

step which will send the soap response to third party back again


In the integration directory two RFC communication channels are used. First CC is for connecting to ECC system for getting the BAPI_ALM_NOTIF_CREATE.Response which has Advanced mode box unchecked and the second CC is for connecting to ECC system for getting

BAPI_ALM_NOTIF_SAVE.Response which has advanced mode checked, Confirm transaction checked and Commit handling for single BAPI calls in order

to finally commit the BAPI.



Now while testing the scenario when third party is triggering the data, though the BAPI's are called in a sequence in the BPM , the finalresponse is not correctly coming. After analyzing it is found that in the send2 step i.e BAPI_ALM_NOTIF_CREATE.Response to BAPI_ALM_NOTIF_SAVE, though it is giving the BAPI_ALM_NOTIF_CREATE.

Response as input to BAPI_ALM_NOTIF_SAVE in a single call,the initial session while getting BAPI_ALM_NOTIF_CREATE.Response is being closed resulting into blank data for one internal table which is used inside BAPI_ALM_NOTIF_SAVE. This internal table is the one which should be populated from

BAPI_ALM_NOTIF_CREATE.Response. But this internal table mapping cant be done in PI as BAPI_ALM_NOTIF_SAVE contains only one input which is

notification number which is mapped from BAPI_ALM_NOTIF_CREATE. Response and return type as output. The internal table mentioned is not the one which is available in import or export or tables tabs of  BAPI_ALM_NOTIF_SAVE i.e if you look at the source code in this FM it calls one more FM BAPI_SERVNOT_SAVE and the internal table can be seen only in the debugging mode.


Though we know by checking Create new transaction we can see all the steps in the workflow log in sxmb_moni, we tried few ways by checking the Create transaction button in all the steps used in BPM and by unchecking the same for Send2 and Transform steps aswell but the result is same. Could you please let us know if there is anyway in BPM we can do for keeping the session opened till the entire process of calling the BAPI's is finished. Awaiting your quick reponse.

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member

Hello.

I wasn't reading very thoroughly but It seems you have a sync scenario - and you need to do some RFC lookups (sync calls) and mapping on the results of that lookups.

why don't you just use a regular message mapping with RFC lookups in it?

It might be a little complicated, but it allows you better "maintenance" and use less resources than the BPM.