studio
latest
false
- Getting Started
- Setup and Configuration
- Automation Projects
- Dependencies
- Types of Workflows
- Control Flow
- File Comparison
- Automation Best Practices
- Source Control Integration
- Debugging
- Logging
- The Diagnostic Tool
- Workflow Analyzer
- About Workflow Analyzer
- ST-NMG-001 - Variables Naming Convention
- ST-NMG-002 - Arguments Naming Convention
- ST-NMG-004 - Display Name Duplication
- ST-NMG-005 - Variable Overrides Variable
- ST-NMG-006 - Variable Overrides Argument
- ST-NMG-008 - Variable Length Exceeded
- ST-NMG-009 - Prefix Datatable Variables
- ST-NMG-011 - Prefix Datatable Arguments
- ST-NMG-012 - Argument Default Values
- ST-NMG-016 - Argument Length Exceeded
- ST-NMG-017 - Class name matches default namespace
- ST-DBP-002 - High Arguments Count
- ST-DBP-003 - Empty Catch Block
- ST-DBP-007 - Multiple Flowchart Layers
- ST-DPB-010 - Multiple instances of [Workflow] or [Test Case]
- ST-DBP-020 - Undefined Output Properties
- ST-DBP-021 - Hardcoded Timeout
- ST-DBP-023 - Empty Workflow
- ST-DBP-024 - Persistence Activity Check
- ST-DBP-025 - Variables Serialization Prerequisite
- ST-DBP-026 - Delay Activity Usage
- ST-DBP-027 - Persistence Best Practice
- ST-DBP-028 - Arguments Serialization Prerequisite
- ST-USG-005 - Hardcoded Activity Arguments
- ST-USG-009 - Unused Variables
- ST-USG-010 - Unused Dependencies
- ST-USG-014 - Package Restrictions
- ST-USG-017 - Invalid parameter modifier
- ST-USG-020 - Minimum Log Messages
- ST-USG-024 - Unused Saved for Later
- ST-USG-025 - Saved Value Misuse
- ST-USG-026 - Activity Restrictions
- ST-USG-027 - Required Packages
- ST-USG-028 - Restrict Invoke File Templates
- ST-USG-032 - Required Tags
- ST-USG-034 - Automation Hub URL
- Variables
- Arguments
- Imported Namespaces
- Coded automations
- Introduction
- Studio IDE
- Working with Input and Output arguments
- Best practices
- Working with Coded automations
- Invoking coded automations using libraries
- Creating Connections for services in coded automations
- Registering custom services
- Before and After contexts
- Generating code
- Generating coded test case from manual test cases
- Trigger-based Attended Automation
- Recording
- UI Elements
- Selectors
- Object Repository
- Data Scraping
- Image and Text Automation
- Citrix Technologies Automation
- RDP Automation
- VMware Horizon Automation
- Salesforce Automation
- SAP Automation
- macOS UI Automation
- The ScreenScrapeJavaSupport Tool
- The WebDriver Protocol
- Extensions
- About extensions
- SetupExtensions tool
- UiPathRemoteRuntime.exe is not running in the remote session
- UiPath Remote Runtime blocks Citrix session from being closed
- UiPath Remote Runtime causes memory leak
- UiPath.UIAutomation.Activities package and UiPath Remote Runtime versions mismatch
- The required UiPath extension is not installed on the remote machine
- Screen resolution settings
- Group Policies
- Cannot communicate with the browser
- Chrome extension is removed automatically
- The extension may have been corrupted
- Check if the extension for Chrome is installed and enabled
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Enable access to file URLs and Incognito mode
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- List of extensions for Chrome
- Chrome Extension on Mac
- Group Policies
- Cannot communicate with the browser
- Edge extension is removed automatically
- The extension may have been corrupted
- Check if the Extension for Microsoft Edge is installed and enabled
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Enable access to file URLs and InPrivate mode
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- List of extensions for Edge
- Extension for Safari
- Extension for VMware Horizon
- Extension for Amazon WorkSpaces
- SAP Solution Manager plugin
- Excel Add-in
- Test Suite - Studio
- Troubleshooting
Working with Input and Output
arguments
Studio User Guide
Last updated Dec 17, 2024
Working with Input and Output arguments
Learn how to efficiently handle input and output arguments
in coded automations, including their integration when invoked in low-code
workflows.
When designing coded automations, you can add input, output, and In/Out arguments
alongside the entry point
Execute
method. Irrespective of their
definition order, In/Out arguments are placed at the end of the method's argument
list.
Check out the scenarios below to understand how to add arguments to your coded automations.
Adding input parameters
- To add input parameters, define them after the name of the entry point method.
- For example, you have a coded automation that represents a loan application
taking input arguments only. The needed input arguments are the
customerName
,loanAmount
,loanRate
andloanTerm
. Check out the code snippet below:public void Execute (string customerName, decimal loanAmount, double loanRate, int loanTerm)
public void Execute (string customerName, decimal loanAmount, double loanRate, int loanTerm)
Adding output parameters
- To add output parameters, define
them before the name of the entry point method.
Note: If the method returns a single parameter, it is automatically named
Output
by default, and you can't rename it. - For example, you have a coded automation that approves or denies a loan
application based on the loan rate. This automation requires an input argument
for the loan rate (
loanRate
), and an output argument showing if the loan application was approved or denied (loanApproved
). Check out the code snippet below:public bool Execute (int loanRate)
public bool Execute (int loanRate) - Let's take another example that outputs two parameters. Suppose you have a coded
automation that returns the approved loan amount
(
LoanAmountApproved
) and if the loan was approved (IsLoanApproved
), based on the loan rate (LoanRate
). Check out the code snippet below:public (int LoanAmountApproved, bool IsLoanApproved) Execute(int LoanRate)
public (int LoanAmountApproved, bool IsLoanApproved) Execute(int LoanRate)
Adding In/Out parameters
- To add an argument of type In/Out, define the same argument both before and after the name of the entry point method.
- For example, you have a coded automation that takes an initial loan amount
(
loanAmount
) and an interest rate (interestRate
) as input and then calculates the updated loan amount after applying the interest rate and returns it. Also, it returns an argument stating the type of financial need that this loan amount would require.Check out the code snippet below:public (double loanAmount, string financialNeed) Execute (double interestRate, double loanAmount)
public (double loanAmount, string financialNeed) Execute (double interestRate, double loanAmount)
Note: If an input argument is named
Output
, it
will be treated as an In/Out argument. Naming any argument as
Output
treats it as an In/Out argument, even if it's only
declared once in the method.
- Create a coded automation that
takes an initial loan amount (
loanAmount
) and an interest rate (interestRate
) as input and then calculates the updated loan amount after applying the interest rate and returns it.For this coded automation you should declare the entry point method aspublic double Execute (double interestRate, double loanAmount)
- Add an Invoke Workflow File activity in a low-code automation and offer the path to the coded automation you previously created.
- Click Import Arguments and
check the imported arguments.
For the coded automation offered as an example, you should have the following imported arguments:
Name Direction Type Value loanAmount
In/Out Double
10,000 interestRate
In Double
5 Manually add the arguments that don't appear as imported arguments.
Tip: With System.Activities 24.10 and higher, the
arguments that you add to a coded automation are automatically imported in a
low-code automation when you invoke them using the Invoke Workflow File
activity.
Note: Using nested classes as workflow arguments is not supported.
Classes used as arguments must be directly defined within a namespace.