Wednesday, January 24, 2024

standard SAP CPI Groovy scripting url,get ,set property header, security , value mapping,

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

import java.nio.charset.Charset


Message extractUrlGetParameters(Message message) {

        

        String httpQuery = message.getHeader('CamelHttpQuery', String)

        

        if (httpQuery) {

            Map<String, String> queryParameters = URLDecoder.decode(httpQuery, Charset.defaultCharset().name())

                .replace("\$","")

                .tokenize('&')

                .collectEntries { it.tokenize('=') }

            

            message.setProperties(queryParameters)

        }       

    

    return message

}

----------------

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

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

 

/*Add MappingContext parameter to read or set headers and properties

def String customFunc1(String P1,String P2,MappingContext context) {

         String value1 = context.getHeader(P1);

         String value2 = context.getProperty(P2);

         return value1+value2;

}

 

Add Output parameter to assign the output value.

def void custFunc2(String[] is,String[] ps, Output output, MappingContext context) {

        String value1 = context.getHeader(is[0]);

        String value2 = context.getProperty(ps[0]);

        output.addValue(value1);

        output.addValue(value2);

}*/

 

def String getheader(String header_name, MappingContext context) {

 

    def headervalue= context.getHeader(header_name);

 

    return headervalue;

 

}

 

def String getProperty(String property_name, MappingContext context) {

 

    def propValue= context.getProperty(property_name);

 

    return propValue;

 

}

 

def String setHeader(String header_name, String header_value, MappingContext context) {

   

    context.setHeader(header_name, header_value);

   

   

    return header_value;

}

 

def String setProperty(String property_name, String property_value, MappingContext context) {

   

    context.setProperty(property_name, property_value);

   

   

    return header_value;

}

-----------

mpl attachment

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

import java.util.HashMap


def Message payloadLogger(Message message) {

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

    def messageLog = messageLogFactory.getMessageLog(message)

    if (messageLog != null) {

        messageLog.addAttachmentAsString('Payload', body, 'text/plain')

    }

    return message

}

--------------


MPLCustomHeader.groovy

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


def Message setCustomHeader(Message message) {

    

def messageLog = messageLogFactory.getMessageLog(message);

if(messageLog != null){


def po_number = message.getHeaders().get("po_number");

if(po_number!=null){

messageLog.addCustomHeaderProperty("po_number", po_number);

        }

}

return message;

}

-----------

parseJsonMessage

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

import java.util.HashMap;

import groovy.json.JsonSlurper;


def Message parseJsonMessage(Message message) {

    //Get message and parse to json

    def json = message.getBody(java.io.Reader);

    def data  = new JsonSlurper().parse(json);


    //get fields of the payload (service, ressource & id)

    message.setProperty("service", data.query.service);

    message.setProperty("resource", data.query.entity.name);

    message.setProperty("id", data.query.entity.id);

    //get columns to be read

    def numFields = data.query.entity.fields.size();

    def fields = "";

    for (int i=0; i<numFields; i++) {

        fields += data.query.entity.fields[i].name;

        if (i<numFields-1) fields += ",";

    }

    message.setProperty("fields", fields);


    return message;

}

---------------
read url parameters;
import com.sap.gateway.ip.core.customdev.util.Message
import java.nio.charset.Charset

Message extractUrlGetParameters(Message message) {
        
        String httpQuery = message.getHeader('CamelHttpQuery', String)
        
        if (httpQuery) {
            Map<String, String> queryParameters = URLDecoder.decode(httpQuery, Charset.defaultCharset().name())
                .replace("\$","")
                .tokenize('&')
                .collectEntries { it.tokenize('=') }
            
            message.setProperties(queryParameters)
        }       
    
    return message
}
----------
read url path
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;

def Message extractUrlPath(Message message) {

       //get url 
       def map = message.getHeaders();
       def url = map.get("CamelHttpUrl");

       //split url
       String[] vUrl;
       vUrl = url.split('/');
       int size = vUrl.length;

       message.setProperty("service", vUrl[size-3]);
       message.setProperty("resource", vUrl[size-2]);
       message.setProperty("id", vUrl[size-1]);
       return message;
}
-----------

read security material
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
import com.sap.it.api.securestore.SecureStoreService
import com.sap.it.api.securestore.UserCredential
import com.sap.it.api.securestore.exception.SecureStoreException

def Message accessSecurityMaterial(Message message) {
    def apikey_alias = message.getProperty("ApiKeyAlias")
    def secureStorageService =  ITApiFactory.getService(SecureStoreService.class, null)
    try{
        def secureParameter = secureStorageService.getUserCredential(apikey_alias)
        def apikey = secureParameter.getPassword().toString()
        message.setHeader("api-key", apikey)
    } catch(Exception e){
        throw new SecureStoreException("Secure Parameter not available")
    }
    return message;
}


------------
read value mapping.
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 readValueMapping(Message message) {

       //Properties 
       def map = message.getProperties();
       productId = map.get("id");
       
       def valueMapApi = ITApiFactory.getService(ValueMappingApi.class, null)
       def productCode = valueMapApi.getMappedValue('CompanyA', 'ID', productId, 'CompanyB', 'ProductCode')
       message.setProperty("productCode", productCode);
       
       return message;
}

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home