cancel
Showing results for 
Search instead for 
Did you mean: 

Design Question - BPM and dynamic JDBC adapters

Former Member
0 Kudos

Hello,

I need help to finish my scenario.

scenario:

step1 : Idoc > PI(7.1) <> JDBC stored procedure call

step2: If the Sync. JDBC call is successful then make a sync. BAPI call to R/3.

step3: If JDBC all fails ( in step 1 ) it should tigger an emial and do not make BAPI call ( do not execute step 2).

I have 200 SQL servers and each time IDOC goes to any one of these 200 servers ( yes, only one server ) , depending on the connection parameters in one of the idoc segment.

Questions:

1. Can we do this without BPM?

2. can we configure dynamic JDBC adapte depending on the login credentials in IDOC ( server name, port, user name , passwore).

3. If dynamic JDBC adapter configuration is not possible, what should be my design. Do i need to create 200 communication channels and 200 rec. determination, 200 interface determination, 200 receiver agreement..I dont think this is a good design

Accepted Solutions (0)

Answers (2)

Answers (2)

markangelo_dihiansan
Active Contributor
0 Kudos

Hello,

It seems doable without using BPM.

step1 : Idoc > PI(7.1) <> JDBC stored procedure call

step2: If the Sync. JDBC call is successful then make a sync. BAPI call to R/3.

You can use a two-step mapping.

1.) The first one calls the stored procedure using UDF or Java Mapping (as was suggested in earlier threads)

2.) The input to the second mapping will be the response from 1. You can use RFCAccessor to execute the BAPI.

step3: If JDBC all fails ( in step 1 ) it should tigger an emial and do not make BAPI call ( do not execute step 2).

Use XI/PI alerting framework for failed messages. The BAPI call can/cannot be executed by using a try-catch statement in the root node of 2nd mapping (1..1 occurrence), return suppress in the root node if conditions are not met or return a value if otherwise.

Note: Consider this blog in your design, /people/thorsten.nordholmsbirk/blog/2008/11/04/why-xi-mappings-should-be-free-of-side-effects

Hope this helps,

Mark

baskar_gopalakrishnan2
Active Contributor
0 Kudos

>>2. can we configure dynamic JDBC adapte depending on the login credentials in IDOC ( server name, port, user name , passwore).

I think you can dynamically overwrite communication channel connection attributes. Did not work on this. But another possible solution is here

During mapping use UDF and do jdbc stored procedure call there and if you get success, then decide in mapping logic to use BAPI call. If not create email message and pass it to SMTP recevier adapter. Use Source fields that has login credentials in UDF to make jdbc connection.

Find some code snippet for doing jdbc connection and query in UDF

/people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler

>>3. If dynamic JDBC adapter configuration is not possible, what should be my design. Do i need to create 200 communication channels and 200 rec. determination, 200 interface determination, 200 receiver agreement..I dont think this is a good design

NOT required. If you do JDBC call in UDF, you dont need these many channels ....

>>1 Can we do this without BPM?

In case of success, you have synchronous that means getting response from BAPI, in case of failure, you need asynchronous call .ie not expecting response. So, I'm not sure you can achieve using multimapping without bpm methodology.

Hope that helps.

VijayKonam
Active Contributor
0 Kudos

Using JDBC look up is a good idea as proposed above. Also, even in this case, BPM is necessary.

VJ

Former Member
0 Kudos

Thanks for the quick reply.

Really i dont understand, how we can use UDF lookup for dynamic parameters for jdbc adapter

in the block, Shiva is using agian JDBC communication channel and using the serveanme, username and passowrd to configure the communciation channel.

My requirement is to use one communication channel and connect to different databases.

Thanks,

baskar_gopalakrishnan2
Active Contributor
0 Kudos

>>My requirement is to use one communication channel and connect to different databases.

Shiva's blog is just a code snippet to have an idea about knowing how to query jdbc calls using UDF. In your situation, if we can't overwrite channel attributes dynamically using UDF then other situation is writing java mapping. This is little bit more effort. Basically java mapping will create jdbc connection using your input parameters and do the query and return resultset. You will not create communication channels in PI. Java mapping takes care that. Downside is you miss the monitoring jdbc portion via pi. Google for plenty of jdbc connection sample programs.