This is an automated email from the ASF dual-hosted git repository.

bamaer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/main by this push:
     new 9890528b32 Batch 10: Result sections for the FTP, SFTP put and HTTP 
actions. #8970 (#9149)
9890528b32 is described below

commit 9890528b3243c80837aac46d3c32ec7c1f51e892
Author: Adalennis <[email protected]>
AuthorDate: Fri Oct 30 10:55:02 2026 +0100

    Batch 10: Result sections for the FTP, SFTP put and HTTP actions. #8970 
(#9149)
    
    * Batch 10: Result sections for Get a file with FTP, FTP delete, Put a file 
with FTP, Put a file with SFTP and HTTP. #8970
    
    * Nr errors less than is true when Get a file with FTP or FTP delete fails 
before the transfer. #8970
---
 .../modules/ROOT/pages/workflow/actions/ftp.adoc   | 47 ++++++++++++++++------
 .../ROOT/pages/workflow/actions/ftpdelete.adoc     | 44 ++++++++++++--------
 .../ROOT/pages/workflow/actions/ftpput.adoc        | 29 +++++++++----
 .../modules/ROOT/pages/workflow/actions/http.adoc  | 31 ++++++++++----
 .../ROOT/pages/workflow/actions/sftpput.adoc       | 26 +++++++++---
 5 files changed, 127 insertions(+), 50 deletions(-)

diff --git a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftp.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftp.adoc
index 4aa6e916e6..7833c952d0 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftp.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftp.adoc
@@ -40,8 +40,8 @@ This workflow retrieves files from one directory exclusively.
 |Action name|The name of the workflow action.
 2+|Server
 |FTP connection|An optional xref:metadata-types/ftp-connection.adoc[FTP 
Connection] from the metadata. Pick one and the server, credentials, transfer 
mode, timeouts and proxy settings below come from that connection; leave it 
empty to configure the server on this action.
-|FTP server name/IP address|The name of the server or the IP address.
-|Server Port|Port number of the FTP server.
+|FTP server name / IP address|The name of the server or the IP address.
+|Server port|Port number of the FTP server.
 |Username|The user name associated with FTP server account.
 |Password|The password associated the FTP server account.
 |Proxy host|Proxy server host name.
@@ -50,8 +50,8 @@ This workflow retrieves files from one directory exclusively.
 |Proxy password|Proxy server account password.
 2+|Advanced
 |Binary mode|Enable if files must be transferred in binary mode.
-|Timeout|The FTP server timeout in seconds.
-|Use Active FTP connection|Enable if you are connecting to the FTP server 
using Active mode; you must set your firewall to accept connections to the port 
that your FTP client will open.
+|Timeout|The timeout in milliseconds, for example 30000 for 30 seconds. 0 (the 
default): no timeout.
+|Use active FTP connection|Enable if you are connecting to the FTP server 
using Active mode; you must set your firewall to accept connections to the port 
that your FTP client will open.
 The default is Passive mode.
 |Control Encoding|Encoding matters when retrieving file names that contain 
special characters.
 For Western Europe and the USA, ISO-8859-1 usually suffices.
@@ -67,20 +67,20 @@ Select encoding that is valid for your server.
 |Remote directory|The remote directory on FTP server from which files are 
taken.
 |Wildcard (regular expression)|Regular expression when you want to select 
multiple files.
 For example: .txt$ : get all text files A.ENG:0-9.txt : files starting with A, 
ending with a number and .txt
-|Remove files after retrieval|Remove the files on the FTP server, but only 
after all selected files have been successfully transferred.
-|Move files after retrieval|Move the files on the FTP server to the folder 
specified below, but only after all selected files have been successfully 
transferred.
-|Move to Folder|Moves files to specified folder on the server.
-|Create Folder|Creates folder that will contain files.
+|Remove files after retrieval|Removes each file from the FTP server right 
after it is downloaded. See the NOTE under <<Result>>.
+|Move files after retrieval|Moves each file on the FTP server to the folder 
below, right after it is downloaded. See the NOTE under <<Result>>.
+|Move to folder|The folder on the server to move the files to.
+|Create folder|Creates the move-to folder when it doesn't exist.
 2+|Local
-|Target Directory|The directory where you want to place the retrieved files.
+|Target directory|The directory where you want to place the retrieved files.
 |Include date in filename|Adds the system date to the filename (_20101231).
 |Include time in filename|Adds the system time to the filename (_235959).
-|Specify date time format|Enable to provide your own date/time format; the 
default is yyyyMMdd'_'HHmmss
+|Specify Date time format|Enable to provide your own date/time format in *Date 
time format*.
 |Date time format|Select date time format.
 |Add date before extension|Adds date to the file name before the extension.
 |Don't overwrite files|Enable to skip, rename, or fail if a file with an 
identical name already exists in the target directory.
-|If file exists|Action to take if a file with an identical name already exists 
in the target directory.
-|Add filenames to result|Enable to add the file name(s) read to the result of 
this workflow.
+|If file exists|Used with *Don't overwrite files*: Skip (default) leaves the 
local file and doesn't download the remote one, Give unique name to local file 
adds the date and time to the new file's name, Fail counts the file as an error.
+|Add filename to result|Adds the downloaded files to the result files (checked 
by default).
 |===
 
 === Advanced tab
@@ -106,4 +106,25 @@ For example: .txt$ : get all text files A.ENG:0-9.txt : 
files starting with A, e
 |Port|Socks Proxy port number.
 |Username|User name associated with the Socks Proxy account.
 |Password|Password associated with the Socks Proxy account.
-|===
\ No newline at end of file
+|===
+
+== Result
+
+What this action passes on to the next action. See 
xref:workflow/action-results.adoc[Action results] for how results travel 
through a workflow.
+
+[options="header", width="90%", cols="1,3"]
+|===
+|Result|Value
+|True a|Depends on *Success on* (Advanced tab):
+
+* All works fine (default): no file failed. No file matching the wildcard is 
also true.
+* At least we got x files: at least *Limit files* files were downloaded, 
whatever the number of errors.
+* Nr errors less than: the number of errors is at most *Limit files*. The 
download stops as soon as the number of errors reaches *Limit files*, and the 
action is still true then. Some failures before the download also count as 1 
error: see False.
+|False|The success condition is not met. Without *Nr errors less than*, the 
download stops at the first file that fails. The action is also false, before 
any download, when the server can't be reached or refuses the login, the remote 
directory doesn't exist, the wildcard is not a valid regular expression, or 
*Move files after retrieval* is checked while the move-to folder is empty, or 
doesn't exist and *Create folder* is unchecked. With *Nr errors less than*, an 
unreachable server, a ref [...]
+|Errors|The number of files that failed, or 1 when the action fails before the 
download.
+|Result files|The downloaded files are added when *Add filename to result* is 
checked (the default). The previous result files are kept.
+|Result rows|Passed on unchanged.
+|Files retrieved|The number of files downloaded.
+|===
+
+NOTE: *Remove files after retrieval* and *Move files after retrieval* act on 
each file right after it is downloaded, not after all files are: when a later 
file fails, the files before it are already removed or moved on the server.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpdelete.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpdelete.adoc
index 641c62fa99..6520ca0e2f 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpdelete.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpdelete.adoc
@@ -41,25 +41,15 @@ Existing workflows keep working and log a warning; new ones 
should use Delete fi
 |Protocol a|
 
 * FTP
-* SFTP (deprecated, see the note below)
+* SFTP (deprecated)
 
-|FTP connection|An optional xref:metadata-types/ftp-connection.adoc[FTP 
Connection] from the metadata. Pick one and the server, credentials, transfer 
mode, timeouts and proxy settings below come from that connection; leave it 
empty to configure the server on this action.
+|FTP connection|An optional xref:metadata-types/ftp-connection.adoc[FTP 
Connection] from the metadata. Pick one and the server, credentials, transfer 
mode, timeouts and proxy settings below come from that connection; leave it 
empty to configure the server on this action. To connect with FTPS, use an FTP 
connection and its *Security* option.
 |SFTP connection|An optional xref:metadata-types/sftp-connection.adoc[SFTP 
Connection] from the metadata, used when the protocol is SFTP.
-|FTP server name/IP address|The name of the server or the IP address.
-|Server Port|Port number of the FTP server.
+|FTP server name / IP address|The name of the server or the IP address.
+|Server port|Port number of the FTP server.
 |Username|The user name associated with FTP server account.
 |Password|The password associated the FTP server account.
 
-|Connection type a| FTPS connection type.
-
-* FTP
-* Implicit SSL
-* Authentication SSL
-* Implicit SSL with encrypted FTP connection
-* Authentication TLS
-* Implicit TLS
-* Implicit TLS with encrypted FTP connection
-
 |Use proxy|Whether or not to use a proxy.
 |Proxy host|Proxy server host name.
 |Proxy port|Proxy server port number.
@@ -78,14 +68,14 @@ Existing workflows keep working and log a warning; new ones 
should use Delete fi
 |===
 |Option|Description
 2+|Advanced
-|Timeout|The timeout period.
+|Timeout|The timeout in milliseconds, for example 30000 for 30 seconds. 0 (the 
default): no timeout.
 |Use active FTP connection|Enable if you are connecting to the FTP server 
using Active mode; you must set your firewall to accept connections to the port 
that your FTP client will open.
 The default is Passive mode.
 2+|Remote
-|Copy previous results to args?
+|Copy previous results to args|Deletes the files named in the first field of 
the previous result rows, instead of the files matching *Wildcard*.
 |Remote directory|The directory on the remote FTP server.
 |Check folder|Checks if the directory exists.
-|Wildcard (regular expression)
+|Wildcard (regular expression)|The regular expression the file names must 
match. Required unless *Copy previous results to args* is checked.
 2+|Success condition
 |Success on a| The success condition
 
@@ -106,3 +96,23 @@ The default is Passive mode.
 |Username|User name associated with the Socks Proxy account.
 |Password|Password associated with the Socks Proxy account.
 |===
+
+== Result
+
+What this action passes on to the next action. See 
xref:workflow/action-results.adoc[Action results] for how results travel 
through a workflow.
+
+[options="header", width="90%", cols="1,3"]
+|===
+|Result|Value
+|True a|Depends on *Success on*:
+
+* All works fine (default): no file failed. No file matching the wildcard is 
also true, and so is *Copy previous results to args* without previous result 
rows.
+* At least we delete x files: at least *Limit files* files were deleted.
+* Nr errors less than: the number of errors is at most *Limit files*. A 
failure before deleting counts as 1 error, so the cases listed under False give 
true with 1 error when *Limit files* is 1 or more.
+|False|The success condition is not met, for example because the server can't 
be reached or refuses the login, the remote directory doesn't exist, the 
wildcard is not a valid regular expression, or *Wildcard* is empty while *Copy 
previous results to args* is unchecked. The number of errors is the number of 
files that failed, or 1 when the action fails before deleting. With *Nr errors 
less than*, these failures count as 1 error, so the action is true when *Limit 
files* is 1 or more.
+|Result files|Passed on unchanged.
+|Result rows|Passed on unchanged.
+|Files retrieved|The number of files deleted. When the remote directory has no 
files, or *Copy previous results to args* is checked without previous result 
rows, the value of the previous action is passed on unchanged.
+|===
+
+NOTE: With *Copy previous results to args*, the first field of each previous 
result row is the name of a file to delete in the remote directory, and 
*Wildcard* is not used.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpput.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpput.adoc
index e3a8a2744c..a47d6dd173 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpput.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/ftpput.adoc
@@ -32,9 +32,9 @@ The Put A File With FTP action uploads a file to an FTP 
server.
 |===
 |Option|Description
 |Action name|The name of the workflow action.
-2+|General tab
+2+|Server settings
 |FTP connection|An optional xref:metadata-types/ftp-connection.adoc[FTP 
Connection] from the metadata. Pick one and the server, credentials, transfer 
mode, timeouts and proxy settings below come from that connection; leave it 
empty to configure the server on this action.
-|FTP server name/IP address|The name of the server or the IP address.
+|FTP server name / IP address|The name of the server or the IP address.
 |Port|The port number the FTP server connects on.
 |Username|The user name associated with the FTP server account.
 |Password|The password associated the FTP server account.
@@ -45,10 +45,10 @@ The Put A File With FTP action uploads a file to an FTP 
server.
 |Test connection|Tests the configured connection.
 2+|Advanced settings
 |Binary mode|Enable if files must be transferred in binary mode.
-|Timeout|The FTP server timeout in seconds.
-|Use Active FTP connection|Enable if you are connecting to the FTP server 
using Active mode; you must set your firewall to accept connections to the port 
that your FTP client will open.
+|Timeout|The timeout in milliseconds, for example 30000 for 30 seconds. 0 (the 
default): no timeout.
+|Use active FTP connection|Enable if you are connecting to the FTP server 
using Active mode; you must set your firewall to accept connections to the port 
that your FTP client will open.
 The default is Passive mode.
-|Control Encoding|Select the character encoding to use for determining special 
characters in file names.
+|Control encoding|Select the character encoding to use for determining special 
characters in file names.
 For Western Europe and the USA, ISO-8859-1 usually suffices.
 Select encoding that is valid for your server.
 |===
@@ -62,8 +62,8 @@ Select encoding that is valid for your server.
 |Local directory|The local directory from which to upload.
 |Browse...|Browse the filesystem for a local directory.
 |Wildcard (regular expression)|If you are uploading multiple files, specify a 
regular expression that defines the set of files you want to upload.
-|Remove files after transferal?|Enable to remove files from the local 
directory after they've been uploaded.
-|Don't overwrite files|Enable to skip files that already exist in the remote 
directory.
+|Remove files after transferal|Enable to remove files from the local directory 
after they've been uploaded.
+|Don't overwrite files|Enable to skip files that already exist in the remote 
directory. See the WARNING under <<Result>>.
 |Remote directory|The directory on the FTP server to upload files to.
 |Test folder|Test if the remote directory exists. This connects to the FTP 
server and attempts to access the specified directory. If this directory 
doesn't exist, the upload fails.
 |===
@@ -78,3 +78,18 @@ Select encoding that is valid for your server.
 |Username|The user name associated with the Socks proxy server account.
 |Password|The password associated with the Socks proxy server account.
 |===
+
+== Result
+
+What this action passes on to the next action. See 
xref:workflow/action-results.adoc[Action results] for how results travel 
through a workflow.
+
+[options="header", width="90%", cols="1,3"]
+|===
+|Result|Value
+|True|Every matching file was uploaded, with 0 errors. No file matching the 
wildcard is also true.
+|False|A file can't be uploaded, the server can't be reached or refuses the 
login, the remote directory doesn't exist, *Local directory* is empty or 
doesn't exist, or the wildcard is not a valid regular expression. The number of 
errors is the number of files that failed, or 1 when the action fails before 
the upload.
+|Result files|Passed on unchanged: the uploaded files are not added.
+|Result rows|Passed on unchanged.
+|===
+
+WARNING: With *Don't overwrite files* and *Remove files after transferal* both 
checked, a local file that already exists on the server is not uploaded, but it 
is still removed from the local directory.
diff --git a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/http.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/http.adoc
index 622ba7a2c5..8b82383d0a 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/http.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/http.adoc
@@ -42,16 +42,16 @@ The proxy and the web server each keep their own 
credentials, so the ones you fi
 
 === General Tab
 
-[options="header", width="90%, cols="1,3"]
+[options="header", width="90%", cols="1,3"]
 |===
 |Option|Description
-|Action name|The name of the workflow action.
+|Name of action|The name of the workflow action.
 |REST connection|Optional.
 The name of a xref:metadata-types/rest-connection.adoc[REST connection] that 
supplies the client for this action: the proxy, the credentials, the TLS 
settings and the timeouts.
 When one is selected, the fields on the Authentication and Proxy tabs are not 
used, and the URL below may be a path that is resolved against the connection's 
base URL.
 |URL|The HTTP URL of the file to retrieve, or the directory name to store an 
uploaded file to.
 |Ignore SSL certificate check|If selected, all SSL certificate checks are 
ignored.
-|Run for every result row?|Check this if you want to run this action for every 
row that was generated by a previous pipeline.
+|Run for every result row|Check this if you want to run this action for every 
row that was generated by a previous pipeline.
 Use the "Copy rows to result".
 If selected, an HTTP request will be made for each result.
 Otherwise, the file is only retrieved once
@@ -102,10 +102,10 @@ This may be useful when working on an intranet or VPN
 |===
 |Option|Description
 |Target file|If you are downloading a file, this is its name on your local 
filesystem
-|Append to specified target file?|If selected, and if the target file already 
exists, Hop will append all new data to the end of the file
-|Add date and time to file name?|If selected, the date and time of the HTTP 
request (in yyyMMdd_HHmmss format) will be added to the target filename
+|Append to specified target file|If selected, and if the target file already 
exists, Hop will append all new data to the end of the file
+|Add date and time to file name|If selected, the date and time of the HTTP 
request (in yyyMMdd_HHmmss format) will be added to the target filename
 |Target file extension|If the previous option is selected, this field 
specifies the extension (letters after the dot) of the target filename
-|Add filename to result filename|Any files that are copied will appear as a 
result from this action; shows a list of files that were copied in this action.
+|Add filename to result filenames|Any files that are copied will appear as a 
result from this action; shows a list of files that were copied in this action.
 |Result variable|If specified, the HTTP reply body is stored in this workflow 
variable so later actions can use it.
 When running for every result row, the last reply is stored.
 |===
@@ -118,4 +118,21 @@ When running for every result row, the last reply is 
stored.
 |#|Order that the header should be processed
 |Name|The name of this HTTP header
 |Value|The actual header value to pass
-|===
\ No newline at end of file
+|===
+
+== Result
+
+What this action passes on to the next action. See 
xref:workflow/action-results.adoc[Action results] for how results travel 
through a workflow.
+
+[options="header", width="90%", cols="1,3"]
+|===
+|Result|Value
+|True|The server answered with a status below 400 and the reply was written to 
the target file, with 0 errors. A redirect is followed.
+|False|The server answered with a status of 400 or more (for example 404, or 
401 when the credentials are missing or wrong), can't be reached, the URL is 
not valid, or the target file can't be written. The number of errors is 1. With 
*Run for every result row* and no previous result rows, the action is false 
with 0 errors.
+|Result files|The target file is added when *Add filename to result filenames* 
is checked (the default) and the request succeeded. The previous result files 
are kept.
+|Result rows|Passed on unchanged.
+|===
+
+WARNING: The target file is opened before the request is sent. A request that 
fails, for example with a 404, leaves an empty target file: an existing file is 
emptied, unless *Append to specified target file* is checked.
+
+NOTE: With *Run for every result row*, the rows are processed one after the 
other and the action stops at the first row that fails. The result is true as 
soon as one row succeeded: a first row that succeeds and a second one that 
fails give true with 1 error.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/sftpput.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/sftpput.adoc
index d74f2e7844..79d79625f9 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/sftpput.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/workflow/actions/sftpput.adoc
@@ -35,14 +35,12 @@ TIP: If you run into a `Algorithm Negotiation Fail` error 
when connecting to you
 [options="header", width="90%", cols="1,3"]
 |===
 |Option|Description
-|Workflow action name|The name of the workflow action.
-*Note*: This name has to be unique in a single workflow.
-A workflow action can be placed several times on the canvas, however it will 
be the same workflow action.
+|Action name|The name of the workflow action.
 |SFTP connection|An xref:metadata-types/sftp-connection.adoc[SFTP Connection] 
in the project metadata.
 When one is selected, the server, credentials, compression and proxy settings 
below come from that connection and are disabled here.
 Leave it empty to configure the server in this action.
-|SFTP-server name (IP)|The name of the SFTP server or the IP address.
-|SFTP port|The TCP port to use.
+|SFTP server name / IP|The name of the SFTP server or the IP address.
+|Port|The TCP port to use.
 This is usually 22.
 |User name|The user name to log into the SFTP server.
 |Password|The password to log into the SFTP server.
@@ -89,7 +87,7 @@ Examples of regular expressions:
 .*txt$   : get all text files
 A.*[ENG:0-9].txt  : files starting with A, ending with a number and .txt
 ----
-|Success when no file|Check this option if the workflow action has to succeed 
when there are no files to process, otherwise the workflow will fail.
+|Success when no file|Check this option if the action has to succeed when 
there are no files to send. Otherwise the action is false, with 1 error.
 |After SFTP Put a|Action to take after the file is transferred. The available 
options are:
 
 * Do nothing (default)
@@ -120,3 +118,19 @@ The better and more secure option is to upgrade your keys 
to more secure types.
 
`-Djsch.client_pubkey=ssh-rsa,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256
 
-Djsch.server_host_key=ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256,ssh-rsa`
 
 
+
+== Result
+
+What this action passes on to the next action. See 
xref:workflow/action-results.adoc[Action results] for how results travel 
through a workflow.
+
+[options="header", width="90%", cols="1,3"]
+|===
+|Result|Value
+|True|Every file was sent, with 0 errors. When no file matches, the action is 
true only if *Success when no file* is checked. *Copy previous results to args* 
or *Copy previous result files to args* without anything in the previous result 
is also true.
+|False|No file to send (with *Success when no file* unchecked), the server 
can't be reached or refuses the login, the remote directory doesn't exist and 
*Create folder* is unchecked, the local directory doesn't exist, a file can't 
be sent, or *Move file to* is selected while *Destination folder* is empty, or 
doesn't exist and *Create destination folder* is unchecked. The number of 
errors is 1.
+|Result files|The sent files are added when *Add filename to result* is 
checked and *After SFTP Put* is *Do nothing*. The previous result files are 
kept.
+|Result rows|Passed on unchanged.
+|Files retrieved|The number of files sent.
+|===
+
+NOTE: With *Copy previous results to args*, a file in the previous result rows 
that doesn't exist is logged as an error, but it doesn't count as one and the 
other files are still sent. When none of them exists, there is no file to send.

Reply via email to