# Welcome to Tailent Automation Platform documentation

![](/files/-MUi1i4wdyzttZiuGS6R)


# State Machine Approach

### What is a State Machine?

A State Machine is a workflow layout consisting of a finite number of pre-defined states and transitions between these states.

At any point throughout the execution, based on the external inputs and verified conditions, the workflow can be in only one of the states.

Don't think about State Machine like a workflow layout used only in automation. Some examples from your daily life were designed also with State Machine principles in mind: air-condition, elevator, traffic light, or vending machines.

### What are the advantages?

* Transitions between states are well defined and offer flexibility to the workflow;
* While simple use cases having academic or demo purpose can be resolved with if statements, switch, or loops (for, for each, while, do-while), the state machine can accommodate real-life processes that are more complex and / or continuous.
* State Machine eases the coverage of all the possible cases/transitions.

### Rules for a successful State Machine

* Must contain a start state and an end state
* Every state must be linked at least to another state
* If a state is linked to 2 or more states, they must have a condition based on which the robot can know what is the nest state.

### Types of Transitions

1\. Normal Transition- the standard transition between 2 states

2\. Exception State - can be used to implement a business or application exception; you can think about it like a Try Catch from programming.


# TAP Studio

TAP into our RPA Studio to learn more about how to make reliable automation for the real-world complexity.


# How to install TAP Studio

Let's start your #AutomationJourney with TAP Studio!

Here are the steps to download and install our revolutionary automation platform that will change the work as we know it, giving people time to focus on higher added value and creative tasks.

The first step is to access [our website](https://tailent.com/), and click on the action call button, "Start For Free!".

![](/files/-Mg4YbeRuGie9uHYoidM)

You will be redirected to the [registration page](https://nexus.tailent.com/register) where you need to input in the registration form your name, address, organization name, email address, and password. Then click on Sign up.

![](/files/-Mg4YlvHcXhu9Vhk_rzb)

You will receive the confirmation that your account was created successfully and an email was sent to your email address.

Check your inbox.

![](/files/-MT0N6cExm95p-1wCL2k)

Click on "Download" button and wait for the full download of the archive file.

![](/files/-Mg4ZT0HQDZA5TVJ6FcA)

Once the archive file is downloaded, extract it. Here you will be met with the Tap Studio Installer:

![](/files/-Mg4_1A0SOHiFHzM4-46)

Go to the TAP Studio installer and launch it.

First, you will be asked to set a path where TAP Studio will be installed.&#x20;

By default, the installer will propose you to create a folder TAP Studio under Program Files (x86).

IMPORTANT: Please select a location that has space of at least 461 MB.

![](/files/-MT0N6cO7Ug7LTnZ2yD7)

Tick the checkbox if you want a TAP Studio shortcut on your desktop.

![](/files/-MT0N6cHNQwtKGezSox7)

Click Install

![](/files/-MT0N6cMF2He35v2vZGk)

Wait for the installation to finish.

![](/files/-MT0N6cJRwn5tyhr9B6J)

The last step on the installation is to check if your station already has .NET Framework 4.8 and if not, it will be installed.

![](/files/-MT0N6cLLMUdttd-GHYp)

If the framework is already installed, you will receive the following confirmation :

![](/files/-MT0N6c8UH0wP7TW8rkn)

Once the installation is complete, you will receive the following confirmation.

Click the checkbox if you want to Launch TAP Studio.

![](/files/-MT0N6cF7lPtP0GWELK0)

You have now successfully installed TAP Studio.

What's next?&#x20;

Please visit our [online documentation page](https://docs.tailent.com/) where you have many articles and resources that can help you to get the maximum from TAP Studio. We recommend starting with the [TAP Studio Overview](/getting-started/tap-studio/tap-studio-overview).

Do you want to get in touch with us? Please contact <sales@tailent.com> for any commercial matters or <support@tailent.com> for any other questions. We would like to hear from you.

Have a great #AutomationJourney and don't hesitate to contact us!


# TAP Studio Overview

The main sections of TAP Studio are:

**1. Ribbon Menu**

The ribbon menu contains the following options:

* [Open Automation](/getting-started/tap-studio/how-to-open-an-existing-automation-project-in-tap-studio)
* [New Automation](/getting-started/tap-studio/how-to-create-a-new-automation-project-in-tap-studio)
* [Save](/getting-started/tap-studio/how-to-save-an-automation-project)
* Run Robot
* Stop
* [UI Browser](/getting-started/tap-studio/control-identifiers-in-ui-browser)
* Record Workflow
* Package Manager

![](/files/-Mg4uVm9zQLwRBGMpDm3)

**2. Sequence Bar**

Using the sequence bar, you can navigate through different Workflows of your automation project.

![](/files/-Mg4v7Xmo7QRTc8bSkav)

**3. Activities Toolbar**

The Activities Toolbar contains all the activities that can be added in your automation project using drag and drop.

Besides the activities list, the toolbar has 2 additional sections:

* Recent: the latest used activities
* [Favorites](/getting-started/tap-studio/how-to-add-an-activity-to-favorite-activities): the activities you use the most in your daily automation projects.

We recommend visiting our [section dedicated to TAP Studio Actions](/actions/tap-actions) where you can find more info about each of them, how to configure it and watch a use case.

![](/files/-Mg4vZydW4uPyuZ8qcDK)

**4. Debug Console**

![](/files/-Mg4vnrhuMvJ7ABfkGey)

The Debug console captures all logs during the automation project execution, in order to capture the errors.

Auto-Scroll - the console scrolls down during the automation execution in order to display the latest log all the time. <br>

**5. Properties Section**

This section displays the properties of the selected sequence or activity.

[<br>](https://www.loom.com/share/190d511151094a348bc76c3ad42bc616)

![](/files/-Mg4w1tGYhWFRADeYu1d)

**6. Variables Section**

This section lists all the created [variables.](/getting-started/tap-studio/variables-and-data-types)

![](/files/-Mg4wT4DzNfzeEfstQeP)

**7. Solution Explorer**

Please check our article about [Invoke Workflow](/actions/tap-actions/diagram/invoke-workflow) to better understand the Solution Explorer section.

![](/files/-Mg4whlsLmHu1ilMphUg)

**8. Arguments**

Please check our article about [Invoke Workflow](/actions/tap-actions/diagram/invoke-workflow) to better understand the Arguments section.

![](/files/-Mg4wur5JUyjxkkysShp)


# Variables and Data Types

### 1. What is a Variable

Variables are containers that can hold one or multiple data entries *of the same data type*.

For example, the variable companyName can be a variable that holds the value "Tailent".

The value of a variable can change:

* through an external data input.
* passing from one activity to another throughout the automation project.
* data manipulation.

### 2. Data Types

As we mentioned above, variables can hold data entries of the same data type, so let's see what data types are available.

TAP Automation supports all C# data types, but the most common are:

String: - stores a sequence of characters, surrounded by double quotes; e.g. "Alpha Corporation"

Integer - stores **whole** numbers from -2,147,483,648 to 2,147,483,647; e.g. 14

Double - stores fractional numbers. Sufficient for storing 15 decimal digits; e.g. 14.25

Boolean - stores true or false values; e.g. true

DateTime - represents an instant in time, typically expressed as a date and time of day; e.g. 12.14.2019

Other data types are **collections** of objects. Each object of a collection is identified through its index in the collection. Some of the most encountered collections are:

* **Array** - ArrayOf\<T> is used to store multiple values of the same data type. The size (number of objects) is defined at creation and can't be changed throughout the workflow. e.g. {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
* **List** - System.Collections.Generic.List\<T> is used to store multiple values of the same data type, just like Arrays, but its size is dynamic, meaning that we can add or remove the object(s) from the list throughout the workflow e.g. {"Alpha Corp", "Beta Inc.", "XYZ SA"}
* **Dictionary** - System.Collections.Generic.Dictionary\<TKey, TValue> is used to store objects in the form of (key, value) pairs. Keys and Values can be of a separate data type. e.g.

```
{
   {"UK", "London, Manchester, Birmingham"},
   {"USA", "Chicago, New York, Washington"},
   {"India", "Mumbai, New Delhi, Pune"}
}
```

We recommend [this](https://www.w3schools.com/cs/cs_data_types.asp) article about data types in C#

### 3. How to create a new variable

Go to the variable section and click on the + button:

![](/files/-Mg4xKPf-68hnOaw7AM9)

A new line will appear and we have to set the variable name, value type, and default value. The first 2 are mandatory and the 3rd one is optional.

**Name** - It should be as descriptive as possible to make your automation easy to read by other developers or even for yourself after a while.&#x20;

**Variable type** - select from the drop-down list the data type of your variable.

![](/files/-Mg4x_V8OIhFtz9KS1Vz)

If the data type you are looking for is not in the list, click on choose type...

The window "Variable Construction - Select Type" will pop up and here you can search for the data type you are looking for, like MailMessage

![](/files/-Mg4xiTZ-u5R03u_VVW_)

**Default Value** - usually, variables have initial values that change throughout the automation process. If no default value is assigned when the variable is created, there is generally an [Assign Value](/actions/tap-actions/flow/assign-value) activity that sets a value afterward.


# Transitions

In TAP Studio, transitions are the connections that link sequences.


# Normal transitions

This is the default transition and it's preselected.

It allows conditions be specified in its properties, with the default transition being set to true.


# Exception transitions

Exception transitions visually differ from normal transitions. They are represented by a dashed line instead of a solid line and are also displayed in a different color.

Typically, when a sequence throws an error, it stops execution. However, if an exception transition connects it to another sequence, the operation will continue and proceed to the linked transition.

<figure><img src="/files/s7QAbKsi3ysnQjgTXyy1" alt=""><figcaption><p>In this example, if Sequence 1 throws an error, the robot will proceed to the Sequence 3 instead of Sequence 2.</p></figcaption></figure>

Like normal transitions, exception transitions also allow conditions to be specified within them.

A sequence can contain multiple exception transitions for precise control over the workflow:

<figure><img src="/files/bHrmdkolyVKHd6DvZBIF" alt=""><figcaption><p>In this example, if either Click Control or Rename Sheet throws an error, we can create a transition for either of them.</p></figcaption></figure>

### Useful conditions:

LastError.ActionMessage -> Contains the message of the last error.

LastError.ActionOutcome -> Contains the message showing the outcome of the action: ***True/False***

LastError.Matches("") -> Can be used to check if an error matches a given string.


# How to Create a New Automation Project in TAP Studio

There are 2 possible ways to create a new automation project:

1\. New Automation button from the ribbon menu.

Click on the button "New" from the ribbon menu, under the Design tab.

![](/files/-Mg4y6XI_oCUd23bLCfS)

This button is available either from the home page, either when another automation project is already open.

A pop-up window will appear that requires us to set a solution name, workflow name, and a location for our project.

![](/files/-Mg4yHkJVsz2wjsz6CIA)

If another automation project is open and you click "New Automation" from the ribbon menu, a pop-up window will ask if you first want to save the current automation project.

![](/files/-Mg4ypheMuKeQnuatngr)

2\. "Create New Automation Solution"  button from the **canvas.**

Once you launch TAP Studio and log in, the following home page will appear.

![](/files/-Mg4yxyn-gUZHDsTrqp0)

Click on the button "New Automation Solution" from the **canvas.**

The same pop-up window will appear that requires us to set a solution name, workflow name, and a location for our project.

![](/files/-Mg4z5f0BoFPyamX5GY-)

In both cases, TAP Studio will create a **folder** to the selected location with **2 files**: one with extension .tap and another one with extension .tapflow


# How to add an Activity to Favorites

Favorites is a section in the [Activities Toolbar](/getting-started/tap-studio/tap-studio-overview) where you can add the activities you use the most in your daily automation projects.

To add an activity to the favorites section, right-click on the activity and select the option "Add to favorites".&#x20;

![](/files/-Mg4zZeXWT8uKwj16fFU)


# How to Open an Existing Automation Project in TAP Studio

There are 2 possible ways to open an existing automation project in TAP Studio:

1\. Open Automation button from the ribbon menu.

Click on the button "OpenAutomation" from the ribbon menu, under the Design tab.

![](/files/-Mg5--CZ8Xk1Ah8zp4Wz)

This button is available either from the home page, either when another automation project is already open.

2\. The "Open" button from the **canvas.**

Once you launch TAP Studio and log in, the following home page will appear.

![](/files/-Mg5-BgMitifPQOZopnJ)

Click on the button "Open" from the **canvas.**

![](/files/-Mg5-JfF7qLQ-CRGnASf)

**Important**: this option is available only when you open the TAP Studio.

In both ways, an **Open** window will pop up in order to set the path and the automation project, having the .tap extension, to be open.

![](/files/-Mg5-eq9EmbVUb6iWFIW)

{% hint style="info" %}
The Open window is set by default on the folder "TAP Studio" under Documents.

The Open window is set by default to display only .tap files, because it is the only file type that TAP Studio can open
{% endhint %}


# How to Save an Automation Project

To save the automation project you are working on, click on Save or Save As, from the ribbon menu, under the Design tab.

![](/files/-Mg5-zpnp4888jP2B1yg)

Save - the automation project file will be overwritten with the latest changes. The .tap file remains at its current location.&#x20;

{% hint style="info" %}
The project is automatically save on Run
{% endhint %}


# Control Identifiers in UI Browser

### What is a Control Identifier?

A control identifier in TAP Studio is a feature that allows the identification of UI elements through their **address** and **attributes** captured as XML fragments. The UI element's identification is executed to perform specific activities in an automation project.

We can think of the UI element identification process achieved through **control identifiers** as a physical address. In order for a food delivery man to arrive at your address in time, he needs to know a specific path that must contain structured and hierarchized details such as Country,  City,  Zip Code,  Street Name,  Street Number, Floor, Apartment Number.

Similarly, the UI Browser module under TAP Studio requires a detailed path to a specific UI element within the user interface, in order to identify it precisely.

### Structure of a Control Identifier

User interfaces are developed using multiple containers nested one inside the other. Let’s take the example of a control identifier for the Google search bar, and try to understand the meaning of the structure.

In the below case, the robot identified 3 containers:

a. the last container is the GUI element representing the search box.

b. the second container is a higher hierarchy including the search box.

c. the first container is the highest level container, the Google website opened in Microsoft Edge browser.

Each container is formed by **tags** and **attributes.**

**Tags** correspond to a visual element on the screen. Example of tags are:&#x20;

* window
* html (web page)
* ctrl (control)
* webctrl (web page control)
* java (Java application control)

**Attributes** of each container are displayed on the right side of the UI Browser page. Every attribute has a name and a value.&#x20;

### &#x20;

### How to define a Control Identifier?

Control Identifiers are generated automatically every time we use an activity that interacts with GUI elements and define the specific UI element as identifier.

Each activity that interacts with GUI elements has the field identifier in the input section.

![](/files/-Mg50mqMyW2mrIcawkTn)

Click on the + button and then click on the UI element to be identified and then the control identifier is generated automatically in UI Browser.

![](/files/-MT0hxpftKdDitPlkI1x)

Also, don't forget to set a comprehensive name for your identifier.

![](/files/-Mg51vPHhWZVu2Dl8gm_)

A second method to define a control identifier is directly from UI Browser, click on Point To Control.

![](/files/-Mg52DMtQC0osiDdd9WT)

### How to reuse Control Identifiers?

A unique feature of TAP Studio is that each defined identifier is added in a nomenclator.

![](/files/-Mg52Ugjod0-9p7kVTV-)

In this way, once you define a control identifier, you can re-use it as input for other activities that interact with GUI elements.

![](/files/-Mg542eDQ2m6nM8PsBCC)

### How to remove a Control Identifier?

To remove a control identifier, go in UI Browser, select from the identifiers' list in the left part the one you want to remove, and click the minus button.[<br>](https://www.loom.com/share/31a13bb0fd4f4fa4a934cc395839fea3)

![](/files/-Mg54AGIkJzyOCpzkEa5)


# List of Activities that use Control Identifier as Input Parameter

[Move to Control](/actions/tap-actions/mouse/move-to-control)

[Click Control](/actions/tap-actions/mouse/click-control)

[Type Text](/actions/tap-actions/keyboard/type-text)

[Press Key](/actions/tap-actions/keyboard/press-key)

[Set Focus](/actions/tap-actions/control/set-focus)

[Set Text](/actions/tap-actions/control/set-text)

[Get Value](/actions/tap-actions/control/get-value)

[Select List Item](/actions/tap-actions/control/select-list-item)

[Check Control](/actions/tap-actions/control/check-control)

[Wait for Control](/actions/tap-actions/application/wait-for-control)&#x20;


# Press Key - Values of Key parameter

The table below contains all possible values of the parameter Key from Keyboard type activity, [Press Key](/actions/tap-actions/keyboard/press-key).

![](/files/-Mg54PBwP3VGhNRkUzsZ)

| **KEY**  | **Details**                                                                        |
| -------- | ---------------------------------------------------------------------------------- |
| LBUTTON  | Left mouse button                                                                  |
| RBUTTON  | Right mouse button                                                                 |
| MBUTTON  | Middle mouse button (three-button mouse) - NOT contiguous with LBUTTON and RBUTTON |
| BACK     | BackSpace key                                                                      |
| TAB      | TAB                                                                                |
| CLEAR    | CLEAR                                                                              |
| RETURN   | Enter key                                                                          |
| SHIFT    | SHIFT                                                                              |
| CONTROL  | CTRL                                                                               |
| MENU     | Alt key                                                                            |
| PAUSE    | PAUSE                                                                              |
| CAPITAL  | CAPS LOCK key                                                                      |
| ESCAPE   | ESC                                                                                |
| SPACE    | SPACEBAR                                                                           |
| PRIOR    | Page Up key                                                                        |
| NEXT     | Page Down key                                                                      |
| END      | End key                                                                            |
| HOME     | Home key                                                                           |
| LEFT     | Left Arrow key                                                                     |
| UP       | Up Arrow key                                                                       |
| RIGHT    | Right Arrow key                                                                    |
| DOWN     | Down Arrow key                                                                     |
| PRINT    | Print key                                                                          |
| SNAPSHOT | Print Screen key (PrtSc)                                                           |
| INSERT   | Insert key                                                                         |
| DELETE   | Delete key                                                                         |
| VK\_0    | Virtual Key 0                                                                      |
| VK\_1    | Virtual Key 1                                                                      |
| VK\_2    | Virtual Key 2                                                                      |
| VK\_3    | Virtual Key 3                                                                      |
| VK\_4    | Virtual Key 4                                                                      |
| VK\_5    | Virtual Key 5                                                                      |
| VK\_6    | Virtual Key 6                                                                      |
| VK\_7    | Virtual Key 7                                                                      |
| VK\_8    | Virtual Key 8                                                                      |
| VK\_9    | Virtual Key 9                                                                      |
| VK\_A    | Virtual Key A                                                                      |
| VK\_B    | Virtual Key B                                                                      |
| VK\_C    | Virtual Key C                                                                      |
| VK\_D    | Virtual Key D                                                                      |
| VK\_E    | Virtual Key E                                                                      |
| VK\_F    | Virtual Key F                                                                      |
| VK\_G    | Virtual Key G                                                                      |
| VK\_H    | Virtual Key H                                                                      |
| VK\_I    | Virtual Key I                                                                      |
| VK\_J    | Virtual Key J                                                                      |
| VK\_K    | Virtual Key K                                                                      |
| VK\_L    | Virtual Key L                                                                      |
| VK\_M    | Virtual Key M                                                                      |
| VK\_N    | Virtual Key N                                                                      |
| VK\_O    | Virtual Key O                                                                      |
| VK\_P    | Virtual Key P                                                                      |
| VK\_Q    | Virtual Key Q                                                                      |
| VK\_R    | Virtual Key R                                                                      |
| VK\_S    | Virtual Key S                                                                      |
| VK\_T    | Virtual Key T                                                                      |
| VK\_U    | Virtual Key U                                                                      |
| VK\_V    | Virtual Key V                                                                      |
| VK\_W    | Virtual Key W                                                                      |
| VK\_X    | Virtual Key X                                                                      |
| VK\_Y    | Virtual Key Y                                                                      |
| VK\_Z    | Virtual Key Z                                                                      |
| LWIN     | Left Windows key (Microsoft Natural keyboard)                                      |
| RWIN     | Right Windows key (Natural keyboard)                                               |
| APPS     | Applications key (Natural keyboard)                                                |
| NUMPAD0  | Numeric Keypad 0                                                                   |
| NUMPAD1  | Numeric Keypad 1                                                                   |
| NUMPAD2  | Numeric Keypad 2                                                                   |
| NUMPAD3  | Numeric Keypad 3                                                                   |
| NUMPAD4  | Numeric Keypad 4                                                                   |
| NUMPAD5  | Numeric Keypad 5                                                                   |
| NUMPAD6  | Numeric Keypad 6                                                                   |
| NUMPAD7  | Numeric Keypad 7                                                                   |
| NUMPAD8  | Numeric Keypad 8                                                                   |
| NUMPAD9  | Numeric Keypad 9                                                                   |
| MULTIPLY | Multiply Key (\*)                                                                  |
| ADD      | Addition key (+)                                                                   |
| SUBTRACT | Subtract key (-)                                                                   |
| DECIMAL  | Decimal key                                                                        |
| DIVIDE   | Divite key (/)                                                                     |
| F1       | F1                                                                                 |
| F2       | F2                                                                                 |
| F3       | F3                                                                                 |
| F4       | F4                                                                                 |
| F5       | F5                                                                                 |


# Outlook vs standard IMAP protocol

A frequent question we receive regarding our IMAP activities [Get Email Message](/actions/tap-actions/mail/get-email-messages) and [Move Email Message](/actions/tap-actions/mail/move-mail-message)

is why we face the error "could not fetch mail from server " even if we follow the tooltip guidance - INBOX.FolderName.

![](/files/-MT5gEnSt5rRsCOAdTV5)

For instance, in the example below, the configuration is normally correct, however, when running the workflow, we face the error message.

![](/files/-MT5gEnVCUteWk50IzB8)

That is because in Outlook, users can create folders at the same level as Inbox (like in this case InvoicesUNprocessed and InvoicesProcessed).

![](/files/-MT5gEnWjUpAU5_Ml72O)

So the correct configuration is:

![](/files/-MT5gEnXjFVoxn60rMY-)

Secondly, let's take the case of folder "test1", which was created under inbox.

In Thunderbird:

![](/files/-MT5gEnYoRa2sa2MC0FI)

If the robot would connect to Thunderbird to retrieve info about emails from folder test1, the value of the field Folder Name must be **INBOX.test1**.

In Outlook:

![](/files/-MT5gEnZllQYxiZ775cI)

But if the robot would connect to Outlook to retrieve info about emails from folder test1, the value of the field Folder name must be **INBOX/test1** instead of INBOX.test1, as it can be seen also below:

![](/files/-MT5gEn_Tmr4qXDbAVLN)


# Hardware & Software Requirements TAP Studio

### **TAP Studio**

<table><thead><tr><th></th><th width="186.33333333333331">Minimum</th><th>Recommended</th></tr></thead><tbody><tr><td><strong>CPU Cores</strong></td><td><strong>2x 1.8GHz 32-bit (x86)</strong></td><td><strong>4x 2.4GHz 64-bit(x64)</strong></td></tr><tr><td><strong>RAM</strong></td><td><strong>4GB</strong></td><td><strong>8GB</strong></td></tr><tr><td><strong>Disk Space</strong></td><td><strong>6GB</strong></td><td><strong>10GB+</strong></td></tr><tr><td><strong>Display Resolution</strong></td><td><strong>1024x768</strong></td><td><strong>2560x1440</strong></td></tr><tr><td><strong>.NET Framework</strong></td><td><strong>4.6.2 or newer</strong></td><td><strong>4.6.2 or newer</strong></td></tr><tr><td><strong>Browser Automation</strong></td><td><strong>Google Chrome version 97 or newer</strong></td><td><strong>Google Chrome version 97 or newer</strong></td></tr></tbody></table>

{% hint style="info" %}
**Note:** Multiple monitors are highly recommended for bot development as they can speed up development, testing and debugging.
{% endhint %}

### **TAP Assistant**

|                        | Minimum                               | Recommended                           |
| ---------------------- | ------------------------------------- | ------------------------------------- |
| **CPU Cores**          | **2x 1.8GHz 32-bit (x86)**            | **4x 2.4GHz 64-bit(x64)**             |
| **RAM**                | **2GB**                               | **4GB**                               |
| **Disk Space**         | **2GB**                               | **10GB+**                             |
| **.NET Framework**     | **4.6.2 or newer**                    | **4.6.2 or newer**                    |
| **Browser Automation** | **Google Chrome version 97 or newer** | **Google Chrome version 97 or newer** |

## User Security Requirements

&#x20;In order to interact with all system components, windows APIs, application message pumps and device simulation (keyboard & mouse), elevated user permissions are required when running both **TAP Assistant** and **TAP Studio**.


# TAP Assistant

TAP Assistant is an application that allows you to run attended automation projects easily.

### How to open TAP Assistant

Go to the folder where TAP Studio and TAP Assistant was installed (by default, the path is C:\Program Files (x86)\TAP Studio\Tailent), and double-click on TAP Assistant.exe

Go to System Tray and click on the TAP Assistant icon.

![](/files/-Mg4YJFEz-uf9kx5xUue)

... and the application will open.

![](/files/-Mg4VWseQB8kVxJVCD_r)

If you don't want to repeat these steps every time you open your station, activate the setting "Launch on Windows startup", like in the example below.

![](/files/-Mg4Vn-tSShpzqohv6ls)

### How to add an automation project in TAP Assistant

If you want to add a new automation project in TAP Assistant, click on the Plus button (see the screenshot below)

![](/files/-Mg4Wea6KCJrrTf-ISF7)

and an Open window will be displayed in order to allow you to select the .tap file you are looking for.

![](/files/-MT0jHKKv-yX63y-bXSW)

### How to remove an automation project from TAP Assistant

If you want to remove an automation project from TAP Assistant, select the project and press on the Trash Button (see the screenshot below).

![](/files/-Mg4Wx9QYNcPWz7mf-FD)

### How to Log In with a different account in TAP Assistant

Click on the button below and then click "Sign Out"

![](/files/-Mg4XseY3Dw_i-zDGaky)

## Hardware & Software Requirements TAP Studio

### **TAP Studio**

<table><thead><tr><th></th><th width="186.33333333333331">Minimum</th><th>Recommended</th></tr></thead><tbody><tr><td><strong>CPU Cores</strong></td><td><strong>2x 1.8GHz 32-bit (x86)</strong></td><td><strong>4x 2.4GHz 64-bit(x64)</strong></td></tr><tr><td><strong>RAM</strong></td><td><strong>4GB</strong></td><td><strong>8GB</strong></td></tr><tr><td><strong>Disk Space</strong></td><td><strong>6GB</strong></td><td><strong>10GB+</strong></td></tr><tr><td><strong>Display Resolution</strong></td><td><strong>1024x768</strong></td><td><strong>2560x1440</strong></td></tr><tr><td><strong>.NET Framework</strong></td><td><strong>4.6.2 or newer</strong></td><td><strong>4.6.2 or newer</strong></td></tr><tr><td><strong>Browser Automation</strong></td><td><strong>Google Chrome version 97 or newer</strong></td><td><strong>Google Chrome version 97 or newer</strong></td></tr></tbody></table>

{% hint style="info" %}
**Note:** Multiple monitors are highly recommended for bot development as they can speed up development, testing and debugging.
{% endhint %}

### **TAP Assistant**

|                        | Minimum                               | Recommended                           |
| ---------------------- | ------------------------------------- | ------------------------------------- |
| **CPU Cores**          | **2x 1.8GHz 32-bit (x86)**            | **4x 2.4GHz 64-bit(x64)**             |
| **RAM**                | **2GB**                               | **4GB**                               |
| **Disk Space**         | **2GB**                               | **10GB+**                             |
| **.NET Framework**     | **4.6.2 or newer**                    | **4.6.2 or newer**                    |
| **Browser Automation** | **Google Chrome version 97 or newer** | **Google Chrome version 97 or newer** |

## User Security Requirements

&#x20;In order to interact with all system components, windows APIs, application message pumps and device simulation (keyboard & mouse), elevated user permissions are required when running both **TAP Assistant** and **TAP Studio**.


# Basic Scheduling

You can set up basic scheduling for your robots on individual machines using the Windows integrated Task Scheduler.

![](/files/LKrlDpD7o5h5uwHQij7A)

## Creating a Task

In the Task Scheduler, in the right panel click Create Task.

![](/files/2rLnZcV844n0Zv6v2Xbl)

### General Panel

Make sure to have:

* Name: The name of the task;
* Run only when the user is logged in;
* Run with the highest privileges;
* Configured for: the machine's operating system, for this example it would be Windows 10;

### Triggers panel

![](/files/OekWiAVqp7GQJUj0jFSe)

In the triggers panel you can set-up the frequency with which the robot starts based on the displayed rules.

* It can be triggered: only one time, daily, weekly or monthly;
* It can recur every N number of days;
* Advanced settings: Repeating the trigger every hour, stopping the robot if it lasts longer than N hours.

### Action Panel

![](/files/VFqXWUnzF4Lzs4F8Vzhx)

* Program/Script: The path to where TAP Assistant is located. Press **Browse** for an easier way to navigate.
* Add arguments: The path to the .tap file that contains the robot due to be scheduled.
* Start in: This field cand be left empty.

> \*Note: the paths should be written between double quotes. E.g: "C:\path\example.tap"

{% embed url="<https://youtu.be/MFQSfdMm_Uc>" %}

## Potential Usecases:

Scheduling a robot to automatically run every Monday to process bank statements.

Scheduling a robot to run every hour and check email imboxes for new invoices in order to process them if any are found.

Scheduling a robot to send updates to the clients with updates every day/week.


# Setting Custom Log Sizes

### What is log4net

log4net is a tool to help the programmer output log statements to a variety of output targets.

We are using it for application debugging and auditing.

### Configuration

The log4net environment is fully configurable programmatically. However, it is far more flexible to configure log4net using configuration files. Currently, configuration files are written in XML. The log4net file can be found in the TAP studio installation folder (by default, the path is C:\Program Files (x86)\TAP Studio\Tailent).

To edit the log4net file, open it with a text editor and you will be able to edit the configurations.<br>


# Tailent Gateway Agent

Tailent Gateway Agent is a component of the Tailent Automation Platform that is responsible with providing machine-wide orchestration functionalities via REST Request APIs.

{% hint style="info" %}
**Tailent Gateway Agent is currently in a closed beta stage, available to select partners and customers. If you believe you need this feature, please contact us.**
{% endhint %}

It is usually deployed for unattended bot usage scenarios as it features Windows session creation, aimed at multi-user, unattended bot deployment. In order to provide the mentioned functionality, it needs to be configured and deployed as a Windows service.

**TGA** (Tailent Gateway Agent) can be configured to listen on a particular IP address and port on the target machine and wait for incoming REST requests over https. This allows for integration with virtually any type of third party system as well local curl/powershell scripts. **TGA** features the following functionalities:

* **Starting windows sessions**
* **Triggering TAP Automations**
* **Bot payload injection** (injecting data into the bot runtimes)
* **Managing bot lifecycles** (Status, bot responses, stopping)

Below is a guide for a step-by-step deployment of **Tailent Gateway Agent**:

1. [Installing Gateway Agent](/getting-started/tailent-gateway-agent/installing-gateway-agent)
2. [Installing TAP Studio and Assistant](/getting-started/tailent-gateway-agent/installing-tap-studio-and-assistant)
3. [TAP Gateway Agent API References](/getting-started/tailent-gateway-agent/tap-gateway-agent-api-references)


# Installing Gateway Agent

Tailent Gateway Engine is deployed as a self-hosted Windows service-grade application. The following prerequisites must be met:

1. Tailent Gateway Agent installation kit (zip) - <https://tailent-share.s3.eu-central-1.amazonaws.com/Orch/TailentGatewayAgent_1.3.3.0.zip>
2. TAP Bundle (TAP Studio + TAP Assistant) builds with TGA functionality enabled
3. Dedicated Windows User account belonging to the Administrators group (we'll assume it's called **TGAUser** for this exercise)
4. Microsoft Terminal Services / Remote Desktop installed and configured for all target users
5. Microsoft Visual C++ Redistributable 2013 (64 bit) must be installed on the Windows host environment. This can be obtained at <https://www.microsoft.com/en-us/download/details.aspx?id=40784>

The following steps must be followed in order:

1. The installation kit needs to be unzipped in a location where the user mentioned at #1 above has full read/write privileges (for reference, we'll assume that we'll be installing Tailent Gateway Agent to &#x43;**:\Tailent\TGA** for this exercise)
2. Open a **Command Prompt** (as Administrator) and type the following command:\
   \
   **sc create "TAP Gateway Agent" binPath= "C:\Tailent\TGA\TailentGatewayAgent.exe"**\
   \
   The following message should be displayed, signaling the Windows service has been successfully created and is ready to be configured.<br>

   <figure><img src="/files/zUlTcpi00rYW3mECgPdy" alt=""><figcaption></figcaption></figure>
3. Next, run **services.msc** from the Start Menu -> Run command and you should be able to see the recently created service listed:\ <br>

   <figure><img src="/files/QVzAvXeiro0jPJwl8Vqu" alt=""><figcaption></figcaption></figure>
4. This service needs to be configured to run automatically:

<figure><img src="/files/eE3GlKFHtwBcGZ2lMZie" alt=""><figcaption></figcaption></figure>

5. Aditionally, in order for TGA to be able to create Windows user session for unattended use, it also needs to be configured to run under the dedicated Windows user:<br>

<figure><img src="/files/wCu3yHsUmANBBmKyLf4F" alt=""><figcaption></figcaption></figure>

6. Before starting this service, certain configuration parameters need to be set. This can be done by editing the configuration file found under the TGA folder, called **appsettings.json**. It should look something like this:\ <br>

   <figure><img src="/files/l778i10NxA665Ruaoi9Y" alt=""><figcaption></figcaption></figure>

**AllowedHosts -** controls which addresses the TGA service will accept incoming requests. \
**ListenPort** - controls the port under which the TGA service will accept incoming requests.\
**Token** - represent a security token that must be used under all operational requests with TGA. Failure to provide this security token will lead to 403 Forbidden responses. This is a secret and should be changed to a randomly generated and secure string. For this setup exercise, we'll be leaving this token unaltered.\
**Timeout** - the timeout, in seconds, over which operational requests will fail. The default value of 120 seconds is a very safe setting and can usually be left unaltered.     &#x20;

7. After reviewing all the above steps, start the service so incoming requests can be accepted.


# Installing TAP Studio and Assistant

Due to the fact that the TAP Gateway Agent requires a custom build with the appropriate functionalities, this needs to be installed.

## Installation

To install the custom build, follow these steps:

1. The TAP Bundle installation kit needs to be unzipped in a location where all Windows users that plan to run unattended bots have full read/write privileges (for reference, we'll assume that we'll be installing to &#x43;**:\Tailent\TAP** for this exercise). This can be downloaded here:\
   <https://tailent-share.s3.eu-central-1.amazonaws.com/Orch/TAP_Studio_24.10.1016.zip>\
   \
   **Note: This only needs to be done once for all users.**<br>

2. Orchestration under TGA requires that TAP Assistant be running under each target Windows users' session. This can be achieved by setting up a **Windows Scheduled Task:**<br>

   **a. Start Task Scheduler with Administrative rights**\
   **b. Right click "Task Scheduler (Local)" and select "Create Task..."**\
   **c. Set the name to "TAP Assistant Automated Startup"**\
   **d. Provide a description** (something like **"**&#x53;cheduled task to start TAP Assistant when a user logs on.")\
   **e. Click on Change User or Group -> Type "Users" under "Enter the object name to select" and click Check Names -> Click OK**\ <br>

   <figure><img src="/files/sbalDLj6m8COYslUJ94L" alt=""><figcaption></figcaption></figure>

   **f. Confirm the "General" tab looks like this:**<br>

   <figure><img src="/files/vNSBPQ9Rx2xInsjxW1Re" alt=""><figcaption></figcaption></figure>

   **g. Jump to the "Triggers" tab -> Click "New" -> Select "At log on" under "Begin the task:" and make sure that "Any user" is selected.**<br>

   <figure><img src="/files/mqm1BYUTYNoFK2SeoAzf" alt=""><figcaption></figcaption></figure>

   **h. Jump to the "Actions" Tab -> Click "New" -> Select "Start a program" under Action -> Specify the following settings:**<br>

   <figure><img src="/files/GaNN4AK4KSEfJ9DuuR22" alt=""><figcaption></figcaption></figure>

   **Note: Make sure that "Start in" is set without quotation marks and without the last backslash, like in the picture above. TAP Assistant will fail to start if the startup folder is not correctly set.**\
   \
   **i. Jump to the "Conditions" tab and replicate these settings:**<br>

   <figure><img src="/files/Yx9otsp2u06RT65a8gKT" alt=""><figcaption></figcaption></figure>

   \
   **j. Jump to the "Settings" tab and replicate these settings:**\ <br>

   <figure><img src="/files/rzrXOOSZhieMDqKrKIlp" alt=""><figcaption></figcaption></figure>

   **Note: it's important to set the "Run a new instance in parallel" as this will enable TAP Assistant to start individually for each user.**

3. **Log on with each target Windows User to make sure the scheduled task runs correctly and use this to also login into your TAP Account:**\ <br>

   <figure><img src="/files/vBL7G1E3o5XzygACaBpa" alt=""><figcaption></figcaption></figure>

   **Note: TAP Gateway Agent relies on each users TAP credentials being set on their respective users' account. If a particular TAP credential is not set, the TAP Assistant will not be logged in into the TAP services and even though the Windows session will be started, the target automation will not run.**<br>

4. **Under a user with Administrator rights, start "gpedit.msc" and navigate to Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> "Create global objects" -> Click Add User or Group**\
   \
   **You will need to add each of the target Windows users accounts that you plan to use these features on.** This is required so that proper communication between the TAP Gateway Agent and the target TAP Assistant process running on that particular user be able to communicate.\ <br>

   <figure><img src="/files/CNo8m5hU29d0zmMQrixX" alt=""><figcaption></figcaption></figure>

   In the example above, the user which will be used for this installation scenario is called "**Test**", and can be seen under RPA-PROD-APP01\Test.


# TAP Gateway Agent API References

The following section details the APIs available for integration with TAP Automations.

Once properly configured, bot orchestration relies on both TAP Assistant and TAP Gateway Agent correct installation and communication.&#x20;

The TAP Gateway Agent receives REST requests which it then attempts to use to trigger Windows Session creation and to start the target automation.

The following subsections will provide detailed information on all available API endpoints and their respective parameters:

1. [Heartbeat Request](/getting-started/tailent-gateway-agent/tap-gateway-agent-api-references/heartbeat-request)
2. [Start Session Bot](/getting-started/tailent-gateway-agent/tap-gateway-agent-api-references/start-session-bot)
3. [Bot List](/getting-started/tailent-gateway-agent/tap-gateway-agent-api-references/bot-list)
4. [Get Bot Response](/getting-started/tailent-gateway-agent/tap-gateway-agent-api-references/get-bot-response)


# Heartbeat Request

This is usually used to check if the Tailent Gateway Agent is correctly configured and running.

```
[GET] https://tap.gateway:port/
```

## Request headers

This is a simple **GET** request that requires no parameters.&#x20;

## Request body

This is a simple **GET** request that does not require a body.

## Returns

The TGA should reply with a code 200 and the current version of the module:

<figure><img src="/files/EsEjCIsoB02zXaUhCukQ" alt=""><figcaption></figcaption></figure>

## Example curl request

```
curl --request GET \
  --url https://tap.gateway:port/
```


# Start Session Bot

This request is used to start a bot (with payload)

```sh
[POST] https://tap.gateway:port/StartRobot
```

## Request headers

Content-Type: multipart/form-data'

## Request body

All parameters for this request are passed via multipart form-data. The following keys are expected:

* **username -** the Windows username that will be used to create the session
* **password -** the Windows user password that will be used to create the session
* **token -** this is the token that is configured in the TGA (within appsettings.json); if this does not match with provided token, the response will feature a 403 Forbidden code.
* **botPath** - the absolute path to the target automation. This needs to be a solution file (.tap)&#x20;
* **ip** - the ip address of the session creation host. This is usually set to **127.0.0.1** or whatever the terminal services listener is configured to.
* **port -** the default value is **3389**, which is the default RDP protocol port. If terminal services are listening on a diferent port, this needs to be changed.
* **domain** - the domain name, if the server is part of one. Otherwise, this value can be left empty.
* **colorDepth -** default value is **32**, representing the color depth for the Windows session.
* **desktopHeight -** the height in pixels for the resolution of the Windows session.
* **desktopWidth -** the width in pixels for the resolution of the Windows session.<br>

Besides the mandatory parameters required above, you can specify an unlimited number of additional parameters which will be passed to the bot runtime once triggered.

* data1=some\_value
* data2=some\_other\_value
* file1='@C:\file1.pdf'
* file2='@C:\file2.txt'
* ...

## Returns

The TGA should reply with a code **200** and aditional runtime information as JSON:

```json
{
	"response": {
		"message": "Robot C:\\Tailent\\Test\\Test.tap started",
		"messageType": 6,
		"metadata": ["7876"]
	},
	"guid": "2777f2d5-dbf1-41a0-ad1a-b2c9b9388baf",
	"accessTokenSet": true,
	"accessToken": "AiUAOWUjyvZSRkabP9208JguJ4NUYXktMAteQVZZDoHfRJ4FTk46CrYuBZmiK1fWkVCn39BGYItxtHoYBTKlfO8bLE8avBENhOaQ9kIk6MuEgpA3HnlT5PKRhAwCQM4U"
}
```

This response features important information that can be used in other REST requests.&#x20;

The first section **"response"** offers information about what automation was started:

* **message** is the response from the TGA component
* **messageType** signals the outcome of the requested operation (6 is the code for successful remote start)
* **metadata** is an array with additional information regarding to the request; by default this contains the **PID** of the TAP.Runtime process (automation)

**guid** - is the unique identifier assigned at runtime to the bot instance and can be used to uniquely identify this bot.

**accessTokenSet** - can be true/false depending on wether the OTP (or access token generated was set correctly).

**accessToken** - is a OTP (one time password) generated only once for this particular bot instance. This can used (along with the **guid**) to interogate on the status or updates of this particular bot instance. Please note that this access token is not saved and cannot be regenerated if lost.

## Example curl request

```sh
curl --request POST \
  --url https://tap.gateway:port/StartRobot \
  --header 'Content-Type: multipart/form-data' \
  --form username=TestUser \
  --form 'password=Password' \
  --form token=12345678 \
  --form 'botPath=C:\Tailent\Test\Test.tap' \
  --form ip=127.0.0.1 \
  --form port=3389 \
  --form domain= \
  --form colorDepth=32 \
  --form desktopHeight=768 \
  --form desktopWidth=1024 \
  --form data1=some_value \
  --form data2=some_other_value \
  --form 'file1=@C:\file1.pdf'
  --form 'file2=@C:\file2.txt'
```


# Bot List

This endpoint can be used to retreive a list of all bot instance request during the lifecycle of the TGA component.

<pre class="language-http"><code class="lang-http"><strong>[GET] https://tap.gateway:port/Status/list
</strong></code></pre>

## Request headers

This is a simple **GET** request that requires no parameters.&#x20;

## Request body

This is a simple **GET** request that does not require a body.

## Returns

The TGA should reply with a code 200 and the bot instance list as an array, in JSON format:

```json
[
	{
		"guid": "f978fa59-706a-4768-9876-86e629649315",
		"status": "Stopped",
		"path": "C:\\Tailent\\Test\\Test.tap",
		"start": "2024-10-09T05:32:42.5363939-07:00"
	},
	{
		"guid": "2777f2d5-dbf1-41a0-ad1a-b2c9b9388baf",
		"status": "Running",
		"path": "C:\\Tailent\\Test\\Test.tap",
		"start": "2024-10-09T05:33:16.4779509-07:00"
	}
]
```

**guid -** represents the bot instance guid, which is generated with the [Start Session Bot](/getting-started/tailent-gateway-agent/tap-gateway-agent-api-references/start-session-bot) request.

**status** - represents the current status of the bot; this can be Stopped or Running.

**path** - represents the path of the .tap automation file

**start** - represents the starting time of the bot instance.

## Example curl request

```sh
curl --request GET \
  --url https://localhost:65001/Status/list \
```


# Get Bot Response

This endpoint can be used to retreive the bot response (as posted in the bot logic, using either scripting or Set HTTP Response actions).

This endpoint can be accessed repeatedly as the bot might update it's response multiple times in a single run instance. **Only the last update is available**.

<pre class="language-http"><code class="lang-http"><strong>[GET] https://localhost:65001/Status/[guid]
</strong></code></pre>

## Request parameters

The only request parameters required for this operation is the **guid** of the target bot instance. For instance:

```
[GET] https://localhost:65001/Status/78bd048b-6847-4056-8a74-3f71b5fc1271
```

## Request headers

**accessToken -** This operation requires to include the access token associated with the bot instance (obtained as a response from the [Start Session Bot](/getting-started/tailent-gateway-agent/tap-gateway-agent-api-references/start-session-bot) request. Failure to provide the correct access token will result in a **401 Unauthorized** response.

## Request body

This is a simple GET request that does not require a body.

## Returns

The TGA should reply with a code 200 and the bot instance details, along with the output, in JSON format:

```json
{
	"guid": "2777f2d5-dbf1-41a0-ad1a-b2c9b9388baf",
	"status": "Running",
	"path": "C:\\Tailent\\Test\\Test.tap",
	"start": "2024-10-09T05:33:16.4779509-07:00",
	"output": "\"\"Some String Response\"\""
}
```

**guid -** represents the bot instance guid, which is generated with the **Start Session Bot** request.

**status** - represents the current status of the bot; this can be Stopped or Running.

**path** - represents the path of the .tap automation file

**start** - represents the starting time of the bot instance.

**output** - is the serialized string form of whatever object was set as the response in the bot logic.

## Example curl request

```sh
curl --request GET \
  --url https://tap.gateway:port/Status/2777f2d5-dbf1-41a0-ad1a-b2c9b9388baf \
  --header 'accessToken: AiUAOWUjyvZSRkabP9208JguJ4NUYXktMAteQVZZDoHfRJ4FTk46CrYuBZmiK1fWkVCn39BGYItxtHoYBTKlfO8bLE8avBENhOaQ9kIk6MuEgpA3HnlT5PKRhAwCQM4U'
```


# TAP Frequenty Asked Questions

### Why does TAP Studio not find elements in my Chrome browser?

The browser need to have the TAP plugin installed and it usually installs it automatically. In case something happens and it fails to install it you can install it manually at the following link: <https://chrome.google.com/webstore/detail/tailent-automation/oplplnopncdadfondhhcobhifmnjjlkn>

&#x20;

### Why does my robot not start Adobe Acrobat?

Adobe acrobat has a setting of security that prevents automations unless a certain checkbox is unchecked.

This setting cand be found in Edit -> Preferences -> Security(Enhanced) -> Enable Protected View at Startup

&#x20;

### How can I stop a robot during execution?

If you want to stop a robot while it’s working, you can press Ctrl + Z, and it will force stop the robot.

&#x20;

### When to use Click Element and Click Control in a browser window?

Even though you can use Click Control in a Chrome browser window, it is recommended to use Click Element whenever possible. The advantage is that Click Element has the capabilities of Click Control plus you can use CSS selectors to better identify the said element.

&#x20;

### How can I use CSS selectors?

You can get a CSS selector by inspecting the element (right-click on the element and inspect) and from there right click on the selected line of html code -> press copy on the dropdown -> copy CSS selector. After copying it you can paste the selector in the Click Element action (Css selector field)  without setting an identifier. The next step is to paste the url of the page (in the URL field of the action) and test it.


# TAP Actions

TAP into the automation actions designed to create reliable and scalable automation projects that address real-life challenges.


# CSV


# Append CSV

This action can append a DataTable to an existing CSV file.

## **Properties**

<figure><img src="/files/MNEq7bj0LjqFn4YfCNgK" alt=""><figcaption></figcaption></figure>

### **Input**

* **File Name**: The name of the existing CSV file.
* **Input**: The variable to be appended.
* **Include Headers:** Specifies if the DataTable's headers will be deleted.\
  True/False.

{% hint style="info" %}
**Note:** The variable must be a DataTable.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Append data to a file in a loop.
* Append a CSV file to an existing CSV file.

### **Examples of Using Append CSV**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=gKyITMl426w>" %}

You can check and download the example from here:

{% file src="/files/1sHKZgpA2rrSHZvzVMS8" %}


# Read CSV

This action can read the contents of a CSV file.

## **Properties**

<figure><img src="/files/vDYwkinkBGMUbPWAbGYX" alt=""><figcaption></figcaption></figure>

### **Input**

* **File Name**: The path of the CSV file to read.
* **Include Headers**: Specifies if the output DataTable will include headers.\
  True/False.

### **Output**

* **Output:** The name of the variable to store the value.

{% hint style="info" %}
**Note:** The variable must be a DataTable.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Read data from a CSV file containing weekly reports.
* Read data from CSV files in a loop.

### **Examples of Using Read CSV**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=MWw9Vybky4E>" %}

You can check and download the example from here:

{% file src="/files/5gPvd54m5ycJv1WTjzeG" %}


# Write CSV

This action can write a CSV file.

## **Properties**

<figure><img src="/files/4bOhDs07zyIhV0fnzVcE" alt=""><figcaption></figcaption></figure>

### **Input**

* **File Name**: The name of CSV file that will be generated.
* **Input**: The name of the variable used to evaluate the evaluate the input.

{% hint style="info" %}
**Note:** The variable must be a DataTable.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Write the gathered data from an automation in a CSV file.

### **Examples of Using Write CSV**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=fSEaCyECdOY>" %}

You can check and download the example from here:

{% file src="/files/fsWSbr0tivkojBXYF0gI" %}


# Application

&#x20;


# Kill Process

This action can be used to kill the specified process, identified by the GetProcessesByName method.

We recommend using the Kill Process action only as the last resort, in order to brute force close a not responding application. Otherwise, the best practice is to use a [Click Control](/actions/tap-actions/mouse/click-control) activity to execute a click on the close button. <img src="/files/-MT0mdXRYve0zcJiPKQl" alt="" data-size="line">&#x20;

## **Properties**

![](/files/-MfY93XRlQUmg8SZbIGZ)

### **Input**

**Process Name**: process name of the process(es) desired to kill.

{% hint style="success" %}
make sure **to add** ".exe" to the name you provide.
{% endhint %}

### **Misc**

* **Display Name:** action display name in your implementation project.
* **Wait Before:** number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error:** True/False.
* **Retry Times:** Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.

## **Use Case**

### **Potential Use Cases**

* Close a not responding application in order to avoid the robot to continue working and perform wrong actions.&#x20;
* Close a not responding application and restart the process in order to save time.

### **Examples of Using Set Focus**

**Example**

In this example, the robot will open a web page, and then close it using the Kill Process activity.

**Prerequisites**:

Install Microsoft Edge.&#x20;

Watch the robot in action:

{% embed url="<https://youtu.be/YI_Gqa8GkFo>" %}

You can see how the **Kill Process** activity is used in an example that incorporates multiple activities.

{% file src="/files/-MT19gAbwan1vwVC1Gq2" %}
Kill Process sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Start Process

This action can be used to start the given process name by using Windows Explorer shell execution. It allows opening applications using the respective path to the executable files as well as common document types (pdf, docx etc.) with the default program setup on the target system.

## **Properties**

![](/files/-MfY99EBdcD4uXlvS5BN)

### **Input**

* **Process Path**: input complete or relative path for .exe process.
* **Arguments**: optional field; input the arguments of the given .exe process in order to start it in a certain state (e.g. process name is Microsoft Edge and the argument is "https:\\\tailent.com").

{% hint style="info" %}
All data is provided in the form of regular C# expressions. Thus, you will need to take into account standard string encoding - this is relevant when using relative and absolute paths, as '\\' characters need to be escaped. A correct value would be **"C:\\\Windows\\\Notepad.exe"**
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Open a desktop application in order to automate certain processes within it.
* Open a browser directly on the URL of a cloud-based application in order to automate certain processes within it.

### **Examples of Using Start Process**

Please see the video below that exemplifies the usage of the Start Process activity.

{% embed url="<https://youtu.be/bf6AF3CNmFE>" %}

You can see how the **Start Process** activity is used in an example that incorporates multiple activities.&#x20;

{% file src="/files/-MT1A8xoqAhoFjtjKbkD" %}
Start Process sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Wait for Control

This action can be used to pause the execution, waiting for the specified control object to appear on the screen.

## **Properties**

![](/files/-MfY9E3t3RHXxlXp23Py)

### **Input**

* **Identifier**: indicate a new UI element, or select from the already defined list of selectors.
* **Timeout**: total number of milliseconds the robot will search for the specified control object to appear before aborting the action.
* **Retry Interval:** the number of milliseconds robot will retry finding the specified control object.

{% hint style="info" %}
Based on the default values for timeout and retry interval, the robot would try 10 times within 5 seconds / 5000 milliseconds to find the specified control object.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* &#x20;**Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Wait for the google search bar to appear before trying to type in it.
* Wait on a company's webpage for tab/button "contact" to appear before typing in a message.
* Wait in an accounting software app for the button new invoice to appear before executing a click on it.

### **Examples of Using Wait for Control**

**Example**

**Description:**&#x20;

In this example, the robot will access the web page of Zendesk [,](http://www.rpachallenge.com/) look for the "Get Started" button and if it founds it, would display a confirmation message using the Message Box activity.

**Prerequisites**:&#x20;

Microsoft Edge installed.

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=EBUtaApvgzQ>" %}

You can see how the **Wait for Control** activity is used in an example that incorporates multiple activities.&#x20;

{% file src="/files/-MT19FjSZrfEcONum-Ta" %}
Wait for Control sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Clipboard

&#x20;


# Get Clipboard Text

This action gets the clipboard value and stores it in the variable defined by the value parameter.

{% hint style="info" %}
for the moment, this activity works only for text (no files, images etc)
{% endhint %}

## **Properties**

![](/files/-MfcDUGaTqO2aTvsWzo3)

### **Output**

**Output**: variable name to store the clipboard value.

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Capture a text in the clipboard and paste it in a text field.
* Capture a text in the clipboard and paste it in the email subject/body

### **Examples of Using Get Clipboard Text**

**Example**

In this example, the robot will get a text value in the clipboard and paste it into a text field, part of a customer master data creation form.

**Prerequisites**:

Create an account on Wave, a free accounting cloud solution.

Watch the robot in action:

{% embed url="<https://youtu.be/NPUwcFOw_5s>" %}

You can see how the **Get Clipboard Text** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT1m5VASZgoCVMR4-vY" %}
Get Clipboard Text sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Set Clipboard Text

This action sets the Clipboard value to the given value.

{% hint style="info" %}
For the moment, this activity works only for text (no files, images, etc.)
{% endhint %}

## **Properties**

![](/files/-MfcD_4AWNehfWlwmaSw)

### **Input**

**Value**: value to be set in the clipboard. Must be set in quotes for strings.

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Set the clipboard value captured from a website
* Set the clipboard value captured from a document

### **Examples of Using Set Clipboard Text**

**Example**

**Description:**&#x20;

In this video, the robot will copy in the clipboard the exchange rate EUR-USD and paste it into NotePad++.

Watch the robot in action:

{% embed url="<https://youtu.be/y_YyZcy954I>" %}

You can see how the **Set Clipboard Text** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT1mK2XMFA93LCnQPep" %}
Set Clipboard Text sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Control

&#x20;


# If Control Exists

This action is used to check whether a specified control identifier exists.

## **Properties**

<figure><img src="/files/xGQGLoBpUhQwq03N8QTM" alt=""><figcaption></figcaption></figure>

### **Input**

* **Identifier**: The control identifier of the target object.

### **Output**

* **Output**: The name of the variable to store the value.

{% hint style="info" %}
The variable must be boolean.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Check on a website if a text field exists in order to control the flow of the robot.
* Check if a certain button exists in an app in order to set the behavior of the robot.

### **Examples of Using If Control Exists**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=51jmJZMAWGA>" %}

You can check and download the example from here:

{% file src="/files/kABwko5Qmtz52B2TZVHJ" %}


# Wait for Control to Disappear

This action can be used to pause the execution, waiting for the specified control object to disappear off the screen.

## **Properties**

<figure><img src="/files/xUq4aGH2o14Qob7QdmeY" alt=""><figcaption></figcaption></figure>

### **Input**

* **Identifier**: indicate a new UI element, or select from the already defined list of selectors.
* **Timeout**: total number of milliseconds the robot will search for the specified control object to appear before aborting the action.
* **Retry Interval:** the number of milliseconds robot will retry finding the specified control object.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* &#x20;**Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Wait on a website for pop-up to disappear before executing a click in it.
* Wait in a software for a window to disappear before continuing the robot execution.

### **Examples of Using Wait for Control to Disappear**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=A1rTm3M3gpQ>" %}

You can check and download the example from here:

{% file src="/files/mMxBEKK0GkYEwazKKZV2" %}


# Check Control

This action is used to activate and deactivate a specific checkbox, radio button, or change the state of a toggle button.

**Check Control** runs in the **background**, so it doesn't set focus on the selected control.

## **Properties**

![](/files/-MfcES06EibmhHZixcOu)

### **Input**

* **Identifier**: indicate a new UI element, or select from the already defined list of selectors. (TAP into our unique [UI Browser](/getting-started/tap-studio/control-identifiers-in-ui-browser)).

![](/files/-MfcF6S3ds2ORHGvTUDE)

* **Action Type**:
  * &#x20;Activate – tick a checkbox
  * &#x20;Deactivate – untick a ticked checkbox
  * Toggle – change the position of a toggle button
* **Interaction Method**:
  * Input\_Symulation
  * Low\_Level

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Tick / untick the checkbox of an application form in order different fields to be enabled or disabled.
* Tick / untick checkboxes or toggle buttons, part of an application configuration.

### **Examples of Using Check Control**

**Example**

In this example, the robot will use the Check Control activity to enable additional features in NotePad++

Watch the robot in action:

{% embed url="<https://youtu.be/mV0DlCVLlE0>" %}

You can see how the **Check Control** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT1mmMIgSh7AqH5tkwQ" %}
Check Control sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Select List Item

This action allows you to select an item from a combo box / drop-down list or a list box.

**Select Item** runs in the **background**, so it doesn't set focus on the selected control.

## **Properties**

![](/files/-MfcGM9b8jkr3SiBJ_yM)

### **Input**

* **Identifier**: indicate a new UI element, or select from the already defined list of selectors.

![](/files/-MfcGOyK0wRFxQdbKqBA)

* **Interaction Method**:
  * Input\_Symulation: Will simulate mouse/keyboard actions for interaction with various controls.
  * Low\_Level: Will trigger/act on controls using low-level API calls, such as SendMessage API.
* **Select**: The expression value which is used to search for the desired item in the above-defined list. Strings need to be enveloped by quotes.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Select the operation type of a transaction to be registered from a drop-down
* Select the master data type of an item to be created from a drop-down
* Select the category of an element to be searched from a drop-down

### **Examples of Using Select List Item**

**Example**

In this example, the robot will select the new document default language in Notepad++ from the current one to C#.

**Prerequisites**:

Install Notepad++

Navigate to Notepad++  > Settings > Preferences > New Document&#x20;

Watch the robot in action:

{% embed url="<https://youtu.be/gJVmGKX3EtE>" %}

You can see how the **Select List Item** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT1xTV\_SFctPwmQvzYQ" %}
Select List Item sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Set Focus

This action can be used to set input (keyboard) focus to a particular control. The control does not have to be visible or in the foreground.

## **Properties**

![](/files/-MfcGmwwa9UK_kvNjibR)

### **Input**

**Identifier**: indicate a new UI element, or select from the already defined list of selectors. (TAP into our unique UI Browser).

![](/files/-MfcGpYv-s9uUNw-exyP)

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Set focus on a control from the same application page, but not currently visible
* Set focus on a textbox control before starting to type in it
* Set focus on a button in order to use a keystroke Enter to press it

### **Examples of Using Set Focus**

**Example**

In this example, the robot will set focus on a Notepad++ window and type a message.

Watch the robot in action:

{% embed url="<https://youtu.be/v5jYq8007Wo>" %}

You can see how the **Set Focus** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT1xsbVp9hkqB0\_hWR2" %}
Set Focus sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Set Text

This action can be used to input the text value associated with a value pattern for a particular control, if supported.

**Set Text** runs in the **background**, so it doesn't set focus on the selected control.

## **Properties**

![](/files/-MfcGuWsvQxiXujW1nQc)

### **Input**

* **Identifier**: indicate a new UI element, or select from the already defined list of selectors. TAP into our unique UI Browser).
* **Value**: string variable or text to be input in the above-defined text box control

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Fill in a master data form
* Write an email body
* Fill in credentials

### **Examples of Using Set Text**

**Example**

In this example, the robot will search on Google the exchange rate EUR - USD and press Enter.

**Prerequisites**:

* Open your browser
* Access Google

Watch the robot in action:

{% embed url="<https://youtu.be/Z_BviIURQTE>" %}

You can see how the **Set Text** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT1yMFtAwyhx2wNh7HO" %}
Set Text sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Get Value

This action gets the text value associated with a control (checked / unchecked / name / text / property etc).

**Get Value** runs in the **background**, so it doesn't set focus on the selected control.

## **Properties**

![](/files/-MfcFHKQyJ4eNuzL48Nc)

### **Input**

**Identifier**: indicate a new UI element, or select from the already defined list of selectors. TAP into our unique UI Browser).

### **Output**

**Output**: set an existing variable or define a new one that stores the captured value.

### &#x20;

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Get the text associated with the answer to a request
* Get the text of an error/warning message
* Get a master data property

### **Examples of Using Get Value**

**Example**

In this example, the robot will capture the temperature in Bucharest and display it in the console.

Watch the robot in action:

{% embed url="<https://youtu.be/7skomo0jf_8>" %}

You can see how the **Get Value** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MXpxwa6vqS7FN9rNedU" %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Get Native Value

Gets the action text value from the specified control, using a WM\_GETTEXT message. Please note that the target control needs to have an actual handle.

## Properties

<figure><img src="/files/XFGdFf7cCk4k0mOFqMi9" alt=""><figcaption></figcaption></figure>

### Input

* **Identifier**: indicate a new UI element, or select from the already defined list of selectors

### Output

* **Output**: set an existing variable or define a new one that stores the captured value

### Misc

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## Use cases

### Potential use cases

* Get the text associated with the answer to a request
* Get the text of an error/warning message
* Get a master data property


# Get Window State

This action is used to get the window state.

## **Properties**

<figure><img src="/files/2fvnABMqF9kDrHG5DQMi" alt=""><figcaption></figcaption></figure>

### **Input**

* **Identifier**: The control identifier of the target object.

### **Output**

* **Output**: The name of the variable to store the value. The output is a string, which can be one of the following values:<br>
  * **Maximized**
  * **Minimized**
  * **Normal**
  * **Unknown**

{% hint style="info" %}
The variable must be a string.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Get the target window state for a better control over the workflow.


# Set Window State

This action is used to set the state of a window.

## **Properties**

<figure><img src="/files/7tDj4ki1vmMr0opF5L9s" alt=""><figcaption></figcaption></figure>

### **Input**

* **Identifier**: The control identifier of the target object.
* **State:** The state to which the target window will be set.\
  Normal/Minimized/Maximized.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Maximize a window whilst using it.
* Put a window that will be of use later away without the need of closing it.


# Custom


# C# Script

This action allows running custom C# code within the robot's virtualized environment.

## **Properties**

![](/files/-MfdXCx6fipS_auzpINz)

### **Input**

* **Code**: click on the button ![mceclip1.png](/files/-MT1yvn3V248fkl9Z74j) to open the code editor:

![](/files/-MfdXXqeG48ey4gcL6NQ)

Click on **Generate Code Starter** to generate the "Hello world!" code.

![](/files/-MfdXRxyiteRM2km-Lg4)

Validate your code using the "**Validate Code**" button.&#x20;

If your code is correct, a pop-up message will inform you that "**Source code is valid**".

![](/files/-MfdY9bJ5lLZ4yu7Zo-Z)

If your code is NOT correct, another pop-up message will appear, informing the code is not correct and offering suggestions.

In the case below, on line 20, " is expected to close the string *"este numarul total de mesaje*

The error is registered also in the Error List section.

Same situation if the ; is missing on line 19.

![](/files/-MfdY_fvS9gc7oeKRfdJ)

* **Method Name**: default value MainMethod

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Parse a .csv file for master data synchronization between 2 different systems
* Call information from multiple sources in order to build an automation algorithm

### **Examples of Using C# Code**

**Example**

In this example, the robot will generate two files and a directory in the project folder.

Watch the robot in action:

{% embed url="<https://youtu.be/kA0Hm7T5GGI>" %}

You can see how **C# Script** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/RDLwid88Plxwzjl6ooZm" %}
Get Image sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Data

&#x20;


# JSON Deserialization

This action is used to convert a string to a JSON Object.

## **Properties**

![](/files/-MfdZ360uVJ49VBfT9jR)

### **Input**

* **Content**: the name of the variable which stores the string content.
* **Output**: the name of the variable used to store the result.&#x20;

{% hint style="info" %}
the output must be a **JObject** type.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error:** True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Deserialize information captured via HTTP Rest Request, in order to use it in the workflow.

### **Examples of Using JSON Deserialization**

**Example 1**

In this example, the robot will access the API of coindesk.com and retrieve the price of bitcoin in EUR.

**Steps**:

* Create a new project
* Create a new [Sequence ](/actions/tap-actions/diagram/sequence)and rename it.
* Create 2 variables: a string and a JSONobject

![](/files/-Mfdae34bWVTDoW7r01C)

* Add a new activity HTTP Rest Request in the newly created Sequence and edit the following parameters:
  * **URL**: "<https://api.coindesk.com/v1/bpi/currentprice.json>"
  * **Method**: GET
  * **Output**: a string variable (outputREST)
  * **Response Code**: an int32 variable (responseCode)

![](/files/-MfdaqWYOs6HTGVHoXtU)

* Add a new activity **JSON Deserialization** in the same Sequence and edit the following parameters:
  * **Content**:  the same string variable (outputREST)
  * **Output**: a JObject variable (rate)

![](/files/-Mfdb4yUZnRGlctfIouP)

* Add a [Write to Console ](/actions/tap-actions/loging/write-to-console)activity having as output:

```
"Today, "+DateTime.Now + ", 1 bitcoin = " + rate["bpi"]["EUR"]["rate"] + " EUR"
```

&#x20;where **rate\["bpi"]\["EUR"]\["rate"]** is the JSON hierarchy (please see the screenshot below from JSON formatter)

![](/files/-MT2MDG9feuaxLBe7cxL)

This is how your sequence should look like.

Watch the robot in action:

{% embed url="<https://youtu.be/rq1qaGl-0Sg>" %}

You can see how the **JSON Deserialization** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2LeY\_YA-Y7kBVmbHa" %}
HTTP REST & JSON Deserialization sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Database

&#x20;


# Connect To Database

This action can be used to Connect to a database, either it being local or external

## Properties<br>

![](/files/aTXlMQC6Qf6ljVHfp2BM)

### ‌Connection

![](/files/CKrPq3IcaVwg5TDAiXBN)

* **SQL Driver:** to which will be used to connect to the SQL Server;
* **SQL Server Address:** The SQL Server host address, to which the connection will be made;
* **Port:** The port of the SQL host (default port for Microsoft SQL Server 2019 is 1433);
* **SQL Server Name:** The SQL Server name;
* **Connection String:** The Connection String that will be used to connect to the SQL Server.

{% hint style="info" %}
**Note:** The **Connection String** overrides all other settings in the Connection panel.

If you want to use the previous settings, the **Connection String must be empty.**
{% endhint %}

### **Database** <a href="#misc" id="misc"></a>

![](/files/HtwZEkZ1VN3fzNf8uVIU)

* **Database:**  The name of the database which will be used to perform all the queries.

### **Authentification**

![](/files/K2oGKw4aTYJoC7z505c0)

* **Method:** The authentification method which will be used to connect to the SQL Server (Server Authentification or Windows Authentification);
* **Username:** The username which will be used to connect to the SQL Server;
* **Password:** The password which will be used to connect to the SQL Server;

### Output

![](/files/c8JNhcpwqIeh93R5mZyM)

* **Database Connection:** The DatabaseConnection object which will be used to interract with the SQL Server

{% hint style="info" %}
**Note:** This object **must** have the **Variable Type** set to **DatabaseConnetion.**
{% endhint %}

### Misc

![](/files/rCxlwwcuiVw0Bq4xQWu2)

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False.
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.

## **Use Case**

### **Potential Use Cases** <a href="#potential-use-cases" id="potential-use-cases"></a>

* Connect to a database directly to bypass forms that cannot be automated through regular means.
* Connect to a database for easier handling & retrieval of data.&#x20;

{% embed url="<https://youtu.be/UarekbGwszI>" %}


# Database Query

This action can be used to run queries on a database and extract desired data.

## Properties<br>

![](/files/RvQLvN7j4R94uSFjvhOd)

### ‌Input

![](/files/efdEJm77lhkKWmXxHb8G)

* **Query:** The query which will be executed on the given tatabase connection.
* **Database Connection:** The DatabaseConnection object which will be used to interract with the SQL Server.

### Output

![](/files/4hZNpcadjfxmW4SuvUfR)

* **Result:** The resulting DataTable object returned by the query.

{% hint style="info" %}
**Note:** This object **must** have the **Variable Type** set to **DataTable**.
{% endhint %}

### Misc

![](/files/XgYOz6iQPRvuuxcvPjaJ)

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False.
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.

## **Use Case**

### **Potential Use Cases** <a href="#potential-use-cases" id="potential-use-cases"></a>

* Run querries on a database to extract customers based on the specified requirements and insert them in a CRM.

{% embed url="<https://youtu.be/9lylvB7daaU>" %}


# Database Non Query

This action can be used to execute a non query to a database, such as INSERT, UPDATE and DELETE statements,  conection and returns an integer value representing the number of affected rows.

## Properties<br>

![](/files/1YOENGZqOPgffHyQSwCg)

### ‌Input

![](/files/gWv65ZhfLOrCCmnhblsN)

* **Command:** The **SQL Command** which will be executed on the given tatabase connection;
* **Database Connection:** The DatabaseConnection object which will be used to interract with the SQL Server.

### Output

![](/files/4hZNpcadjfxmW4SuvUfR)

* **Result:** The resulting **int32** object returned by the query.

{% hint style="info" %}
**Note:** This object **must** have the **Variable Type** set **int32.**
{% endhint %}

### Misc

![](/files/h2KYWeAQTc0NMnZa34T9)

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False.&#x20;
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.

## **Use Case**

### **Potential Use Cases** <a href="#potential-use-cases" id="potential-use-cases"></a>

* Directly Insert/Delete enteries in the invoices database based on predefined criteria.&#x20;

{% embed url="<https://youtu.be/nS1VZIWhAJg>" %}


# Disconnect From Database&#x20;

This action can be used to Disconnect from a database, either it being local or external, after executing querries and non querries.

## Properties<br>

![](/files/7AUgvc1jdGldDFTQ90e5)

### Input

![](/files/dYOS13vQFq7AmjamoNtr)

* **Database Connection:** The DatabaseConnection object which will be used to disconnect from the SQL Server.

### Misc

![](/files/Nf4v7rT5xpIi0EXP5oJD)

* **Display Name**: action display name in your implementation project.&#x20;
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False.
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.

{% embed url="<https://youtu.be/UarekbGwszI>" %}


# Diagram

&#x20;


# Invoke Workflow

Invoke Blocks are top level diagram components (like Sequences). The difference between Invoke Blocks and Sequences is that Invoke Blocks are not used to store actions.

Like the name suggests, Invoke Blocks are used to “invoke” (or more simply put - run) other workflows. You can “run” any kind of compatible .tapflow file (workflow), both internal (located within the current solution) and external (located in another solution or on the file system). So, simply put, the Invoke Block can be looked at as an action that executes a whole other workflow.

This segmentation is especially useful for designing modular automation solutions, where you can split automation logic into different, well-organized containers (or workflows). With the Invoke Block element, users can freely execute these components according to their requirements.&#x20;

Invoke Block can be inserted within the diagram similarly to Sequences (using drag & drop).

![](/files/-MfdeWsrG5Fl9MBXkvfg)

The picture above displays an Invoke Block. Using the dropdown button you can quickly select one of the workflows from the current solution or you can browse for external workflows (.tapflow files) as well.&#x20;

**Note:** You can also directly use the textbox area to manually input a workflow filename to be executed. Please note that values within the textbox area are used as expressions - so any string will need to be contained within quotes.

The Invoke Block features two additional buttons:\ <br>

* **Show Workflow** - used to display the currently selected workflow (this only works for workflows from the currently loaded solution). Clicking it will focus the designated workflow (or open a new tab for it if it’s not currently displayed).
* **Arguments** - used to display a popup for setting workflow arguments.

### **Arguments**

From a functional point of view, arguments are similar to variables (in that they have unique names, data types and values). The main difference between variables and arguments is their purpose: **to facilitate data transfer between workflows, for both input and output.**

In order to achieve this, arguments have an extra attribute assigned to them: **Direction**. This can either be **Input** or **Output**, depending on the purpose of the argument. Input arguments are used to “inject” or transfer data into a workflow from an external workflow, while output arguments are used to “export” or transfer data from the current workflow to an external workflow.

Similarly to variables, arguments are global within the scope of the workflow they are defined in. To be used properly, these need to be defined as part of the workflow and according to their designated purpose.&#x20;

\
Arguments can be created similarly to variables, using the dedicated Arguments pane:

![](/files/-MfgA9amF8prlF0yg2vl)

Please note that you are required to save the solution after updating the arguments within a particular workflow in order for the changes to be reflected throughout the whole project.

### **Using arguments with Invoke Blocks**

Once properly defined, arguments can be used with Invoke Blocks in order to transfer data between the invoking workflow and the invoked workflow. This can be done by clicking the **Arguments** button from the target invoke block:

![](/files/-MfgB2HGqEKjCxB2lr8Z)

This popup allows users to manage how data is transferred between workflows via arguments.

{% hint style="info" %}
All arguments attributes are read only at this point since they have been defined externally (in the invoked workflow). Users can only change the values that the arguments will use.
{% endhint %}

The above example shows using both Input and Output arguments. The **arg1** and **arg2** arguments are assigned the values of **value1**, respectively **value2** (these are both normal variables from the current workflow). Thus, the date stored in the **value1** and **value2** variables will be transferred to the invoked workflow - and can be accessed in the invoked workflow via the **arg1** and **arg2** arguments.

Similarly, the **outputArg** is an Output argument - so it’s used to extract data after the invoked workflow has finished execution. The assignment direction is reversed for Output arguments - the **sum** variable (from the current workflow) is assigned whatever value is stored within the **outputArg** argument.

{% hint style="info" %}
it is important that arguments that are being passed values receive evaluated expressions whose result is of the same data type. Assigning a **string** value to an **Int32** argument will fail.
{% endhint %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Sequence

A **sequence** represents the succession in which activities are executed within the current state.

The top action from a sequence is executed the first, and once it is successfully executed, the robot moves to the next one; the bottom activity from a sequence is executed the last.

![](/files/-MfgBbhw71zB1fNbmauT)

TAP Studio addresses the complexity of “real life” automation projects through simplicity, therefore each sequence is a state of its own.

This is why you can not nest a sequence in another sequence.

{% embed url="<https://youtu.be/1cbEjjxvt7g>" %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!&#x20;


# Direct text


# Click Text

This action is used to click on a text based on its contents.

## Properties

<figure><img src="/files/uj6QItTA55eex39HalKL" alt=""><figcaption></figcaption></figure>

### Input

* **Identifier**: set an already existent, or define a new identifier
* **Text**: the text value which you need to click (expression)
* **Method Filter**: a list of values of all intercepted API calls that will be considered for input. Default is "\*" which means supported direct text drawing methods are intercepted.
* **Occurrence**: specifies the index of the element to be clicked if multiple occurrences are found
* **Capture Length**: the amount of time that the action will perform data extraction (milliseconds) &#x20;
* **Force Redraw**: a forced redraw  of the target window/process will be requested. **True/False**

### Misc

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## Use cases

### Potential use cases

* Click on a text that does not have a unique Identifier


# Extract Direct Text

This action is used to extract text from designated control identifiers by intercepting Windows text rendering calls.

## Properties

<figure><img src="/files/pGDhtvoreTtLiALhg8DS" alt=""><figcaption></figcaption></figure>

### Input

* **Identifier**: set an already existent, or define a new identifier
* **Method Filter**: a list of values of all intercepted API calls that will be considered for input. Default is "\*" which means supported direct text drawing methods are intercepted.
* **Capture Length**: the amount of time that the action will perform data extraction (milliseconds) &#x20;
* **Force Redraw**: a forced redraw  of the target window/process will be requested. **True/False**

### Output

* **Output**: The name of the variable in which the contents will be stored

{% hint style="info" %}
The type of the variable must be List\<CapturedTextArea>
{% endhint %}

### Misc

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## Use cases

### Potential use cases

* Extract text by intercepting Windows text rendering calls


# Excel

&#x20;


# Write Table

This action is used to write a DataTable to a specified worksheet.

## **Properties**

<figure><img src="/files/7bCCN672wlknptHDNBXE" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Starting Cell**: The target cell where the DataTable object will be written to.
* **Data Table:** The DataTable object which will be written to the worksheet.
* **Print Headers:** Specifies if the column names will be written of the first row.
* **Create Worksheet:** Specifies if the target worksheet will be create automatically.\
  True/False.

{% hint style="info" %}
**Starting cell:** Needs to be specified as an "A1" notation. If a range is specified, the starting cell will be the top-left cell from that range.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Write DataTable objects to excel files.
* Write data from excel documents stored in DataTable objects and add them to other documents.

### **Examples of Using Write Table**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=pmk-9YhPUjg>" %}

You can check and download the example from here:

{% file src="/files/jdfjMpD63qDxXRcoJ6bA" %}


# Set Range Color

This action is used to set the foreground and background color for a specified range.

## **Properties**

<figure><img src="/files/8HuLIymNiPnBKK8whrrg" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell Range**: The target range.
* **Foreground:** The foreground color.
* **Background:** The background color.

{% hint style="info" %}
Both foreground and background colors need to be a **System.Drawing.Color** object.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Color the headers of an excel file for a better identification.
* Color the columns or rows of an excel file for a better differentiation.
* Color specific cells of an excel file in order to highlight important data.

### **Examples of Using Set Range Color**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=3P3rm6z-Yuc>" %}

You can check and download the example from here:

{% file src="/files/lrgM7w6U522vL3S9LC9v" %}


# Rename Sheet

This action is used to rename an existing worksheet in the target excel file.

## **Properties**

<figure><img src="/files/YLC3vJI9uz6a8rIHawUL" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **New Name**: The new the name of the target worksheet.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Rename an existing worksheet into something specific.

### **Examples of Using Rename Sheet**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=ySjZWvzpF4o>" %}

You can check and download the example from here:

{% file src="/files/7uij9DJ1DritCzSIkmPr" %}


# Read Range

This action is used to read a given range of the excel document.

## **Properties**

<figure><img src="/files/MGBg0vTryoSZQeMOgJKO" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell Range**: The target range.
* **Use Header:** Specifies if the action should use the first row in defining the column names.\
  True/False.

{% hint style="info" %}
The target range needs to be specified as an "A1" notation. Example "A1:D5". If left empty, the whole sheet will be captured.
{% endhint %}

{% hint style="info" %}
If the WorkSheet property is left empty, the first sheet from the active document will be chosen.
{% endhint %}

### Output

* **Output:** The name of the variable used to store the value.

{% hint style="info" %}
The variable must be a DataTable.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Extract only the relevant cells from an excel file.

### **Examples of Using Read Range**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=yQ27B5NhaGI>" %}

You can check and download the example from here:

{% file src="/files/xxnjH7g1NLRHboBvZk4A" %}


# Read Cell Formula

This action is used to read the formula of a cell.

## **Properties**

<figure><img src="/files/zpH9h0VCfhMdHKKju2bP" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell**: The target cell.

### Output

* **Output:** The name of the variable used to store the value.

{% hint style="info" %}
The variable must be a string.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Read the formula of a cell from a financial document then apply it to other documents as well.


# Insert Rows

This action is used to add a number of rows in an excel document.

## **Properties**

<figure><img src="/files/rxIyxT8lU1FmiHCmLHoH" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Target Row**: The target cell. Rows will be inserted above the selected row.
* **Row Count**: The number of rows to insert (default is 1).

{% hint style="info" %}
**Target Row**: This needs to be a cell (A1) and not a range (A1:C5).
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Changing the format of the file by adding rows in it.

### **Examples of Using Insert Rows**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=akEReF1SfFc>" %}

You can check and download the example from here:

{% file src="/files/0aqflF56E4vPyZXRMPqF" %}


# Insert Columns

This action is used to add a number of columns in an excel document.

## **Properties**

<figure><img src="/files/7BzvufrdApyLHimT0Xv9" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Target Column**: The target cell. Columns will be inserted to the left of the specified column.
* **Column Count**: The number of columns to insert (default is 1).

{% hint style="info" %}
**Target Column**: This needs to be a cell (A1) and not a range (A1:C5).
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Changing the format of the file by adding columns in it.

### **Examples of Using Insert Columns**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=43y3Sm3slLw>" %}

You can check and download the example from here:

{% file src="/files/jAdbfXjkarMWqj2DcUyF" %}


# Format Range

This action is used to change the format of cells in an excel document.

## **Properties**

<figure><img src="/files/ZqHsZshr4awd6jpFNRIW" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell Range**: The target name.
* **Format**: The intended range format specifier.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Changing the font.
* Changing the size.
* Changing the style.


# Fill Rows

This action is used to fill a range of rows with a target formula.

## **Properties**

<figure><img src="/files/jOvjs5vFkTh9UGRyrpU6" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell Range**: The target name.
* **Formula**: The formula to be used when filling the rows.

{% hint style="info" %}
The range needs to be specified as an A1 notation and span a single column. Example "A1:A5".
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Fill rows with a formula to calculate their sum.
* Fill rows with a formula to calculate their division.
* Fill rows with a formula to calculate their subtraction.&#x20;

### **Examples of Using Fill Rows**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=EWBVtM6jCTU>" %}

You can check and download the example from here:

{% file src="/files/opYyycxu5m7JI9pBZ2vy" %}


# Fill Columns

This action is used to fill a range of columns with a target formula.

## **Properties**

<figure><img src="/files/jOvjs5vFkTh9UGRyrpU6" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell Range**: The target name.
* **Formula**: The formula to be used when filling the columns.

{% hint style="info" %}
The range needs to be specified as an A1 notation and span a single row. Example "A1:E1".
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Fill columns with a formula to calculate their sum.
* Fill columns with a formula to calculate their division.
* Fill columns with a formula to calculate their subtraction.&#x20;

### **Examples of Using Fill Columns**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=Qt-g9VbSxkk>" %}

You can check and download the example from here:

{% file src="/files/WTDlvLSTsUiTidbRhuKB" %}


# Delete Sheet

This action is used to delete a sheet from an excel document.

## **Properties**

<figure><img src="/files/6kVg8Xc3LdSPbgIecujq" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Delete a sheet containing irrelevant data.

### **Examples of Using Delete Sheet**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=I3pASDs6yls>" %}

You can check and download the example from here:

{% file src="/files/g07YXSKm2DWLs7ndd9F1" %}


# Delete Rows

This action is used to delete a range of rows.

## **Properties**

<figure><img src="/files/wyF5lD28L4VQDUN5cx2J" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell Range**: The target range marked for deletion.

{% hint style="info" %}
The range needs to be specified as an A1 notation. For example "A1:A5" marks five rows for deletion.
{% endhint %}

### &#x20;

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Delete rows containing irrelevant data.
* Delete rows based on a filter.

### **Examples of Using Delete Rows**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=RoBy87APlA4>" %}

You can check and download the example from here:

{% file src="/files/ouI0BG5m4EnrgF61R2Tn" %}


# Delete Columns

This action is used to delete a range of columns.

## **Properties**

<figure><img src="/files/wyF5lD28L4VQDUN5cx2J" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.
* **Cell Range**: The target range marked for deletion.

{% hint style="info" %}
The range needs to be specified as an A1 notation. For example "A1:E1" marks five columns for deletion.
{% endhint %}

### &#x20;

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Delete columns containing irrelevant data.
* Delete columns based on a filter.

### **Examples of Using Delete Columns**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=vMBpebPXC5k>" %}

You can check and download the example from here:

{% file src="/files/rvebooIl2xnBftZGlwbg" %}


# Create Sheet

This action is used to create a new sheet in a excel document.

## **Properties**

<figure><img src="/files/4y0E3YqVI3BjmdrCjgA9" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The name of the worksheet that will be created.

### &#x20;

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Create a new sheet containing sales data.
* Create a new sheet containing employee information.

### **Examples of Using Create Sheet**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=9DhPms0HqDY>" %}

You can check and download the example from here:

{% file src="/files/bUnSZLpCpma5zPuQ6PGx" %}


# Clear Range

This action is used to clear a given range of cells from an excel file.

## **Properties**

<figure><img src="/files/zFM58WUZSajrh3qxwo9j" alt=""><figcaption></figcaption></figure>

### **Input**

* **Excel Document**: File name for the target Excel document.
* **WorkSheet**: The target worksheet name.

### &#x20;

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Clear a range of cells based on a given filter.

### **Examples of Using Clear Range**

**Example**&#x20;

Watch the robot in action:

{% embed url="<https://www.youtube.com/watch?v=lfPLO8NgkSI>" %}

You can check and download the example from here:

{% file src="/files/mkIzXlseU7jbEFVlq0ny" %}


# Open Excel WorkBook

This action is used to open an excel file resource for **reading** or **writing**. An internal reference object is created to be used to indicate this particular resource.

## **Properties**

![](/files/-MfgC62-qSM7IyhhbNls)

### **Input**

* **Excel Document**: file name for the target Excel document.
* **Document Path**: the relative path to the excel type file document. Absolute paths can also be used, but this defaults to the current working directory of the robot process.

### &#x20;

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Open an Excel document downloaded from an external source
* Open an Excel document received by email
* Open an empty Excel document in order to paste data and manipulate it in a report

### **Examples of Using Open Excel Workbook**

**Example**

In this example, the robot will access an Excel file and capture a cell value.

Watch the robot in action:

{% embed url="<https://youtu.be/yKBlPBnmbg4>" %}

You can see how the **Open Excel Workbook** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2O0jyQNc1\_Mgoq2uW" %}
Get Cell Value sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Close Excel WorkBook

This action is used to **close** an excel file resource that has been previously **opened**. It is good practice to close any open resources as potential data loss and/or corruption may occur otherwise.

## **Properties**

![](/files/-MfgBqSpW5veqdKV8H50)

### **Input**

* **Excel Document**: file name for the target Excel document.
* **Save Changes**: a Boolean value (True/False) which specifies whether or not to save any changes made to the above-mentioned target Excel Document.&#x20;
  * True: default value, meaning that any changes are saved
  * False: any changes are not saved

### &#x20;

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Close an excel file representing a financial report after performing several financial analysis calculations
* Close an excel file representing the master data list after adding one more item
* Close an excel file representing sales orders after adding one more item

### **Examples of Using Close Excel Workbook**

**Example**

In this example, the robot will access an Excel file, change a value, and then close the Excel file.

Watch the robot in action:

{% embed url="<https://youtu.be/yKBlPBnmbg4>" %}

You can see how **Close Excel Workbook** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2NRqor7Bu\_kcCcmK5" %}
Set Cell Value sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Get Cell Value

This action can be used to retrieve the value of the specified Excel Cell object.

## **Properties**

![](/files/-MfgBxAl_yOTQ3Vv5wwT)

### **Input**

* **Excel Document**: file name for the target Excel document.&#x20;
* **WorkSheet**: name of the target worksheet within the target Excel document
* **Row**: the row index of the target cell
* **Column**: the column index of the target cell.&#x20;

### **Output**

* **Output**: the name of the variable used to store the retrieved cell value.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Get values of certain Excel Cells in order to use them in other calculations
* Get values of certain Excel Cells in order to include them in an email text
* Get values of certain Excel Cells as part of a process that requests filling in fields/forms from other applications

### **Examples of Using Get Cell Value**

**Example**

In this example, the robot will access an Excel file and capture a cell value.

Watch the robot in action:

{% embed url="<https://youtu.be/eskjFL-MyOc>" %}

You can see how the **Get Cell Value** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2O0jyQNc1\_Mgoq2uW" %}
Get Cell Value sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Set Cell Value

&#x20;This action can be used to set the value of a specific Excel cell.

## **Properties**

![](/files/-MfgCC2WAcwwcSRR90ma)

### **Input**

### &#x20;

* **Excel Document**: file name for the target Excel document.
* **WorkSheet**: name of the target worksheet within the target Excel document
* **Row**: the row index of the target cell
* **Column**: the column index of the target cell.

### **Output**

* **Value**: a regular C# expression that is evaluated. The result is stored in the target Excel cell.

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Set exchange rate in a cell and use it as an absolute address in other calculations
* Perform a calculation (e.g. sum, average, etc.) in the specified cell
* Copy a table from a different source and paste it in an excel file

### **Examples of Using Set Cell Value**

**Example**

In this example, the robot will access an Excel file, change a value, and then close the Excel file.

Watch the robot in action:

{% embed url="<https://youtu.be/yKBlPBnmbg4>" %}

You can see how the **Set Cell Value** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2NRqor7Bu\_kcCcmK5" %}
Set Cell Value sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Flow

&#x20;


# Assign Value

This action can be used to assign the value of the evaluated expression (output) to the specified variable (input).

## **Properties**

![](/files/-MfgG_C-0e3QJTU7DW3H)

### **Input**

* **Input**: the variable to be assigned a new value of the evaluated expression.

### **Output**

* **Output**: the C# expression which will be evaluated. Complex expressions are allowed and functions from different namespaces can be used, as long as the full namespace is provided.

{% hint style="info" %}
The expression must not end with a semicolon as the interpreter escapes the string automatically.
{% endhint %}

{% hint style="info" %}
The following expression is valid:

DateTime.Now\.ToString(“HH-mm-ss”)

Also, note that the full namespace for the C# DateTime.Now the structure is used without the System namespace. Other less used classes or functions should use this naming convention.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Assign the URL of an application to be automated
* Assign the current invoice to be processed
* Assign to a variable the value of the current exchange rate taken from xe.com using Http REST Request.

### **Examples of Using Assign Value**

**Example**

In this example, the robot will assign a new value to a string variable having a default value.

Watch the robot in action:

{% embed url="<https://youtu.be/L6UaZRYWsDo>" %}

You can see how the **Assign Value** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2Ot9PEUoWWRJlxzc8" %}
Assign Value sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Show Message Box

This action can be used to display a message box directly on the screen. The displayed message represents a text or a C# expression.&#x20;

## **Properties**

![](/files/-MfgGgxO2Ry6ifMTteCM)

### **Input**

**Output**: the variable, text, or C# expression which will be displayed in the message box.&#x20;

{% hint style="info" %}
The expression must not end with a semicolon as the interpreter escapes the string automatically. &#x20;

The following expression is valid:

**DateTime.Now\.ToString(“HH-mm-ss”)**

Also, note that the full namespace for the C# DateTime.Now the structure is used without the System namespace. Other less used classes or functions should use this naming convention.
{% endhint %}

### **Misc**

* **Display Name**: action display name in your implementation project
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Display the name of the file that will be processed
* Display the number of invoices received by email in the last 24h
* Display sum, average, min and max amount from a table

### **Examples of Using Show Message Box**

**Example**

In this example, the robot will display a message showing the current year.

Watch the robot in action:

{% embed url="<https://youtu.be/ZL2Re1kNXLk>" %}

You can see how the **Show Message Box** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2PUOEQUkXBPB6EuFP" %}
Show Message Box sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Wait

This action can be used to pause the robot execution for the specified amount (in milliseconds).

## **Properties**

![](/files/-MfgGnGsSOFmGqtj5eNN)

### **Input**

* **Time**: number of milliseconds the robot to sleep.

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

Use Case 1: pause the robot 5000 milliseconds / 5 seconds in order to allow an application to open

Use Case 2: pause the robot 5000 milliseconds / 5 seconds in order to allow a browser to open on a certain URL

Use Case 3: pause the robot in order for an application to execute an operation before the robot performs the next activity.

### **Examples of Using Wait**

**Example**

In this example, the robot will display 2 messages at 3 seconds difference between them. The delay is set by the Wait activity.

Watch the robot in action:

{% embed url="<https://youtu.be/eqE-sg8cFHw>" %}

You can see how the **Wait** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT2Q-G9q7xA7oHqnRj4" %}
Wait sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the ents, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Loging

&#x20;


# Log to FIle

This action allows the user to log in an external file the desired output.&#x20;

## **Properties**

![](/files/-MdbJQaS3DWTKzJdCuzo)

### Input

* **File Path**: path for the file to be deleted;  either a variable or directly the file name (including the address to the file e.g. C:\\\Source Folder\\\Test.xls).

### **Output**

* **Output**: input the expression to be displayed in the Debug Console. Must use quotes for strings.

## Use Cases

* Log bank statement exceptions in a file for manual processing.
* Log errors in a file for later references.&#x20;

{% embed url="<https://youtu.be/CTqWUdkx8vY>" %}


# Write to Console

This action can be used to display a message in the Debug Console.

## **Properties**

![](/files/-MfgH-Vy_aoms7HtE1Vk)

### **Output**

* **Output**: input the expression to be displayed in the Debug Console. Must use quotes for strings.

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

Most of the use cases of the Write to Console activity is related to:

* testing the assignment of a variable
* insert logs

### **Examples of using Write to Console**

Please see the video below that exemplifies the usage of the Write to Console activity.

{% embed url="<https://youtu.be/DDGfS1QL4M8>" %}


# IO

&#x20;


# Copy File

This action will create a copy of a specific file in another folder.

## **Properties**

![](/files/-MfgHDobAob4hMlc-KzO)

### **Input**

* **Source File**: set the file to be copied; either a variable or directly the file name (including the complete path to file e.g. C:\\\Source Folder\\\Test.xls).
* **Destination File**: set destination file (including the complete path of the destination folder and file name  e.g. C:\\\Destination Folder\\\Test\_Copied.xls).

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Copy a template file to a new location before manipulating its content
* Copy learning materials on students' stations
* Copy induction materials on new joiner's station

### **Examples of Using Copy File**

**Example**

In this example, the robot will copy a file from the folder "FROM" in the folder "TO".

Prerequisites:

* Create 2 folders: FROM and TO.&#x20;
* Create a file in the folder FROM.

Watch the robot in action:

{% embed url="<https://youtu.be/fiLEMTPY15Y>" %}

You can see how **Copy File** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT5a7-PA616YBNNuRJX" %}
Copy File sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Create Directory

This action can be used to create a new directory to a specific location.

## **Properties**

![](/files/-MfgHKo0sU83V9cIQQi_)

### **Input**

* **Folder Path**: set the path to the location where the new folder will be created.&#x20;

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Create a new folder where to place processed invoices
* Create a new folder containing reports for the last period
* Create a new folder where to place log files

### **Examples of Using Create Directory**

**Example**

In the following example, the robot will create a new folder named **CreateDirecory** on a given path.

Watch the robot in action:

{% embed url="<https://youtu.be/m6mkcRvvjCc>" %}

You can see how the **Create Directory** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT5aY0d516TUccKPc-1" %}
Create Directory sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Create File

This action can be used to create a new file using a file name, to a specified location.

## **Properties**

![](/files/-MfgHPkCo3wgR3vuCNvf)

### **Input**

* **File Path**: path for the location where the file has to be created;  either a variable or directly the file name (including the address to the file e.g. C:\\\Source Folder\Test.xls).

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Creates a new excel file where to generate a report
* Create a .txt log file
* Create a PowerPoint presentation in order to fill it based on a certain logic

### **Examples of Using Create File**

**Example**

In this example, the robot will create a new .txt file to a given path.

Watch the robot in action:

{% embed url="<https://youtu.be/DM4EmBAI_WY>" %}

You can see how the **Create File** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT5avqLwyr1xMJI\_ttw" %}
Create File sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!


# Delete Directory

This action can be used to delete an existing directory from a specific location together with all the files and folders inside it.

{% hint style="info" %}
This activity performs a permanent deletion, you can't restore the folder from Recycle Bin.
{% endhint %}

![](/files/-MT5bDH99AnnwViU7YSo)

## **Properties**

![](/files/-MfgI5eVya5WrJbZOpaN)

### **Input**

* **Folder Path**: set the path to the location of the folder to be deleted.

### **Misc**

* **Display Name**: action display name in your implementation project.
* **Wait Before**: number milliseconds robot to wait before executing the action.
* **Wait After:** number milliseconds robot to wait until moving to the next action.
* **Abort on Error**: True/False
* **Retry Times**: Specifies the number of times to retry an action if it doesn't end successfully. Default value 0 (no retry); Use -1 if you want to retry indefinitely.&#x20;

## **Use Case**

### **Potential Use Cases**

* Delete a folder containing scan copies of accounting documents older than the legal period to store them
* Delete confidential documents before assigning a station to a different employee
* Ince an employee's access was reduced, delete folders from his/her station where he/she doesn't have access anymore.

### **Examples of Using Delete Directory**

**Example**&#x20;

In this example, the robot will delete a folder selected using the Choose Folder activity.

Watch the robot in action:

{% embed url="<https://youtu.be/W3yR6OU1VeU>" %}

You can see how the **Delete Directory** activity is used in an example that incorporates multiple activities. You can check and download the example from here:

{% file src="/files/-MT5bDH8XFgRU3bOAcQw" %}
Delete Directory sample project
{% endfile %}

The article doesn't fully answer your question, or you want to find out more? Ask your question in the comments, on our community forum, or contact our support team or your account manager. Whatever works for you, your question will find its answer soon!




---

[Next Page](/llms-full.txt/1)

