SFTP - looping through the list of files

Mirjana's picture

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

  • Business Process


  • BPML Code
<process name="default">
          <rule name="moreFiles">
                    <condition>count(Files/File) &gt;= 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

  •  Business Process

 

  • BPML Code
<process name="default">
          <rule name="moreFiles">
                    <condition>count(Files/File) &gt; 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>