I was writing an FTP adapter for a client recently for a legacy integration project, when a couple of requirements came up:
1) When reading the file from a remote location, the client wanted to use the filename as a data element.
2) When writing the file to a remote location, the client wanted the filename to be based on one the elements from the inbound data (in this case a Primary Key from an Oracle table).
Part I: Reading the filename from the inbound FTP Adapter
The solution in short is this – when you create the FTP Adapter Receive, goto the properties and assign the jca.ftp.FileName to a variable. For example, I created a simple String variable in my BPEL process called “FileName” and then assigned the jca.ftp.FileName to “FileName” BPEL variable. The end result was this …..
<receive name=”ReceiveFTPFile” createInstance=”yes”
variable=”FTPAdapterOutput”
partnerLink=”ReadFileFromRemoteLocation”
portType=”ns1:Get_ptt” operation=”Get”>
<bpelx:property name=”jca.ftp.FileName” variable=”FileName”/>
</receive>
Here’s a visual guide on how to do this:
Create a Variable
Assign the Variable to the jca.ftp.FileName property on the Receive …
Part II: Assigning a special element name instead of YYYY-MM-DD etc for FTP Outbound filename:
You can use this same process as shown above in the Outbound FTP Adapter. That is, read the value from the element you want the filename to be (either create a new String BPEL var or resuse something in your schema) and assign it to the Invoke property’s jca.ftp.FileName.