Thursday, May 12, 2022

Payload Logging using Groovy Script in SAP CPI.

For the future reference, we have a script to save the payload in the iflow and that can be viewed in the Tenant .

Go to Monitoring page in SAP CPI - Choose iflow - Logs - MPL Attachment - Click on "C4CRequestPayload" to view the payload for this example.


Groovy Scripts:

import com.sap.gateway.ip.core.customdev.util.Message;

import java.util.HashMap;

def Message processData(Message message) 

{

    def body = message.getBody(java.lang.String) as String;

    def messageLog = messageLogFactory.getMessageLog(message);

    if(messageLog != null){

        messageLog.setStringProperty("Logging#1", "Printing Payload As Attachment")

        messageLog.addAttachmentAsString("C4CRequestPayload:", body, "text/plain");

     }

    return message;

}

(OR)

import com.sap.gateway.ip.core.customdev.util.Message;

import java.util.HashMap;

import com.sap.it.api.mapping.*;

import java.text.SimpleDateFormat;

import java.util.Calendar;


def Message processData(Message message) {

map = message.getProperties();

property_ENABLE_PAYLOAD_LOGGING = "TRUE";

if (property_ENABLE_PAYLOAD_LOGGING.toUpperCase().equals("TRUE")) {

def header = message.getHeaders() as String;

def body = message.getBody(java.lang.String) as String;

String timeStamp = new SimpleDateFormat("HH:mm:ss.SSS").format(new Date());

                String logTitleH = timeStamp + " Response Headers ";

String logTitleB = timeStamp + " Response Body ";

 def messageLog = messageLogFactory.getMessageLog(message);

if (messageLog != null) {

messageLog.addAttachmentAsString(logTitleH, header, "text/xml");

messageLog.addAttachmentAsString(logTitleB, body, "text/xml");

}

}

return message;

}

Groovy Script to Remove Special Characters (or) Replace String.

 We had a requirement to remove the special characters in the field using groovy script.


Groovy Script:

import com.sap.gateway.ip.core.customdev.util.Message;

import java.util.HashMap;

import java.io.*;

def Message processData(Message message) 

{

def body = message.getBody(java.lang.String) as String; 

body = body.replaceAll("&",""); 

message.setBody(body); 

return message; 

Groovy Script to read the data whenever C4C sends SAP_UUID or not. If SAP_UUID is not able then it will store Payload Logging using Groovy Script.

First using Request Reply we need to connect C4C(Cloud for Customer) System. From the C4C system it will send SAP_UUID some time it won't send SAP_UUID. If it's not send SAP_UUID then we need to store Payload Logging using below Groovy scripts.


Using Content Modifier, We need to store SAP_UUID after using groovy. We can check whether SAP_UUID is available or not.

Groovy Scripts:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import com.sap.it.api.mapping.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;

def Message processData(Message message) {
 
map = message.getProperties();

def SAP_UUID1=map.get("SAP_UUID")    

if(SAP_UUID1.equals(""))
{
def body = message.getBody(java.lang.String) as String;
def messageLog = messageLogFactory.getMessageLog(message);
if (messageLog != null) {
messageLog.addAttachmentAsString("C4C_Error_Response:", body, "text/xml");
 }
}
return message;
}

Router Condition:

After the Groovy script we need to use the router and check if SAP_UUID is not available at the end of the iflows, If SAP_UUID is available then it will go further.










The sender will pass the data in JSON format without converting it to XML format. We need to read the particular field.

The sender will pass the data in JSON format without converting it to XML format. We need to read the particular field to check the conditio...