# Workflows with a Dynamic Destination Path

## Workflows with a Dynamic Destination Path

Workflows are designed to orchestrate an automated and iterative execution of ordered tasks. When designing a workflow to orchestrate a process, a source object is required, that can provide access to a directory containing bulk load of source files of the same layout and format. A workflow is designed, such that each source file in that particular directory goes through the same data processing.

This requires a source file to be replaced in the run-time until all source files (of the same layout and format) within a directory are processed and loaded to respective destination files. Now, this further involves the associated destination files to be replaced in the run-time as well, hence making it essential to provide a dynamic destination path. For example, a source directory containing 100 excel source files in this workflow will create 100 destination files after going through the process.

In this document, we will learn to create workflows with a dynamic destination path that directs Astera to create a unique destination file for each source file.

In Astera, a dynamic destination path is achieved in two steps:

1. Parameterizing the dataflow through a *Variables* object.
2. Providing a run-time destination path through an [*Expression Transformation*](https://documentation.astera.com/dataflows/transformations/expression-transformation) object in the workflow.

### Parameterizing the Dataflow

In this case, we are orchestrating a simple dataflow that contains customer account details coming in through an [*Excel Workbook Source*](https://documentation.astera.com/dataflows/sources/excel-workbook-source). The source data is passed through an [*Aggregate Transformation*](https://documentation.astera.com/dataflows/transformations/aggregate-transformation) and loaded to an [*Excel Workbook Destination*](https://documentation.astera.com/dataflows/destinations/excel-workbook-destination).

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/JsIcs9uCU6TuGQRRLhLK/dataflow.PNG)

Now, there are 100 Excel source files in a directory containing customer account details of 100 customers. Each of these *Customer\_Accounts* files must go through the same aggregate transformation and loaded to a distinctive *Excel Workbook Destination* file.

For this purpose, we will add a *Variables* object and parameterize the source file path and destination file path in the dataflow.

1. Go to *Toolbox > Resources > Variables*, and drag-and drop the *Variables* object onto the dataflow designer.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/wEmsHJwgUqnrVhZZEdQN/variable.gif)

The *Variables* object is currently empty and needs to be configured.

2. Right-click on the object’s header and select *Properties* from the context menu. A properties window will open.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/ZPMbYliyyPGS0b2gR6Sq/7.png)

3. On the *Variable Properties* window, create two new fields:

* *Excel\_Source*
* *Excel\_Destination*

Set both fields as *Input*. For their *Default Value*, paste the path for customer account file source and customer account file destination in each field, respectively.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/KfkRq5EU9XxIBEKiEjOg/6.png)

Click *OK.*

4. Double-click on the *Customer\_Account* source object header. An *Excel Source Properties* window will open. Click *Next,* and the *Layout Builder* will open. Click *Next* again, and the *Config Parameters* screen will open.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/DICdAm9OLkKNkfeOpVyo/Config_source.gif)

5. On the *Config Parameters* window, under the *Value* column for *File Path*, provide the name of the field enclosed in {….} that points to the source file path in the *Variables* object in step 3.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/J9XbwlrYj8mfAJJt39i1/5-1589980484676.png)

6. Now, Repeat steps 4 and 5 for the *ExcelDestination* object.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/JIAG3Nw12cBzf712zHPK/6-1589980754450.png)

Our dataflow has been parameterized. The next step is to create a workflow with a dynamic destination path.

### Creating a Workflow

1. Open a new workflow by going to *File > New > Workflow*.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/kZebDpKPj6duNntAslWD/1_workflow.png)

2. To provide access to the local source directory containing 100 customer account files, go to *Toolbox > Sources > File System Item Source* and drag-and-drop the [*File System Item Source*](https://documentation.astera.com/dataflows/sources/file-system-items-source) object onto the workflow designer.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/SbnBKUg5Edrl3xvzZvEj/File_system_item_source.gif)

3. Right-click on the object’s header and select *Properties* from the context menu. A configuration window will open for the *FileSystem* object.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/fBh2bxQ4mMkhY1bbn8Ka/2_properties.PNG)

4. Provide the local directory path in *File Location*. Apply a *Filter*, \**.xls* and click *OK.*

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/KIX7TnHIaojquv57dxPk/3.png)

5. Right-click on the *FileSystem* source object’s header and select *Loop* from the context menu. This will direct Astera to run the task in a loop, replacing the source file paths in real-time, until all source files have been processed.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/5jGVaflsjExOrVqBSgQb/loop.gif)

6. Go to *Toolbox > Workflow Tasks > Run Dataflow* and drag-and-drop the *Run Dataflow* object onto the workflow designer. Map the header output port of the *FileSystem* source object onto the header input port of the *Run Dataflow* object.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/UjrpPIzuFZmf4UgAFyWN/run_dataflow.gif)

7. Right-click on the *Run Dataflow* object’s header and select *Properties* from the context menu. Here, provide the *Job Info* *Path* for the dataflow that is being orchestrated and click *OK.*

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/pzvDieCztPhwUFLbfjuo/5.PNG)

8. Go to *Toolbox > Transformation > Constant Value*, drag-and-drop the [*Constant Value*](https://documentation.astera.com/dataflows/transformations/constant-value-transformation) transformation object onto the workflow designer. Double-click on its header, a *Constant Value Map Properties* window will open.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/ppgS7fjoUuo2DfXTkFOQ/constant_value_7.gif)

9. Paste the path of the folder where Astera will load the destination files, in the *Constant Value* box as shown below. Click *OK.*

<figure><img src="https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/emQHvacfqISyBYnP80q4/7%20(2).png" alt=""><figcaption></figcaption></figure>

10. Go to *Toolbox > Transformation > Expression*, drag-and-drop the *Expression* transformation object onto the workflow designer. Double-click on its header, and a *Layout Builder* screen will open.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/CuSOydOYquUKEJf1Im7c/Expression_8.gif)

11. On this *Layout Builder* screen, create four new fields and set the data type accordingly.

* *FullPath*
* *DestinationDirectory*
* *FileName*
* *DestinationFilePath*

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/LViqe4AS31tcBSurlqGi/8.png)

Click *OK.*

12. Define field mappings as follows:

* *FullPath* field under *FileSystem* source object onto the *FullPath* field under *Expression* transformation object.
* *FullPath* field under *FileSystem* source object onto the *Excel\_Source* field under *RunDataflow* task object.
* *Value* field under *Constant Value* transformation object onto the *DestinationDirectory* field under *Expression* transformation object.
* *DestinationFilePath* field under *Expression* transformation object onto the *Excel\_Destination* field under *RunDataflow* task object.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/pDvvlDulQwgb4dwXYE1b/9.PNG)

13. Double-click on the *Expression* transformation object’s header, to open its *Layout Builder* screen. Write the following expressions for these fields:

* *FileName* : LSplit(RSplit(FullPath,2,”\”,0),2,”.”,0)
* *DestinationFilePath* : DestinationDirectory+FileName+”.xls”

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/6wHS71eACwQMF46bzVhq/10.png)

Click *OK.* A dynamic destination file path has been created.

14. Click on the *Start Workflow* icon located in the toolbar at the top, and execute this workflow.

![](https://content.gitbook.com/content/zEifS4h8yurLAAwiGNX2/blobs/yE1UZwHUB18w4qKb2yLc/11.png)

This will create a unique destination file for each source file.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.astera.com/workflows/workflows-with-a-dynamic-destination-path.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
