Friday, 4 May 2018

Clearing/Resetting the Headers Parameters in SAP HCI/CPI

To clear the headers from the outgoing message request.

On many occasions we have a business scenario where, we need to do multiple lookup calls to an external system with some message transformation and then make some external HTTP call to post the transformed message.

One of business requirement was wherein we had to look up from S/4 HANA system and subsequently post the transformed message to an external third party system using HTTP Post(method).

While we were making individual calls to the third party system, it was working perfectly fine but once we joined all the pieces and completed the i-flow, we were unable to post the message resulting in error 406.

Hence we decided to log all the headers and see if there were any additional headers which would have been carried from the previous SOAP call to S/4 HANA.import com.sap.gateway.ip.core.customdev.util.Message; import java.util.HashMap; def Message processData(Message message) { def headers = message.getHeaders() def messageLog = messageLogFactory.getMessageLog(message) for (header in headers) { messageLog.setStringProperty("header." + header.getKey().toString(), header.getValue().toString()) } return message; }

Above code helped us to get the list of header values from the current message.

On further analysis we could understand that, there could be various reasons why the message header could get appended with different values which might not be relevant in preceding calls. After reading the below paragraph from standard documentation we had a clue of possible error.Note that data written to the message header during a processing step (for example, in a Content Modifier or Script step) will also be part of the outbound message addressed to a receiver system (whereas properties will remain within the integration flow and will not be handed over to receivers). Because of this, it is important to consider the following header size restriction if you are using an HTTP-based receiver adapter: If the message header exceeds a certain value, the receiver may not be able to accept the inbound call (this applies to all HTTP-based receiver adapters). The limiting value depends on the characteristics of the receiver system, but typically ranges between 4 and 16 KB. To overcome this issue, you can use a subsequent Content Modifier step to delete all headers that are not supposed to be part of the outbound message.

Now this clearly states that there could be certain irrelevant headers which could be causing a problem.

If we retain some relevant headers and delete the rest we could have three different use cases:
Delete specific header values
Delete all the header values
Delete all the headers except masking a few.

So the next target was to achieve these use cases. Please follow the steps below
Select Content Modifier step before the HTTP call.
Select Message Header section
Click Add button
Select Delete from the Drop down.


Press on Select Button under Column Name which will give you a pop up




Now we have three options to handle the deletion of the headers:
Delete specific header values: In this case we can select the first option Header and mention all the header needs to be deleted. We could add ‘n’ number of header variables with the Action as delete and mention the Header to be deleted.
Delete all the header values: In case we had to delete all the headers we could select the Expression instead of Header. This would clear all the headers before the subsequent calls.

Delete all the headers except masking few: And finally if we want to mask few we could mention them under Exclude with wildcard character.




No comments:

Post a Comment