Thursday, 12 August 2021

SAP CPI message mapping groovy script for different scenarios with context handlings



Add all values of the context


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


def void addContext(String[] values, Output output, MappingContext context) {


output.addValue(values.sum{it.toBigDecimal()})

}



Return last value of the context


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

def void returnlast(String[] values, Output output, MappingContext context) {

output.addValue(values.last())

}


Replace Null


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

def String replaceNull(String arg1){

def len = arg1.length()

def output

if (len > 1)

output = arg1

else

output = arg1.replaceAll("","NA")

return output

}



Filter null and Suppress Null:


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

def void filterNullAndSuppress(String[] values, Output output, MappingContext context) {
def filtered = values.findAll { v -> v != null && !output.isSuppress(v) }
filtered.each { v -> output.addValue(v) }
}



Remove Suppress:


def void removeSuppress(String[] values, Output output, MappingContext context) {

values.each { v ->

if (!output.isSuppress(v)) {

output.addValue(v)

}
}
}


Find elements incontext that starts with

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

def void filterStatus(String[] values, Output output, MappingContext context) {

def filtered = values.findAll { v -> v.startsWith('2') }

filtered.each { v -> output.addValue(v) }

}


Find elements incontext that starts with


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

def void filterStatus(String[] values, Output output, MappingContext context) {

def filtered = values.findAll { v -> v.startsWith('1')|| v.startsWith('Z6')}

filtered.each { v -> output.addValue(v.split(/@/)[1]) }

}


Read Value map and store in property


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

import java.util.HashMap;

import com.sap.it.api.ITApiFactory

import com.sap.it.api.mapping.ValueMappingApi


def Message processData(Message message) {

//Body

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

def map = message.getProperties();

value=map.get("langcode")



def valueMapApi = ITApiFactory.getApi(ValueMappingApi.class, null)

def lang = valueMapApi.getMappedValue('c4c', 'language', value, 'ymkt', 'lang')

message.setProperty("lang", lang);

return message;

}


Split string with a delimiter


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

import java.util.HashMap;

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

def String split(String arg1){

def output = arg1.split("@");

return output[1]

}



To check the input is numeric or not ->returns true or false.


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

def String customFunc(String arg1){

def output = arg1.isNumber()

return output

}

Output payload:

<?xml version="1.0" encoding="UTF-8"?>

 <test>
       <id>true</id>
</test>



Rearrange one input according to other input field value in mapping groovy script in SAP CPI

Rearrange one input value according to other input field value inside message mapping. 


Groovy Script:

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

def void customFunc(String[] Prod1, String[] Prod, String[] Cat, Output result,MappingContext context){

for(int i=0; i<Prod1.length; i++){

for(int j=0; j<Prod.length; j++){

if(Prod[j]==Prod1[i])

{
result.addValue(Cat[j])
}
}
result.addContextChange()
}
}




Remove duplicates in the mapping groovy script

Remove duplicates from the input field and place in a array and return the fields values.



Groovy Script:

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


def void customFunc(String[] a, Output result){

def Prod = []

Prod[0]=a[0]

result.addValue(a[0])

for(int i=1; i<a.length; i++){

if(Prod.contains(a[i]))

continue;

else{

Prod.add(a[i]);

result.addValue(a[i]);

}
}
}




Thursday, 10 June 2021

Groovy Script for removing the first two line from the csv/flat file in SCI/CPI/HCI

 Groovy script to remove first two lines from the string or csv file or flat file:


Remove first 2 lines:

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) {

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

def lines=body.split("\n").drop(2).join("\n")

message.setBody(lines)
return message;
}

Input:

1Bricks measurement 24/60cm
2Ravikumar
3RAmu
4Dinesh
5Vishnu
6Pradab

Output:

3RAmu
4Dinesh
5Vishnu
6Pradab


Take first two lines:













Thursday, 3 June 2021

Split the value by special character @ from the string using groovy script in SAP CPI/SCPI

Split the value by special character @ from the string using groovy script in mapping level in SAP CPI/SCPI.

Written a script to handle the logic on the splitting of two string using a special character

Groovy script:

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

def void filterStatus(String[] values, Output output, MappingContext context) {
def filtered = values.findAll { v -> v.startsWith('1')|| v.startsWith('Z6')}
filtered.each { v -> output.addValue(v.split(/@/)[1]) }

}


Input: 1@2020-05-23 22:00:00

Output: 2020-05-23 22:00:00




SAP CPI Testing tool -Figaf introduced

 Testing Tool for CPI message testing. Figaf Tool.


You can test without writing code or enabling the trace in the iflow.
  • Mock Testing
  • Secured Testing
  • Testing with multiply endpoints

Figaf Testing Tool




Thursday, 15 April 2021

Groovy script to minus 10 minutes from current time and different stored format time.

It is the groovy script written for using the script in SAP Cloud platform integration interface flow.


Have written a Groovy script to minus 10 minutes from current time and different stored format time. This it required in building the query.


Input:   LastSuccessfulRun_Query = "04/14/2021 16:20:00"

Groovy Script:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import java.util.TimeZone;
import groovy.time.TimeCategory;
def Message processData(Message message) {
//Body
def body = message.getBody();
//Properties

def curDateTime1 = "";
def before10mins = "";
def bef10mins = "";
def lastrun = "";
def value1 = "";
def tz = TimeZone.getTimeZone("UTC")
def ts = new Date()
map = message.getProperties();
value = map.get("LastSuccessfulRun_Query");
use( TimeCategory ) {

before10mins = ts - 10.minutes
lastrun = new Date(value) - 10.minutes

}

curDateTime1 = (ts.format("MM/dd/yyyy HH:mm:ss", timezone=tz))
bef10mins = (before10mins.format("MM/dd/yyyy HH:mm:ss", timezone=tz))
value1 = (lastrun.format("MM/dd/yyyy HH:mm:ss", timezone=tz))

def datequery = "(CREG_PROD_LAST_CHANGE_DATE_TIME ge"+"'"+lastrun+" UTC"+"'"+" and CREG_PROD_LAST_CHANGE_DATE_TIME le"+"'"+bef10mins+" UTC"+"'"+")";

// def datequery = "(CREG_PROD_LAST_CHANGE_DATE_TIME ge'01/15/2021 00:00:00 CET' and CREG_PROD_LAST_CHANGE_DATE_TIME le'01/20/2021 00:00:00 CET')";

message.setHeader("datequery",datequery);
message.setProperty("CurrentDate",curDateTime1);
message.setProperty("before10mins",before10mins);
message.setProperty("bef10mins",bef10mins);
message.setProperty("value",value);
message.setProperty("value1",value1);
message.setProperty("lastrun",lastrun);

return message;
}

Output:  value1 = "04/14/2021 16:10:00"