cancel
Showing results for 
Search instead for 
Did you mean: 

Question on SOAP header

Former Member
0 Kudos

Hi gurus,

I have a scenario where i have important fields like thew user id / Business transaction id etc as part of SOAP header coming from the sending application.this is for End to End tracking where the client would like to check in PI for that business transaction id , how many messages were processed.

how can i achieve this? As always, your help is highly required.

S

Accepted Solutions (0)

Answers (4)

Answers (4)

Former Member
0 Kudos

Hi All,

Thanks for the response.My requirement is when the Business transaction id comes through from source and i might not have any way to map it to the target.

In such a case the Bus Transaction id will be stalled in PI , but need to to be used for tracking.

Your inputs please.

markangelo_dihiansan
Active Contributor
0 Kudos

Hi,

In that case, you create a table with the corresponding XI message ID and Transaction ID.

Regards,

Mark

markangelo_dihiansan
Active Contributor
0 Kudos

Hi,

You need to run in noSOAP mode, this can be achieve by checking "Do Not Use SOAP Envelope" in your sender CC and appending &nosoap=true at the the end of the sender URL.

The addition of the SOAP Envelope means you would need Java/XSLT mapping to extract the information needed.

Regards,

Mark

Former Member
0 Kudos

Would you have sample XSLT code to extract the same?

Former Member
0 Kudos

Hi

You have to check the option 'keep header' in sender soap adapter. Then you can write an UDF which will do the follwing

1. read the business transaction id from header.

2. store the business transaction id and corresponding message id in a table in ECC.

In the ecc side you can write an program which will take the business transaction id as input and return the number of messages processed in PI for that transaction in ID.

There is one more option

1. You have to include the transaction id in the target structure and map the same with the header value using dynamic configuration in UDF.

then you can configure a user defined search for that transaction id field by which you will be able to find how many messages were processed for a transaction id in sap PI.

Former Member
0 Kudos

1. You have to include the transaction id in the target structure and map the same with the header value using dynamic configuration in UDF.

then you can configure a user defined search for that transaction id field by which you will be able to find how many messages were processed for a transaction id in sap PI.

Can you please explain how can this be done, I mean using a Dynamic config and the logic behind this?Maybe i can convince for a field to be passed back to ECC.

S

Former Member
0 Kudos

Hi

You can access the header information in the below way

1. Check the option keep header in sender soap communication channel. You have to select the adapter specific attribute and provide the name of the header field in the variable header name field.

Then you can access the value of this field using the below code in UDF

DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);

DynamicConfigurationKey key1 = DynamicConfigurationKey.create( "http://sap.com/xi/XI/System/SOAP", "XHeaderName1");

String value = conf.get(key1);

return  value ;

Once you have the transaction id in your structure, you can configure the user defined search in the below way

iaki_vila
Active Contributor
0 Kudos

Hi Shyamsundar,

A first look, i think in a RFC/JDBC lookup at message mapping level, there you could update an external table with the information. I dont like so much this option because you can notice lower performance, but it's one start

Regards.