cancel
Showing results for 
Search instead for 
Did you mean: 

Dynamic file naming functionality without using ESR configuration

Hemant_Malvi
Explorer
0 Kudos

Hello Experts,

I am working on pass through File to SFTP scenario.

My requirement is to perform encryption (using Standard module) and file name should be dynamic adding timestamp.

Source file is in format ABC.TXT and I need to rename the file as ABCyyyyMMdd-HHmmss-SSS.csv.pgp.

I have referred the blog posted by Eng .

But output which I am getting is ABC.csvyyyyMMdd-HHmmss-SSS.pgp.

Please let me know how can I achieve this functionality without using ESR.

Regards,

Hemant Malvi

Accepted Solutions (0)

Answers (1)

Answers (1)

anupam_ghosh2
Active Contributor
0 Kudos

Hi Hemant,

                  Please try with following parameters for module key "DACB".

Please do not add time stamp from channel parameter rather add it via adapter module.

parameter name,   value

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

mode  ,    change

attribute , filename

namespace  , http://sap.com/xi/XI/System/File

addTimestamp, Y

oldValue, .TXT

newValue, .csv.pgp

outNamespace, http://sap.com/xi/XI/SFTP/SFTP

timestampFormat,    yyyyMMdd-HHmmss-SSS

Regards

Anupam

Hemant_Malvi
Explorer
0 Kudos

Hello Anupam,

Thanks for your inputs.

By using this approach I am getting the same name in target i.e. ABC.TXT.

Please see the logs of AE for better clarity.

Regards,

Hemant Malvi

anupam_ghosh2
Active Contributor
0 Kudos

Hi Hemant,

                 Can you please change the value of outNameSpace parameter to http://sap.com/xi/XI/System/File.

Regards

Anupam

Hemant_Malvi
Explorer
0 Kudos

Hello Anupam,

I tried the changes said by you. Getting the same result , I was getting initially.

i.e. ABC.csvyyyyMMdd-HHmmss-SSS.pgp.

anupam_ghosh2
Active Contributor
0 Kudos

Hi Hemant,

                 This is a issue with the module. It is placing the date just before last file extension.

The solution to this is that you use java mapping in your scenario or you can build your own custom adapter module.In case you are going for java mapping then here is the code you can use.


package com.javaMapping;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.Reader;

import java.io.UnsupportedEncodingException;

import java.text.SimpleDateFormat;

import java.util.Date;

import com.sap.aii.mapping.api.AbstractTransformation;

import com.sap.aii.mapping.api.DynamicConfiguration;

import com.sap.aii.mapping.api.DynamicConfigurationKey;

import com.sap.aii.mapping.api.StreamTransformationException;

import com.sap.aii.mapping.api.TransformationInput;

import com.sap.aii.mapping.api.TransformationOutput;

public class DynamicFileName_JavaMapping extends AbstractTransformation {

     private static final DynamicConfigurationKey KEY_FILENAME =

           DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");

    @Override

    public void transform(TransformationInput in, TransformationOutput out)

            throws StreamTransformationException {

        // TODO Auto-generated method stub

    

        String newFileName = null;

    

        Date date = new Date(); // get the current date

        SimpleDateFormat dateFormatter = new SimpleDateFormat ("yyyyMMdd-HHmmss-SSS"); // set the format for date

        String dfmt =  dateFormatter.format(date);

     

    

    

          DynamicConfiguration conf = in.getDynamicConfiguration();

          String oldFileName = conf.get(KEY_FILENAME);            

      

          oldFileName = oldFileName.replaceAll(".txt", "");

  

          newFileName = oldFileName + dfmt + ".csv.pgp" ; // the final filename

                

          String inData = convertStreamToString(in.getInputPayload().getInputStream());

          String outData = inData;

          try {

            out.getOutputPayload().getOutputStream().write(outData.getBytes("UTF-8"));

        } catch (UnsupportedEncodingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

          conf.put(KEY_FILENAME,newFileName);

    }

      public String convertStreamToString(InputStream in){

            StringBuffer sb = new StringBuffer();

            try

            {

            InputStreamReader isr = new InputStreamReader(in);

            Reader reader =

            new BufferedReader(isr);

            int ch;

            while((ch = in.read()) > -1) {

                sb.append((char)ch);}

                reader.close();

            }

            catch(Exception exception) { }

            return sb.toString();

            }

}

ESR steps

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

1) Create a Data Type

<DT_Structure>

  <Data>

  

  </Data>

</DT_Structure>

2) Create a Message Type, MT_Structure and refer DT_Structure.

3) Create an Outbound Service Interface, SI_Structure_Out and refer MT_Structure.

4) Create an Inbound Service Interface, SI_Structure_In and refer MT_Structure.

5) Create an Operational Mapping, OM_Structure. Refer SI_Structure_Out and SI_Structure_In.

6) Create a zip or jar file of below Java Mapping ‘DynamicFileName_JavaMapping’ (compiled). Import it into ESR as imported archive. Refer this Java Mapping in OM_Structure.

ID steps

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

1)  Create a File Sender channel. In ‘Advance’ tab, select ‘Use Adapter-Specific Message Attributes’ and ‘File Name’.

  2)  Create a SFTP Receiver channel. In ‘Advance’ tab, select ‘Use Adapter-Specific Message Attributes’ and ‘File Name’.

3)   Create Sender and Receiver Communication Components. Create ‘Integrated Configuration’ Object to run scenario in Advance Adapter Engine

4) When input is non-XML, and you are using ICO. Delete SWCV from ICO object.

5) do not add timestamp from receiver SFTP channel.

The same logic can be applied in custom adapter module if you want to skip ESR objects. Let me know in case you need that code.

Regards

Anupam

Hemant_Malvi
Explorer
0 Kudos

Hello Anupam,

Thanks for all your help. I will keep this blog as repository in my future requirement.

I have convinced ABAP people and they agreed to send data in .CSV format along with filename containing timestamp. So my task is easy now.

Regards,

Hemant Malvi