IBM Support

Sample SFTP bpml to loop through a specific number of files to retrieve.

Technical Blog Post


Abstract

Sample SFTP bpml to loop through a specific number of files to retrieve.

Body

Occasionally you may have the need to 'get' a certain number of files from a sftp server instead of all of them. The following bpml can accomplish that. It has been tested with 500 files on the sftp server with only 450 being brought in. Obviously it will need to run a second time to 'get' the rest of the files.

NOTE: This is a sample bpml that can be used and modified at will.  It is not under any type of support obligation.  Please test in a test environment before use.

The following parameters highlighted in RED BOLD are ones that need to be changed or verified.

<process name="sftp_sample_get">
<rule name="DocumentFound">
<condition>string-length(/ProcessData/SFTPClientListServiceResults/Files/File/Name/text()) &gt; 0</condition>
</rule>
<rule name="FileLimiter"> <!-- Max number of files to get from Server -->
    <condition>counter&lt;450</condition>
</rule>
<sequence>
<operation name="SFTP Client Begin Session Service">
<participant name="SFTPClientBeginSession"/>
<output message="SFTPClientBeginSessionServiceTypeInputMessage">
<assign to="." from="*"></assign>
<assign to="ProfileId">remoteprofileIDgoeshere</assign>
<assign to="SFTPClientAdapter">SFTPClientAdapter</assign>
</output>
<input message="inmsg">
<assign to="." from="*"></assign>
</input>
</operation>
<operation name="SFTP Client SFTP CD SERVICE">
<participant name="SFTPClientCd"/>
<output message="CdRequest1">
<assign to="SessionToken" from="/ProcessData/SessionToken/text()"></assign>
<assign to="Directory">files</assign> 
</output>
<input message="inmsg">
<assign to="SFTPClientCdServiceResults" from="*"></assign>
</input>
</operation>
<operation name="SFTP Client LIST Service">
<participant name="SFTPClientList"/>
<output message="SFTPClientListServiceTypeInputMessage">
<assign to="SessionToken" from="/SFTPClientBeginSessionServiceResults/SessionToken/text()"></assign>
<assign to="RemoteFileName">*txt</assign>
<assign to="." from="*"></assign>
</output>
<input message="inmsg">
<assign to="SFTPClientListServiceResults" from="*"></assign>
</input>
</operation>   
<assign to="NumberOfFiles" from="count(/ProcessData/SFTPClientListServiceResults/Files/File)"></assign>
<sequence name="CounterloopSequence">
<assign to="counter">0</assign>
<sequence name="loopSequence">
<choice name='loop'>
<select>
<case ref="FileLimiter" activity="proceed"/>
</select>
<sequence name="proceed">
<choice name="DoesDocExist">
<select>
<case ref="DocumentFound" activity="DocLoop"/>
<case ref="DocumentFound" negative="true" activity="BailingOUT"/>
</select>
<sequence name="DocLoop">
<operation name="SFTP Client GET Service">
<participant name="SFTPClientGet"/>
<output message="SFTPClientGetServiceTypeInputMessage">
<assign to="SessionToken" from="SFTPClientBeginSessionServiceResults/SessionToken/text()"></assign>
<assign to="RemoteFileName" from="/ProcessData/SFTPClientListServiceResults/Files/File[1]/Name/text()"></assign>
<assign to="." from="*"></assign>
</output>
<input message="inmsg">
<assign to="SFTPClientGetServiceResults" from="*"></assign>
</input>
</operation>
<operation name="SFTP Client DELETE Service">
<participant name="SFTPClientDelete"/>
<output message="SFTPClientDeleteServiceTypeInputMessage">
<assign to="." from="*"></assign>
<assign to="RemoteFileName" from="/ProcessData/SFTPClientListServiceResults/Files/File[1]/Name/text()"></assign>
<assign to="SessionToken" from="/ProcessData/SessionToken/text()"></assign>
</output>
<input message="inmsg">
<assign to="." from="*"></assign>
</input>
</operation>
<operation name="Release Service">
<participant name="ReleaseService"/>
<output message="ReleaseServiceTypeInputMessage">
<assign to="TARGET">/ProcessData/SFTPClientListServiceResults/Files/File[1]</assign>
</output>
<input message="inmsg">
</input>
</operation>
<assign to="counter" from="counter+1" />
<assign to="currentValue" append="true" from="counter/text()" />
<repeat name="Repeat" ref="loopSequence"/>
</sequence>
<sequence name="BailingOUT">
<assign to="FilesLeft">NO</assign>
</sequence>
</choice>
</sequence>
</choice>
</sequence>
</sequence>
<sequence name="END_SFTP_SESSION">
<operation name="SFTP Client End Session Service">
<participant name="SFTPClientEndSession"/>
<output message="SFTPClientEndSessionServiceTypeInputMessage">
<assign to="." from="*"></assign>
</output>
<input message="inmsg">
<assign to="." from="*"></assign>
</input>
</operation>
</sequence>
</sequence>
</process>

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SS3JSW","label":"IBM Sterling B2B Integrator"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":"","Line of Business":{"code":"LOB59","label":"Sustainability Software"}}]

UID

ibm11120959