Introduction

As there is no dedicated Managed File Transfer (MFT) capability in PI (yet!), passthrough scenario is a common approach to achieving a 1-1 file transfer interface. A passthrough scenario is one of the simplest configuration in PI as there are no ESR objects required.

However, every now and then, we come across requirements that slightly complicates the passthrough scenario, i.e. changing the filename extension, adding prefix to the original filename, adding timestamp in a custom format. These cannot be achieved by the standard file-based adapters. To get around it, some form of mapping is required and therefore we return to the necessity to have ESR objects. Here are some common approaches so far:

  • Create a passthrough Java mapping that dynamically modifies the Dynamic Configuration attributes
  • Configure FCC at sender, perform 1-1 mapping and configure FCC at receiver
  • Execute additional OS-level commands/scripts to perform renaming/moving of file

DynamicAttributeChangeBean (DACB) is an adapter module solution that aims to fill this gap, in particular addressing these passthrough scenarios. DACB is another “develop/deploy once, use multiple times” adapter module (the likes of ExcelTransformBean) that is highly configurable and reusable.

Source Code and Deployment Archive

DynamicAttributeChangeBean belongs in the same adapter module project as FormatConversionBean. Refer to following blog for the location of source code and/or EAR deployment file.

FormatConversionBean – One Bean to rule them all!

Module Parameter Reference

Below is a list of the parameters for configuration of the module. Certain parameters will automatically inherit the default values if it is not configured.

Parameter Name Allowed values Default value Remarks
mode

add,

change,

delete,

regex,

none

Required field. Determines the mode of processing

  • add = Adds prefix and/or suffix to the attribute
  • change = Replaces a value in the attribute with a new value
  • delete = Deletes prefix and/or suffix from the attribute
  • regex = A more dynamic version of change mode performed via regular expression matching and substitution on the attribute
  • none = Used if only timestamp addition is required
namespace http://sap.com/xi/XI/System/File Namespace of the input Dynamic Configuration attribute
attribute FileName Input Dynamic Configuration attribute
outNamespace If blank, inherit from namespace Optional output namespace if it differs from input Dynamic Configuration namespace
outAttribute If blank, Inherit from attribute Optional output attribute if it differs from input Dynamic Configuration attribute
prefix

Available when mode = ‘add’ or ‘delete’

Value at the front of attribute to be added or deleted

suffix

Available when mode = ‘add’ or ‘delete’

Value at the end of attribute to be added or deleted

oldValue

Required field when mode = ‘change’

Existing value in attribute to be replaced

newValue

Required field when mode = ‘change’

New value as replacement in attribute

replaceAll Y, N N

Available when mode = ‘change’

Replaces all values of oldValue in the attribute

regex

Required field when mode = ‘regex’

The regular expression for matching patterns of the attribute

replacement

Required field when mode = ‘regex’

The replacement value for the matched patterns. Matched capturing groups from the regular expression above can be referenced in the replacement value

addTimestamp Y, N N Adds timestamp at the end of the attribute before the extension (the last .xxx)
timestampFormat yyyyMMdd-HHmmss-SSS

The format of the timestamp following allowed patterns in Java’s SimpleDateFormat

Example Scenarios

Here are some example use case scenarios for DACB based on different configuration options. For the sake of simplicity, the results shown are Console output using the Standalone testing of Adapter Module in NWDS approach.

Scenario 1

Add prefix and suffix to the FileName attribute.

Module parameters

Parameter Name Parameter Value
mode add
namespace http://sap.com/xi/XI/System/File
attribute FileName
prefix MY_
suffix .zip

Result

The FileName attribute is appended with a prefix and suffix.

/wp-content/uploads/2015/02/add_639690.png

Scenario 2

Change the extension of the FileName attribute.

Output attribute in a different namespace.

Module parameters

Parameter Name Parameter Value
mode change
namespace http://sap.com/xi/XI/System/File
attribute FileName
outNamespace http://sap.com/xi/XI/SFTP/SFTP
oldValue .txt
newValue .xml

Result

The extension is changed from txt to xml and stored in a different namespace. Note that the original input attribute is not modified.

/wp-content/uploads/2015/02/change_639691.png

Scenario 3

Delete the last extension.

Use default namespace and attribute.

Add a custom timestamp.

Module parameters

Parameter Name Parameter Value
mode delete
suffix .pgp
addTimestamp Y
timestampFormat ‘_’yyyyMMdd

Result

The default namespace and attribute is used. The PGP extension is removed from the filename, and a timestamp is added.

/wp-content/uploads/2015/02/delete_639705.png

Scenario 4

Dynamic change mode using regular expression.

Match the filename pattern while also capturing the two numeric groups – the first (\d+) after order Order and the second (\d+) after Batch.

Rename the output using references from the matched capturing groups ($1 and $2.)

Module parameters

Parameter Name Parameter Value
mode regex
regex Order_(\d+)_Batch_(\d+).xml
replacement PO_$1_Group_$2.txt

Result

Values 1234 and 10 are captured from the input attribute, and used in the renaming of the output attribute.

/wp-content/uploads/2015/02/regex_639706.png

Scenario 5

And finally (and this is the most exciting example use case!) an example based on an actual requirement from this thread. For this, actual configuration and testing screenshots will be shown.

Requirement: Determine the target folder based on the dynamic values contained in the file name.

Module configuration

/wp-content/uploads/2015/02/mod_639722.png

Monitoring Logs and Testing Result

An input file with value of Partner1_002_Invoice.xml set in the Dynamic Configuration FileName attribute.

/wp-content/uploads/2015/02/input_639723.png

After the module processing by DACB, an additional attribute for Directory is added, with the value dynamically determined from the input filename. The target directory = /sapinterface/xxx/Partner1/002/

/wp-content/uploads/2015/02/afterbean_639724.png

The audit log shows the attribute changes and the file being routed to the dynamically determined target directory.

/wp-content/uploads/2015/02/log_639731.png

And we find the file in the directory as expected!

/wp-content/uploads/2015/02/sftp_639732.png

Conclusion

With usage of DACB, most passthrough scenarios can remain “ESR object”-less (although there is actually reason to have at least the Service Interface defined in ESR)

To report this post you need to login first.

10 Comments

You must be Logged on to comment or reply to a post.

  1. Eurico Borges

    Hi @Eng Swee Yeoh    could this module be used in a context of a dynamic sender filename in a case of a filename that has fixed part and a timestamp? This would be for a case where we would want to retrieve always only ‘todays’ file (e.g EXCHANGERATES_20161121.txt ) from a FTP server.

    Regards
    Eurico
     

    (0) 

Leave a Reply