This blog is created to throw some lights on SAP CPI concepts, which experienced in my journey. Trying to explore more about HCI/Cloud platform integration/SCPI and sharing the contents to help you. Thanks for all Users your support. Please give your comments below ...
Monday, 21 August 2023
Sap cpi new adapter error
Error: {"message":"EXCEPTION","parameters":["java.util.concurrent.TimeoutException"]},{"message":"UNRESOLVED","parameters":["(&(component=aws)(objectClass=org.apache.camel.spi.ComponentResolver))"]}]}
Solution: After adding the adapter to the artifact you have to deploy the adapter manually.
Tuesday, 8 August 2023
Pick all the values from XML and check for the condition using groovy script in SAP CI
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import org.joda.time.*;
import groovy.json.*
def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
def scs = new XmlSlurper().parseText(body)
def accno = scs.InvTransDoc.InventoryTransaction.'**'.find {it.name() == 'AccountNumber'}?.text()
def fromLocCode = scs.InvTransDoc.InventoryTransaction.'**'.find {it.name() == 'fromLocationCode'}?.text()
def toLocCode = scs.InvTransDoc.InventoryTransaction.'**'.find {it.name() == 'toLocationCode'}?.text()
if(fromLocCode == "FSLHOLD" | fromLocCode == "FSLDAMAGED" | fromLocCode == "FSLMISSING")
{
message.setHeader("LocationCode",toLocCode);
}
else
{
message.setHeader("LocationCode",fromLocCode);
}
message.setHeader("StorLoc",accno);
return message;
}
Get the dynamic date's and return using groovy script in SAP CI
Based on the input day from the value mapping this returns, incase if the date's are changing later then it is config change only.
Groovy Script:
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.json.JsonSlurper
import groovy.json.JsonException
import groovy.json.JsonOutput
import javax.xml.*;
import groovy.xml.*
def Message processData(Message message)
{
import java.util.HashMap;
import groovy.json.JsonSlurper
import groovy.json.JsonException
import groovy.json.JsonOutput
import javax.xml.*;
import groovy.xml.*
def Message processData(Message message)
{
def propertyMap = message.getProperties()
String date2 = propertyMap.get("ExectutionDate");
String date3 = propertyMap.get("ExectutionDate1");
String date4 = propertyMap.get("ExectutionDate2");
def date1 = new Date()
String day = date1.getDate()
if (day == date2 || day == date3 || day == date4 )
{
String date2 = propertyMap.get("ExectutionDate");
String date3 = propertyMap.get("ExectutionDate1");
String date4 = propertyMap.get("ExectutionDate2");
def date1 = new Date()
String day = date1.getDate()
if (day == date2 || day == date3 || day == date4 )
{
Flag = "true";
}
else {
else {
Flag = "false"
}
message.setProperty("Flag1", Flag)
message.setProperty("day1", day)
return message;
message.setProperty("Flag1", Flag)
message.setProperty("day1", day)
return message;
}
Pick the certain date's of the month as output in mapping in SAP CI
There is a requirement where the report should run on certain date on every month, so this below logic is implement in mapping to achieve this.
Groovy script:
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.json.JsonSlurper
import groovy.json.JsonException
import groovy.json.JsonOutput
import javax.xml.*;
import groovy.xml.*
def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
def date = new Date()
def day = date.getDate()
def Flag = ""
if(day == 20 || day == 21 || day == 22 || day == 23){
Flag = "true"
}
else {
Flag = "false"
}
message.setProperty("Flag",Flag)
return message;
}
Remove XML hierarchy (multiple levels)nodes from the xml
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.xml.XmlUtil;
import groovy.util.*;
def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
def xml = new XmlSlurper().parseText(body)
xml.Lines.SerialNumber.Sub_Component.children().findAll { it.name() == 'SubCompDescription' }.replaceNode {}
xml.Lines.SerialNumber.children().findAll { it.name() == 'ItemDescription' }.replaceNode {}
body = XmlUtil.serialize(xml)
message.setBody(body);
return message;
}
Find all the messages from the unformatted xml and place in newline
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.xml.XmlUtil;
import groovy.util.*;
def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
def xml = new XmlSlurper().parseText(body)
def error = xml.'**'.findAll { it.name() == 'message' }*.text().join('\n')
message.setBody(error);
return message;
}
CSV file to be prepared with multiple header with multiple line item using groovy script
On receiver side CSV file generation, CSV file to be prepared with multiple header with multiple line item using groovy script:
import com.sap.gateway.ip.core.customdev.util.Message;
import groovy.xml.*;
def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
def ag = new xml2csv()
message.setBody(ag.execute(body))
return message
}
class xml2csv {
def execute(ins) {
//define writer
def writer = new StringWriter()
//parse input
def parsedXml = new XmlParser().parseText(ins)
def content = new XmlSlurper().parseText(ins)
def header = content.Header.children().collect().join(',')
def csv = content.Item.inject(header){ result, row ->
[result, row.children().collect().join(',')].join("\n")
}
println csv.toString()
return csv.toString()
}
}
Subscribe to:
Posts (Atom)