Friday 4 May 2018

Exception Sub Process-How to create Alert body for Error Notification

This blog describes how to create and handle dynamic alert notification inside the Exception Sub Process in SAP HCI.

About Exception Sub Process:Exception Sub Process can catch any exceptions thrown in the integration process and process them.Below parameters will give more details of the the exception raised.
${exception.message} : Short description of the Exception.
${exception.stacktrace} : Complete trace of the Exception raised.

Use Case:

Lets create Custom integration where we will pull the File from SFTP server and save it in data store.




1. Sender: Add Sender component from integration designer pallete.

2. Channel: Configure SFTP sender channel which picks file from SFTP server.



3. Content Modifier: To read the key details of incoming message.In our case we are capturing input file name.4. Script: To read the tenant details in run time( in our case tenant id is of 5 character length like X1234 ,L1234 ) and stores it in property.

5. Script: Erroneous script to forcefully fail the message and trigger exception.

6. Data Store: Store the output ( In the above case its just added to have an end to end flow ).

7. Content Modifier: Content Modifier [ Body ] to build the email body.
Content Modifier [ Header ] to set the exception stack trace into header which is later sent as a attachment.
8. Send: Send step is used to send the message to External Systems Asynchronously.

9. Channel: Mail adapter to send the exception details to mail receiver.

Once you are done with above configuration save and deploy the Integration Project.

Place a test file in SFTP share and you will be able to find the below Error Alert Mail triggered from Exception Sub Process.




Further Improvements and Limitations:1. XSLT mapping with HTML can be used in addition to above use case inside the Exception Sub Process to improvise the look and feel of the email body.

2. Custom Exception can be created and raised using Groovy Script.

3. You cannot catch exceptions of local integration process in the main integration process.

4. As of now Exception Sub Process is not available in WEBUI( may be it is present in the SAP road map ).

Conclusion:Exception Sub Process is very useful for handling Exceptions raised in Integration process although it requires further improvements.


Thanks Sriprasad for knowledge share.



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.