# Managing Arguments

> Arguments are used to pass data from a project to another. In a global sense, they resemble variables, as they store data dynamically and pass it on. Variables pass data between activities, while arguments pass data between automations. As a result, they enable you to reuse certain projects time and again.

Arguments are used to pass data from a project to another. In a global sense, they resemble variables, as they store data dynamically and pass it on. Variables pass data between activities, while arguments pass data between automations. As a result, they enable you to reuse certain projects time and again.

Studio supports a large number of argument types, which coincide with the types of variables. Therefore, you can create Generic Value, String, Boolean, Object, Array, or DataTable arguments and you can also browse for.Net types, just as you do in the case of [variables](https://docs.uipath.com/studio/standalone/2023.10/user-guide/managing-variables#managing-variables).

Additionally, arguments have specific [directions](https://docs.uipath.com/studio/standalone/2023.10/user-guide/the-arguments-panel) (**In**, **Out**, **In/Out**, **Property**) that tell the application where the information stored in them is supposed to go.

:::important
* If there are both a **variable** and an **argument** with the same name, the variable is always defaulted to and used at runtime. 
* Passing complex In arguments (for example, of type **System.Data.DataTable**) to an **[Invoke Workflow File](https://docs.uipath.com/activities/docs/invoke-workflow-file)** activity that is not isolated acts as if a reference is passed, which means any changes to the object inside the invoked workflow change the object in the main workflow. Built-in argument types (for example, **Boolean**) are always passed as values.
:::

Please take into consideration that if you create an In/Out argument with an In value when used in the **Invoke Workflow** activity, and then change the value to Out, you may notice that an error is thrown when executing the project. This is because the Invoke Workflow activity did not return the values by reference. Use a [Global Handler](https://docs.uipath.com/studio/standalone/2023.10/user-guide/global-exception-handler#global-exception-handler) in your project to get access to the exact values the arguments had inside the invoked workflow.

Lastly, these arguments can be used to integrate with other tools in your company, as they are exposed in Orchestrator too. This means that any process you create can now receive input parameters through the Orchestrator API or interface, as well as return an output to all of the aforementioned. More information is available [here](https://docs.uipath.com/orchestrator/automation-cloud/latest/user-guide/about-input-and-output-arguments).

## Creating Arguments

Argument names should be in upper CamelCase with a prefix stating the argument direction, such as `in_DefaultTimeout`, `in_FileName`, `out_TextResult`, `io_RetryNumber`. You can check out our [Workflow Design Naming Conventions](https://docs.uipath.com/studio/standalone/2023.10/user-guide/workflow-design#naming-conventions) recommendations for more details.

### From the Data Manager

1. Open the Data Manager, then select **New** &gt; **New Argument**.
2. A new item with the default name `argument` is added under Arguments.
3. Configure the created argument:
   * Click the argument name to edit its name.
   * Expand the argument using the arrow to its left, and set the **Direction**, **Data Type**, whether it is **Required**, and optionally, the **Default Value**.

From the Data Manager, you can also create arguments in bulk by right-clicking the Arguments node and then selecting **Bulk Create Arguments**. A new window is displayed where you can add and configure multiple arguments.

### From the Body of an Activity

   ![docs image](https://dev-assets.cms.uipath.com/assets/images/studio/standalone-docs-image-169073-a0be2520.webp)

1. From the **Activities** panel, drag an activity to the **Designer** panel. Right-click a field and select **Create In Argument** or **Create Out Argument** from the context menu. Alternatively, press Ctrl+M or Ctrl+Shift+M. The **Set Arg** field is displayed.
2. Fill in the name and press Enter. The argument is created and visible in the field. Check its direction and type in the **Arguments** panel.

### From Expressions

Alternatively, arguments can be created from expressions directly in an activity input field or the **Expression Editor**:

1. Select a part of the expression and press Ctrl+M or Ctrl+Shift+M. The **Set Arg** field is displayed.
2. Fill in the name and press Enter. The argument is created. Check its type and direction in the **Arguments** panel.

   ![docs image](https://dev-assets.cms.uipath.com/assets/images/studio/standalone-docs-image-169516-34ba3b16.gif)

Arguments created in these ways automatically receive the type according to the activity. For example, if you create an argument in the `Data Table` field of a [Write Range](https://docs.uipath.com/activities/docs/write-range) activity, the argument's type is set to `DataTable`. If you create an argument in the `Text` field of a [Write Line](https://docs.uipath.com/activities/docs/write-line) activity, the argument's type is set to `String`.

### From the Properties Panel

   ![docs image](https://dev-assets.cms.uipath.com/assets/images/studio/standalone-docs-image-168413-418e3c37.webp)

1. In the **Properties** panel of any activity, right-click a field that can be edited, and select **Create In Argument** or **Create Out Argument** from the context menu. Alternatively, press Ctrl+M or Ctrl+Shift+M. The **Set Arg** field is displayed.
2. Fill in the name and press Enter. The argument is created and visible in the field. Check its direction and type in the **Arguments** panel.

The argument type is automatically generated depending on the selected property.

### From the Arguments Panel

   ![docs image](https://dev-assets.cms.uipath.com/assets/images/studio/standalone-docs-image-170455-4dc32be5.webp)

1. In the **Designer** panel, click **Arguments**. The **Arguments** panel is displayed.
2. Click the **Create Argument** line, and fill in the name. A new argument is created.
      :::note
      By default, all arguments are of **String** type and have an **In** direction.
      :::
   ## Removing Arguments

You can remove arguments from the Data Manager or from the Arguments panel.

### From the Data Manager

1. Open the Data Manager and expand the **Arguments** node.
2. Right-click an argument, and then select **Delete**. Alternatively, select it and press the Delete key.

### From the Arguments Panel

1. Open the Arguments panel.
2. Right-click an argument, and then select **Delete**. Alternatively, select it and press the Delete key.

   ![docs image](https://dev-assets.cms.uipath.com/assets/images/studio/standalone-docs-image-168869-ed4e7a27.webp)

### Removing All Unused Arguments

To remove all the arguments that are not used anywhere in the current file, select **Remove Unused** &gt; **Arguments** in the Studio ribbon, and then select **Yes** when prompted for confirmation.
