Introduction:
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.
References:
[1] Content Modifier:
https://uacp.hana.ondemand.com/http.svc/rc/PRODUCTION/93810d568bee49c6b3d7b5065a30b0ff/1/en-US/frameset.html?2c667a12a0a545d2ad4210e070479312.html
[2] Mail Adapter:
https://uacp.hana.ondemand.com/http.svc/rc/PRODUCTION/93810d568bee49c6b3d7b5065a30b0ff/1/en-US/frameset.html?08af047a0c0145ab8742b946cff7bcd7.html
[3] Exception Sub Process:
https://uacp.hana.ondemand.com/http.svc/rc/PRODUCTION/93810d568bee49c6b3d7b5065a30b0ff/1/en-US/frameset.html?f090fd40347c4cccba6c566193f76624.html

Regards,
Sriprasad Shivaram Bhat

To report this post you need to login first.

10 Comments

You must be Logged on to comment or reply to a post.

  1. Aman Gupta

    Thanks Sri..

    Very informative..

    We are working on SF integration, where we need to fetch employee records and send those records to SFTP server via SAP HCI. We have placed transformation rules in HCI to validate the data coming from SF.. Just wanted to check what is the possibility to check the below

    1. Total Number of employees processed through this interface.
    2. Total Number of employees processed successfully.
    3. Total Number of employees processed unsuccessfully

     

    Thanks in advance..

    Aman

     

    (0) 
  2. Hari Sonnenahalli

    I am using your code in sub process exception and when trying to execute am getting the substring can’t be invoked. Please find the code which am using below and please let me know if you see any error. I have also pasted the error message for your reference.

    /*
    The integration developer needs to create the method processData
    This method takes Message object of package com.sap.gateway.ip.core.customdev.util
    which includes helper methods useful for the content developer:
    The methods available are:
    public java.lang.Object getBody()
    public void setBody(java.lang.Object exchangeBody)
    public java.util.Map<java.lang.String,java.lang.Object> getHeaders()
    public void setHeaders(java.util.Map<java.lang.String,java.lang.Object> exchangeHeaders)
    public void setHeader(java.lang.String name, java.lang.Object value)
    public java.util.Map<java.lang.String,java.lang.Object> getProperties()
    public void setProperties(java.util.Map<java.lang.String,java.lang.Object> exchangeProperties)
    public void setProperty(java.lang.String name, java.lang.Object value)
    */
    import com.sap.gateway.ip.core.customdev.util.Message;
    import java.util.HashMap;
    def Message processData(Message message) {
    //Body
    def body = message.getBody();
    // Fetch Application URL
    String appUrl = System.getenv(“HC_Application_URL”);
    // Retrieve HCI tenant name
    String TMN_ShortName = appUrl.substring(8,13);
    // Set Tenant name to property
    message.setproperty (“P_Tenant_Name”,TMN_ShortName);
    return message;
    }

    Message processing failed.
    javax.script.ScriptException: java.lang.Exception: java.lang.NullPointerException: Cannot invoke method substring() on null object@ line 23 in script21.groovy, cause: java.lang.NullPointerException: Cannot invoke method substring() on null object

    Thanks

    HS

     

    (0) 
  3. Sriprasad Shivaram Bhat Post author

    Hello Hari,

    You must correct the line where you are pulling environment details.Since there are no details being pulled its giving an error.

    Correct One: String appUrl = System.getenv(“HC_APPLICATION_URL“);

    Environment variables are case sensitive and you must pass the above one it will solve your issue.

    Regards,

    Sriprasad Shivaram Bhat

     

    (0) 
    1. Hari Sonnenahalli

      Yes, I know where you have used in the code. My question is the naming convention(HC_APPLICATION_URL) which you have used is retrieved from somewhere on the tenant and is it a standard. The reason I am asking is when used a proper case it was throwing an exception.

      Please let me know.

      Thanks

      HS

      (0) 
  4. Sriprasad Shivaram Bhat Post author

    Hello Hari,

    I am able to successfully retrieve the Tenant ID using below script may be you can try copy pasting the same.

    import com.sap.gateway.ip.core.customdev.util.Message;
    import java.util.HashMap;
    import java.io.*;
    
    def Message processData(Message message) {
          
          //Retrieve Body 
          def body = message.getBody();
          
          //Function to fetch application url of HCI Tenant
          String appUrl = System.getenv("HC_APPLICATION_URL");
          
          //Logic to retrieve only Tenant Name      
          String TMN_ShortName=appUrl.substring(8,13)
          
          //Set the Tenant name to Property
          message.setProperty("P_Tenant_Name",TMN_ShortName);
                
          return message;
    }

    Regards,

    Sriprasad Shivaram Bhat

     

    (0) 

Leave a Reply