Skip to content

Flow ​

Control how records move through a flow: start it, branch, loop, wait, retry and handle errors.

NeedPlugins
Start a flow on a schedule or from another flowTimer, Start flow
BranchDecision router
LoopFor each, Range
Collect records into oneBuild array
Reshape a recordData mapper
Run branches in parallel and combine the answersScatter, Gather
Run in the background, one at a time or a few at a timeFork, Lock, Semaphore
Order stepsSync call, Wait
Handle errorsTry catch, Retry, Error, Stop execution
ObserveLog, Alarm
Publish a flow as a pluginPlugin port, Plugin port response
text
Http listener → Scatter → Http client (prices) → Gather → Http response
                        → Sql query (stock)    →

Data sampler generates test records while you build.

Plugins ​

PluginWhat it doesPins
AlarmPass-through component that raises a flow alarm (an alarm definition from the repository) when a condition is met: on every request, on a downstream exception, on a slow request, or when the request rate in a time window is too low or too high. Place it in front of the part of the flow you want to monitor.Input, Output, OnRaise
Build arrayCollects single records arriving on Input into one collection record and sends it to Output when the batch they belong to completes (e.g. one file read, one Sql query execution), or, for records without a batch, when the buffer is full or after an idle timeout. Use it to batch records for bulk inserts, bulk API calls or to rebuild a list after a ForEach.Input, Output
Data mapperCopies property values from the input record into a new record of another type, field by field, as defined in the mapping editor. Use it to turn one structure into another, for example a database row into an API request or a JSON document into a flow type.Input, Output
Data samplerGenerates test data: for every message on Input it creates a new record of the output connection's type and fills its properties with (optionally seeded) random values. Use it to exercise a flow without a real data source, for example Timer → Data sampler → the flow under test.Input, Output
Decision routerRoutes each record to one of several branches. A C# script returns a route name for the record; the record is sent to the outgoing connections whose route id equals that name. Use it for if/else and switch-like branching.Input, Output
ErrorThrows a configurable error when a record reaches it. Use it to end a request with a failure (validation failed, not found, ...) that upstream error handling (Try catch, Retry, HTTP listener error response) reacts to.Input
For eachSplits a list property of the input record into single items and sends each item to Output, sequentially or in parallel. Use it to process the elements of a list one by one (call an API per item, map items, write them to a database).Input, Output
ForkRuns the connected branch on its own background task for every input record and returns at once, so the caller does not wait for the downstream processing. Use it to decouple a slow branch from a fast producer (for example answer an HTTP request and process the data in the background) or to process records in parallel with a limit.Input, Output
GatherSecond half of the scatter-gather pattern: waits for the results of all branches started by a Scatter component and emits them as one combined object. The output type is generated from the components connected to its input.Input, Output
LockLets only one record at a time pass through to the components behind it. Use it when concurrent requests (for example several HTTP calls, Fork tasks or a parallel For each) must not run a section of the flow at the same time, such as updating a shared file or a counter.Input, Output
LogWrites an entry to the flow log for each record that passes, with a fixed message, the chosen severity and the record and its metadata attached, then forwards the record unchanged. Use it to trace what goes through a branch or to log errors from error pins.Input, Output
Pin to metadataStores the record passing through in a named property of the flow metadata and forwards it unchanged. Later components and scripts of the same request can read the value from the metadata without a direct connection, for example to combine the original request with a later response.Input, Output
Plugin portThe entry point of a flow that is published as a plugin ("flow as plugin"). Other flows then use the published flow like any other component: what they send to its Input pin comes out of Request here, and what this flow sends to Response (or to a Plugin port response component) comes out of the component's Output pin in the calling flow.Request, Response, Initialize
Plugin port responseSends the response of a flow that is published as a plugin back to the calling flow, exactly like connecting to the Response pin of the Plugin port. Use it to answer from several places of the flow without drawing long connections back to the Plugin port.Response, Continue
RangeLoop component: calls Output once for every integer from Start (inclusive) to End (exclusive) with the same input record, then calls Continue once. The current index is available in the metadata property RangeInfo.Input, Output, Continue
RetryCalls the components behind Output; when they fail with an exception, the record is put into a retry list and re-sent later, up to MaxRetries times. If it still fails, the record goes to the MaxRetries pin.Input, Output, MaxRetries
ScatterFirst half of the scatter-gather pattern: sends the same input message to every component connected to Output, in parallel, and tags each copy so that a Gather component can later combine the branch results into one message.Input, Output
SemaphoreThrottles parallelism: at most Slots records at a time may run through the components behind Output; further records wait until a slot is free. Use it in front of resources that must not be called by too many threads at once (APIs with rate limits, databases).Input, Output
Start flowStarts another flow of the repository, in the same way as pressing Start for it, and then calls Continue either right after the flow has started or after it has stopped. No data is passed to the started flow and nothing is returned from it.Input, Continue
Stop executionStops the processing of the current request: after a record reaches this component, no further component is called for any record that shares the same metadata instance. The flow itself keeps running.Input
Sync callSequencer inside one flow: sends the record to Output, waits until that branch has completed, then sends the same record to Continue. Use it to run "first this, then that" with the same data. It does not call other flows.Input, Output, Continue
TimerScheduler that periodically calls the components connected to Continue, at a fixed interval aligned to a time of day. Use it as the start of polling, batch and heartbeat flows. It keeps the flow running.Start, Continue
Try catchError handler: runs the components behind Try; if they fail with an error, the record is sent to Catch with the error details in the metadata property Error.Input, Try, Catch
Unknown pluginHidden placeholder. The designer shows it in place of a component whose plugin is no longer installed, so that the flow can still be opened and edited. It cannot be added from the toolbox.Input, Output
WaitDelays each record by a fixed number of milliseconds, then passes it on unchanged. Use it for simple pauses between steps or crude rate limiting.Input, Output

Viaducta documentation