1. Get the list of the files from SFTP – loop through them with counter
SFTP LIST – SFTP GET every file by name … any task you can add after get
<process name="default">
<rule name="moreFiles">
<condition>count(Files/File) >= number(counter/text())</condition>
</rule>
<sequence name="main">
<operation name="SFTP Client Begin Session Service">
<participant name="SFTPClientBeginSession"/>
<output message="SFTPClientBeginSessionServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="KnownHostKeyId">VM-integrator:node1:13bfa51ac2e:60584</assign>
<assign to="RemoteHost">vm-integrator</assign>
<assign to="RemotePasswd">password</assign>
<assign to="RemotePort">19039</assign>
<assign to="RemoteUserId">admin</assign>
<assign to="SFTPClientAdapter">SFTPClientAdapter</assign>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
<operation name="SFTP Client LIST Service">
<participant name="SFTPClientList"/>
<output message="SFTPClientListServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="SessionToken" from="SessionToken/text()"/>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
<assign to="counter">1</assign>
<sequence name="loopStart">
<choice>
<select>
<case ref="moreFiles" activity="choiceStart"/>
</select>
<sequence name="choiceStart">
<sequence name="taskStart">
<operation name="SFTP Client GET Service">
<participant name="SFTPClientGet"/>
<output message="SFTPClientGetServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="RemoteFileName" from="Files/File[number(../../counter/text())]/Name/text()"/>
<assign to="SessionToken" from="SessionToken/text()"/>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
<assign to="counter" from="counter + 1"/>
</sequence>
<repeat ref="loopStart"/>
</sequence>
</choice>
</sequence>
<operation name="SFTP Client End Session Service">
<participant name="SFTPClientEndSession"/>
<output message="SFTPClientEndSessionServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="SessionToken" from="SessionToken/text()"/>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
</sequence>
</process>
2. Get the list of the files from SFTP – taking always the first one and release it after that
<process name="default">
<rule name="moreFiles">
<condition>count(Files/File) > 0</condition>
</rule>
<sequence name="main">
<operation name="SFTP Client Begin Session Service">
<participant name="SFTPClientBeginSession"/>
<output message="SFTPClientBeginSessionServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="KnownHostKeyId">VM-integrator:node1:13bfa51ac2e:60584</assign>
<assign to="RemoteHost">vm-integrator</assign>
<assign to="RemotePasswd">password</assign>
<assign to="RemotePort">19039</assign>
<assign to="RemoteUserId">admin</assign>
<assign to="SFTPClientAdapter">SFTPClientAdapter</assign>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
<operation name="SFTP Client LIST Service">
<participant name="SFTPClientList"/>
<output message="SFTPClientListServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="SessionToken" from="SessionToken/text()"/>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
<sequence name="loopStart">
<choice>
<select>
<case ref="moreFiles" activity="choiceStart"/>
</select>
<sequence name="choiceStart">
<sequence name="taskStart">
<operation name="SFTP Client GET Service">
<participant name="SFTPClientGet"/>
<output message="SFTPClientGetServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="RemoteFileName" from="Files/File[1]/Name/text()"/>
<assign to="SessionToken" from="SessionToken/text()"/>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
<operation name="Release Service">
<participant name="ReleaseService"/>
<output message="ReleaseServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="TARGET">Files/File[1]</assign>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
</sequence>
<repeat ref="loopStart"/>
</sequence>
</choice>
</sequence>
<operation name="SFTP Client End Session Service">
<participant name="SFTPClientEndSession"/>
<output message="SFTPClientEndSessionServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="SessionToken" from="SessionToken/text()"/>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>
</sequence>
</process>
If you add Mailbox Add service after SFTP GET, or maybe SFTP /FTP PUT, you should release Primary Document and DocumentId:
<operation name="Release Service">
<participant name="ReleaseService"/>
<output message="ReleaseServiceTypeInputMessage">
<assign to="." from="*"/>
<assign to="TARGET">PrimaryDocument | DocumentId</assign>
</output>
<input message="inmsg">
<assign to="." from="*"/>
</input>
</operation>