Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
roger_alluivall
Participant

Use


RenameFile module is used to replace strings within the value of Dynamic Configuration key ["FileName",http://sap.com/xi/XI/System/File]. It can be used to modify a part of the file name of the message before it gets in PI and also before it gets out.  The module obtains a pair of string : <OldString>;<NewString> as parameter. Reads the Dynamic Configuration key ["FileName",http://sap.com/xi/XI/System/File] of the message. Then it searches <OldString> within the  filename and replace each occurrence with <NewString>. Finally it updates the key with the new value and the original message is returned.


The module accepts multiple string pairs to allow multiple replacements in one execution.



Deployment

Enterprise Java Bean Project: RenameFile_EJB

Enterprise Java Bean Application: RenameFile_EAR

Integration

The module can be used in any Sender or Receiver File/FTP Adapter.

Activities

This section describes all the activities that have to be carried out in order to configure the module.

Entries in processing sequence

Insert the module in front of the adapter module as shown in the picture below.

Entries in the module configuration


The table below shows the possible parameters and values of the adapter module.

ParameterTypePossible ValuesDescriptionExample
separatorOptional

Any alphanumeric character.

Default value: ‘|’
This parameter configures the character that separates a pair of strings.separator = ‘;’
param(*)Mandatory

Pair of strings separated by

“separator” character.

<OldString><separator>[<NewString>,blankString,emptyString].

  Default value: none.
This parameter is used to obtain Old string to be replaced by the New string in the message. The pair is separated by “separator”. As Adapter module tab in PI trims strings by the right side, if it’s needed to replace OldString by a blank string or an empty string, the values  blankString or emptyString have to be used.

param1=str1;str2

param2=str1;blankString

  param3=str1;emptyString

(*) The parameter name can be any string: param1, parameter, aaa, etc.

Example


Adapter Type:

File/Ftp Sender


Dynamic Configuration before execution:

Module parameters:

separator = ‘;’

param1 = .GENERATED;emptyString

Dynamic Configuration after execution:

Audit Log

The execution process can be followed in the audit log generated per message.

RenameFileBean


package com.rav.integrations.modules;
import java.rmi.RemoteException;
import java.util.Enumeration;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import com.sap.aii.af.lib.mp.module.ModuleContext;
import com.sap.aii.af.lib.mp.module.ModuleData;
import com.sap.aii.af.lib.mp.module.ModuleException;
import com.sap.aii.af.service.auditlog.Audit;
import com.sap.engine.interfaces.messaging.api.Message;
import com.sap.engine.interfaces.messaging.api.MessageKey;
import com.sap.engine.interfaces.messaging.api.MessagePropertyKey;
import com.sap.engine.interfaces.messaging.api.auditlog.AuditLogStatus;
/**
* @author Roger Allué Vall
*
*/
public class RenameFileBean implements SessionBean, TimedObject {
  
    private static final long serialVersionUID = 1L;
    private static final String C_SEPARATOR_STRING = "separator";
    private static final String C_AUX_SEPARATOR = "|";
    private static final String C_MODULEKEY_STRING = "module.key";
    private static final String C_BLANK_STRING = "blankString";
    private static final String C_EMPTY_STRING = "emptyString";
    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#ejbActivate()
     */
    public void ejbActivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
    }
    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#ejbPassivate()
     */
    public void ejbPassivate() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
    }
    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#ejbRemove()
     */
    public void ejbRemove() throws EJBException, RemoteException {
        // TODO Auto-generated method stub
    }
    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
     */
    public void setSessionContext(SessionContext arg0) throws EJBException,
            RemoteException {
        // TODO Auto-generated method stub
    }
    /* (non-Javadoc)
     * @see javax.ejb.TimedObject#ejbTimeout(javax.ejb.Timer)
     */
    public void ejbTimeout(Timer arg0) {
        // TODO Auto-generated method stub
    }
    public void ejbCreate() throws javax.ejb.CreateException {
      
    }
  
    public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData)    throws ModuleException {
        Message msg;
        Enumeration<String> paramList;
        String sep, paramKey,param, strArray[];
              
        try {
             msg = (Message) inputModuleData.getPrincipalData();
             MessageKey amk = new MessageKey(msg.getMessageId(), msg.getMessageDirection());
             MessagePropertyKey FileKey = new MessagePropertyKey("FileName","http://sap.com/xi/XI/System/File");           
             String fileName = msg.getMessageProperty(FileKey);
              
             sep = moduleContext.getContextData(C_SEPARATOR_STRING);
      
             if ( sep == null ) {
                sep = C_AUX_SEPARATOR;
                Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Default separator used: " + sep);
             }
             else {
                Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Separator found: " + sep);
             }
                       
             paramList = moduleContext.getContextDataKeys();
               while( paramList.hasMoreElements()) {
                    paramKey = paramList.nextElement();
                 param =  (String) moduleContext.getContextData(paramKey);
               
                 if ( ! paramKey.equals(C_SEPARATOR_STRING) && ! paramKey.equals(C_MODULEKEY_STRING) ){
                    Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"ParamKey: " + paramKey);
                    Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Substitució Param: " + param);
                    Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Substitució sep: " + sep);                  
                    strArray = param.split(sep);
                  
                    if (strArray != null){  
                       if ((! strArray[0].equals(null)) && (! strArray[1].equals(null))){
                        if ( strArray[1].equals(C_BLANK_STRING)){
                            Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Blank String");
                            strArray[1]=" ";                          
                        }
                        else if (strArray[1].equals(C_EMPTY_STRING)){
                            strArray[1]="";
                            Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Empty String");
                        }
                        Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Substitution array strArray[0]: " + strArray[0]);
                        Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Substitution array strArray[1]: " + strArray[1]);
                        Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Substitution array fileNameA : " + fileName);          
                        fileName = fileName.replaceAll(strArray[0],strArray[1]);
                        Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,"Substitution fileNameB : " + fileName);
                       }
                    }
                 }
             }      
             msg.removeMessageProperty(FileKey);
             msg.setMessageProperty(FileKey,fileName);      
        }
        catch(Exception e) {
            ModuleException me = new ModuleException(e);
            throw me;
        }    
        return inputModuleData;
    }
}
Labels in this area