Hello UiPath Community!
We’re excited to announce that the feature you’ve been waiting for is finally here! ![]()
Now it’s your turn to explore this preview, test it out, and share your thoughts with us.
Your feedback matters—tell us what you think and help us make it even better! ![]()
Try it today and let us know in the comments!
Purpose of the UiPath Activity Migrator
UiPath Activity Migrator is an essential Command-Line Interface (CLI) tool for organizations transitioning legacy automation projects to the modern UiPath platform, enabling access to the latest features and capabilities:
- Automate the migration process: Simplify and streamline the transfer of process configuration & dependencies;
- Reduce manual effort and errors: Ensure consistency and accuracy during migration, instead of manually transferring dependencies and activities
Supported migration scenarios
Project framework migration
Migrating a UiPath Legacy project to the Windows compatibility mode is highly recommended for several strategic, technical, and support-related reasons. Here’s a breakdown of why you should consider making the move:
- Improved Performance:
- Windows projects run faster and more efficiently due to better integration with .NET Core and modern Windows APIs.
- Better Compatibility with External Libraries:
- Windows projects support newer versions of libraries and dependencies, making it easier to integrate with external systems.
Access to Modern UIAutomation Capabilities
Many new UIAutomation features—such as Unified Target and Healing Agent—are only compatible with the Modern UIAutomation framework. Therefore, migrating from Classic UIAutomation activities to the Modern experience is necessary.
Deprecated Outlook Activities Migration
Microsoft is sunsetting Classic Outlook and encouraging adoption of Microsoft 365. As a result, UiPath Activity Migrator supports transitioning automation dependencies from UiPath.Mail.Activities (which rely on the Classic Outlook API) to UiPath.MicrosoftOffice365.Activities based on the UiPath’s Integration service**.**
When to use Activity Migrator vs Studio Windows Legacy convertor
Use Studio Windows-Legacy Converter when:
- You only need to convert projects from Legacy to Windows one by one.
- No activity migrations are required.
Use Activity Migrator when:
- You want to convert multiple Legacy projects to Windows (bulk conversion supported).
- Migration of UIAutomation or Mail Activities is needed.
- Any combination of the above scenarios applies.
Review the migration best practices below
Where to get it
The tool can be found in the Automation Cloud/Downloads section
or in the Customer Portal
Alternatively, you can download the CLI tool archive and unzip it into the <tool-install-dir> folder.
How to provide feedback
Either in the Insider Portal or as a reply to this forum post.
How to use it
Available options
This tool migrates projects to newer versions, from Legacy to Windows, and activities from older packages to newer packages.
Command: <tool-install-dir>\UiPath.Upgrade.exe
Usage: UiPath.Upgrade.exe [command] [options]
Options:
-?, -h, --help Show help and usage information
Commands:
| Command | Description |
|---|---|
analyze |
Analyze the project for migration without making changes |
upgrade |
Upgrade/Migrate the project or parts of it |
bulk |
Analyze or upgrade all projects in a folder in bulk |
version |
Show version information |
Analyze a project
This option only simulates the migration by generating a report; it does not perform the actual migration or make any changes to the project.
Command: <tool-install-dir>\UiPath.Upgrade.exe analyze
Usage: UiPath.Upgrade.exe analyze [options]
Options
| Option | Description |
|---|---|
| -?, -h, --help | Show help and usage information |
| -p, --project-path (REQUIRED) | Path to the project to analyze or upgrade. The folder provided as <project-path> should contain the project’s project.json file. |
| -o, --output-path | Output path for results (optional). If not specified, a new folder will be created with _Upgraded suffix, for the upgraded project. |
| -v, --verbose | Enable verbose logging |
| -f, --output-format | Output format: console (default) or sarif |
| -e, --extension-directory | Directory to search for extensions. For advanced use only. |
| –orchestrator-url | The full Orchestrator URL including organization name (e.g., https://cloud.uipath.com/defauauldore). By default, if no Orchestrator URL is specified, the connection information from Studio will be used. When specified, you must also provide credentials using either: - Personal access token (PAT) using --orchestrator-pat option, OR - External application id and secret using --orchestrator-application-id and --orchestrator-application-secret. |
| –orchestrator-tenant | The Orchestrator tenant name (defaults to ‘DefaultTenant’ if not specified) |
| –orchestrator-pat | Personal Access Token (PAT) for Orchestrator authentication, used to access Orchestrator library feeds. Create a personal access token, and add Orchestrator API access scope -OR.Execution.Read. See: Automation Suite - Personal Access TokensAlternative to this method is configuring an application id and secret, using --orchestrator-application-id and --orchestrator-application-secret. See information below. |
| –orchestrator-id | OAuth Application ID for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-secret to access Orchestrator library feeds. To obtain this, configure an external application in Orchestrator: 1) Go to External Applications, 2) Add Application, 3) Select ‘Confidential application’, 4) Add scope with ‘Application scope’ and select ‘OR.Execution.Read’ permission. See: Orchestrator - Managing external OAuth applications |
| –orchestrator-application-secret | OAuth application secret for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-id to access Orchestrator library feeds. This is generated when you create a confidential external application in Orchestrator. See: Orchestrator - Managing external OAuth applications |
| –ignore-missing-dependencies | Ignore missing dependencies during upgrade. Missing dependencies will appear as warnings, but workflows using those dependencies will report missing types, fail to compile, or fail to perform other needed migrations. |
| –enabled-extensions | Comma-separated list of extension names to enable. By default, all extensions are enabled. Available extensions: MailActivities, MicrosoftActivitiesExtension, UiAutomationActivities. Example: --enabled-extensions MailActivities,MicrosoftActivitiesExtension |
| –disabled-extensions | Comma-separated list of extension names to disable. Available extensions will be dynamically populated based on discovered extensions. |
| –disable-all-extensions | Disable all extensions. This option is mutually exclusive with --enabled-extensions and --disabled-extensions. |
| –uia-package-version | The version of the UIAutomation activities package to use for migration. Defaults to version 25.10.20 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead. |
| –mail-o365-package-version | The version of the Microsoft Office 365 activities package to use for migration. Defaults to version 3.3.10 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead. |
| –config | Specifies the path to a custom configuration JSON file. The configuration can be used to modify the default behavior of certain activities or assign constant values to properties that require user input during the migration. The configuration file should respect the following convention: {“{reserved-configuration-key}”: “{value}”,…“{path-to-workflow} > {activity-display-name}”: {“{property-name}”: “{property-value}”,},…} |
Special Notes
Currently the only {property-name}that can be assigned is Connection Id.
{reserved-configuration-key}represents activity specific behavior changes:
SaveOutlookMailMessage_IgnoreSaveAsType- If set totrue, the option will disable theSave as typecheck for unsupported types, so that the activity can be migrated regardless of theSave as typeoption.
* can be used as a wildcard to match anything. It can be used in both {path-to-workflow} and {activity-display-name}. Thus, multiple workflows or activities can be specified for the same collection of properties. When multiple entries are matched for the same workflow + activity tuple, only the last match will be used.
Migrate a project
The option upgrades/migrates the project or parts of it.
Command: <tool-install-dir>\UiPath.Upgrade.exe upgrade
Usage: UiPath.Upgrade.exe upgrade [options]
Options
Options:
| Option | Description |
|---|---|
-?, -h, --help |
Show help and usage information |
-p, --project-path (REQUIRED) |
Path to the project to analyze or upgrade. The folder provided as <project-path> should contain the project’s project.json file. |
-o, --output-path |
Output path for results (optional). If not specified, a new folder will be created with _Upgraded suffix, for the upgraded project. |
-v, --verbose |
Enable verbose logging |
-f, --output-format |
Output format: console (default) or sarif |
-e, --extension-directory |
Directory to search for extensions. For advanced use only. |
–orchestrator-url |
The full Orchestrator URL including organization name (e.g., https://cloud.uipath.com/defauauldore). By default, if no Orchestrator URL is specified, the connection information from Studio will be used. When specified, you must also provide credentials using either: - Personal access token (PAT) using --orchestrator-pat option, OR- External application id and secret using --orchestrator-application-id and --orchestrator-application-secret. |
–orchestrator-tenant |
The Orchestrator tenant name (defaults to ‘DefaultTenant’ if not specified) |
–orchestrator-pat |
Personal Access Token (PAT) for Orchestrator authentication, used to access Orchestrator library feeds. Create a personal access token, and add Orchestrator API access scope -OR.Execution.Read. See: Automation Suite - Personal Access TokensAlternative to this method is configuring an application id and secret, using --orchestrator-application-id and --orchestrator-application-secret. See information below. |
–orchestrator-application-id |
OAuth Application ID for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-secret to access Orchestrator library feeds. To obtain this, configure an external application in Orchestrator: 1) Go to External Applications, 2) Add Application, 3) Select ‘Confidential application’, 4) Add scope with ‘Application scope’ and select ‘OR.Execution.Read’ permission. See: Orchestrator - Managing external OAuth applications |
–orchestrator-application-secret |
OAuth application secret for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-id to access Orchestrator library feeds. This is generated when you create a confidential external application in Orchestrator. See: Orchestrator - Managing external OAuth applications |
–ignore-missing-dependencies |
Ignore missing dependencies during upgrade. Missing dependencies will appear as warnings, but workflows using those dependencies will report missing types, fail to compile, or fail to perform other needed migrations. |
–enabled-extensions |
Comma-separated list of extension names to enable. By default, all extensions are enabled. Available extensions: MailActivities, MicrosoftActivitiesExtension, UiAutomationActivities. Example: --enabled-extensions MailActivities,MicrosoftActivitiesExtension |
–disabled-extensions |
Comma-separated list of extension names to disable. Available extensions will be dynamically populated based on discovered extensions. |
–disable-all-extensions |
Disable all extensions. This option is mutually exclusive with --enabled-extensions and --disabled-extensions. |
-uia-package-version |
The version of the UIAutomation activities package to use for migration. Defaults to version 25.10.20 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead. |
–mail-o365-package-version |
The version of the Microsoft Office 365 activities package to use for migration. Defaults to version 3.3.10 if not specified. The target version has to be higher than the default version. If the target version is lower, than the default version will be used instead. |
–config |
Specifies the path to a custom configuration JSON file. The configuration can be used to modify the default behavior of certain activities or assign constant values to properties that require user input during the migration. The configuration file should respect the following convention: {“{reserved-configuration-key}”: “{value}”,…“{path-to-workflow} > {activity-display-name}”: {“{property-name}”: “{property-value}”,},…} |
Special Notes
Currently the only {property-name}that can be assigned is Connection Id.
{reserved-configuration-key}represents activity specific behavior changes:
SaveOutlookMailMessage_IgnoreSaveAsType- If set totrue, the option will disable theSave as typecheck for unsupported types, so that the activity can be migrated regardless of theSave as typeoption.
* can be used as a wildcard to match anything. It can be used in both {path-to-workflow} and {activity-display-name}. Thus, multiple workflows or activities can be specified for the same collection of properties. When multiple entries are matched for the same workflow + activity tuple, only the last match will be used.
Bulk repository migration
The option analyzes or upgrades all projects in a folder, in bulk.
Command: <tool-install-dir>\UiPath.Upgrade.exe bulk
Usage: UiPath.Upgrade.exe bulk [options]
Options
| Option | Description |
|---|---|
-p --path ` (REQUIRED) |
Path to the repository/folder to analyze or upgrade. The migration will be performed for the projects in all sub-folders that contain a project.json file. |
-c, --command (REQUIRED) |
Command to run: analyze or upgrade |
-v, --verbose |
Enable verbose logging |
–orchestrator-url |
The full Orchestrator URL including organization name (e.g., https://cloud.uipath.com/defauauldore). By default, if no Orchestrator URL is specified, the connection information from Studio will be used. When specified, you must also provide credentials using either: - Personal access token (PAT) using --orchestrator-pat option, OR- External application id and secret using --orchestrator-application-id and --orchestrator-application-secret. |
–orchestrator-tenant |
The Orchestrator tenant name (defaults to ‘DefaultTenant’ if not specified) |
–orchestrator-pat |
Personal Access Token (PAT) for Orchestrator authentication, used to access Orchestrator library feeds. Create a personal access token, and add Orchestrator API access scope -OR.Execution.Read. See: Automation Suite - Personal Access TokensAlternative to this method is configuring an application id and secret, using --orchestrator-application-id and --orchestrator-application-secret. See information below. |
–orchestrator-application-id |
OAuth Application ID for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-secret to access Orchestrator library feeds. To obtain this, configure an external application in Orchestrator: 1) Go to External Applications, 2) Add Application, 3) Select ‘Confidential application’, 4) Add scope with ‘Application scope’ and select ‘OR.Execution.Read’ permission. See: Orchestrator - Managing external OAuth applications |
–orchestrator-application-secret |
OAuth application secret for Orchestrator authentication (alternative to PAT). Used with --orchestrator-application-id to access Orchestrator library feeds. This is generated when you create a confidential external application in Orchestrator. See: Orchestrator - Managing external OAuth applications |
–enabled-extensions |
Comma-separated list of extension names to enable. By default, all extensions are enabled. Available extensions: MailActivities, MicrosoftActivitiesExtension, UiAutomationActivities. Example: --enabled-extensions MailActivities,MicrosoftActivitiesExtension |
–disabled-extensions |
Comma-separated list of extension names to disable. Available extensions will be dynamically populated based on discovered extensions. |
–disable-all-extensions |
Disable all extensions. This option is mutually exclusive with --enabled-extensions and --disabled-extensions. |
-?, -h, --help |
-?, -h, --help |
Examples
UiPath.Upgrade.exe analyze -p C:\to-migrate\LegacyProcess -v
UiPath.Upgrade.exe upgrade -p C:\to-migrate\LegacyProcess -o C:\to-migrate\WindowsProcess --uia-package-version=25.10.20 -v
UiPath.Upgrade.exe upgrade --project-path=C:\to-migrate\LegacyProcess --config=C:\to-migrate\connection.json
UiPath.Upgrade.exe upgrade --project-path C:\to-migrate\LegacyProcess --output-path C:\to-migrate\WindowsProcess --uia-package-version=25.10.20 --verbose
UiPath.Upgrade.exe bulk -p C:\to-migrate -c analyze
The output from the upgrade tool is by default a SARIF report stored in the original project under a folder called .upgrade, and the migrated project will be available in the Output path.
Setting up Connection Id for Productivity Activities
The Connection Id is not populated during migration and it has to be manually set per workflow/activity in a custom config file. The config file can be passed to the migrator using the --config <config> command line argument.
For example, to specify the Connection Id property for Microsoft Office 365 activities the following example can be used:
{
"* > *": {
"ConnectionId": "00000000-0000-0000-0000-000000000001"
},
"*\\Projects\\MailMigration\\Main.xaml > Get *": {
"ConnectionId": "00000000-0000-0000-0000-000000000002"
},
"*\\Projects\\MailMigration\\* > Send Mail": {
"ConnectionId": "00000000-0000-0000-0000-000000000003"
}
}
In this case * > * matches anything and can be used as a fallback option when there are no matching entries below. *\\Projects\\MailMigration\\Main.xaml > Get * can match multiple activities that have the prefix Get while *\\Projects\\MailMigration\\ > Send Mail only matches a single activity.
Post-Migration UI Automation Application Scope Behavior
Most modern activities are required to operate within an application scope (Use Application/Browser activity). There are two types of application scopes encountered during migration:
1. Organically created scopes
These are created automatically when migrating from classic scoped activities such as Open Browser, Attach Browser, etc.
We do not optimize and do not plan to optimize these scopes to avoid altering the original intent and flow of the migrated workflow.
2. Synthetically generated scopes
These are generated to ensure the workflow compiles and runs correctly after migration.
The current optimization in this case: when we can deterministically confirm that two consecutive application scopes have the same properties (e.g. same selector, OCR engine), we merge them into a single application scope, keeping the original order of activities.
Limitations/Supported activities
UI Automation (click on each section to see the full list)
Known limitations
- The minimum version of the
UiPath.UIAutomation.Activitiespackage you can migrate to is25.10.20. - There are limitations for migrating certain properties of some activities, listed in the Supported activities table in the section above.
- The execution time for the migrated workflow, with modern UI Automation activities, might be longer than the original one, with classic activities.
Productivity (click on each section to see the full list)
Known limitations
- The minimum version of the
UiPath.MicrosoftOffice365.Activitiespackage you can migrate to is3.3.10.
Tool limitations
-
By default, the activity feeds configured via the
NuGet.configfile include Official, Local, and Marketplace feeds. -
Some activities may use dynamically generated types/assemblies (example: for Excel activities, we could have column names as properties in a dynamically generated type). A
.xamlfile with such a type will trigger the “Type not found” error.
Migration Best Practices
Pre-Migration Preparation
- Backup Everything
Always create a full backup of your projects before running any migration commands. - Update Studio & Packages
Ensure you’re using the latest UiPath Studio and activity packages supported by the migrator (e.g.,UiPath.UIAutomation.Activities >= 25.10.20andUiPath.MicrosoftOffice365.Activities >= 3.3.10). - Analyze Before Upgrade
Use theanalyzecommand first:
UiPath.Upgrade.exe analyze -p -v
This generates a SARIF report highlighting potential issues without making changes. - Check Dependencies & Feeds
Verify NuGet feeds (Official, Local, Marketplace) are correctly configured inNuGet.config.
Migration Execution
- Start with Single Project Migration
Test migration on one project using:
UiPath.Upgrade.exe upgrade -p -v
Validate the output before bulk migration. - Use Bulk Migration for Scale
For multiple projects:
UiPath.Upgrade.exe bulk -p -v
Ensure folder structure is clean and consistent. - Provide Config for Connection IDs
For Microsoft 365 activities, create a config file for ConnectionId and pass it via --config:
{
“* > *”: { “ConnectionId”: “00000000-0000-0000-0000-000000000001” }
}
Post-Migration Validation
- Review SARIF Report
Check.upgradefolder for migration report and address flagged issues. - Validate Application Scopes
Confirm that merged scopes behave as expected. Test workflows withUse Application/Browseractivities. - Run End-to-End Tests
Execute migrated workflows in a controlled environment before deploying to production.
Performance & Maintenance
- Optimize UIAutomation Selectors
After migration, review selectors for accuracy and stability. - Monitor Execution Time
Modern activities may run slower initially—optimize where possible. - Document Changes
Keep a record of migrated projects, versions, and applied configurations for audit and rollback purposes
UIAutomation Supported Activities
UIAutomation Source and Destination Activities
| Source activity | Destination activity(-ies) | Known limitations |
|---|---|---|
Activate (UiPath.Core.Activities.Activate) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
Attach Browser (UiPath.Core.Activities.BrowserScope) |
Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* If the SearchScope property is set, the migration is not performed.* If an expression is used for the BrowserType property, the migration is not performed. |
Attach Window (UiPath.Core.Activities.WindowScope) |
Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* If the SearchScope property is set, the migration is not performed. |
Call Transaction (UiPath.Core.Activities.SAP.CallTransaction) |
Call Transaction (UiPath.UIAutomationNext.Activities.NSAPCallTransaction) |
|
Check (UiPath.Core.Activities.Check) |
Check/Uncheck (UiPath.UIAutomationNext.Activities.NCheck) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Click (UiPath.Core.Activities.Click) |
Click (UiPath.UIAutomationNext.Activities.NClick) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.* A classic Click activity using a variable with a null value as the input element results in a click at screen coordinates (0, 0). In contrast, the modern Click activity throws a runtime error in this scenario. |
Click Image (UiPath.Core.Activities.ClickImage) |
Click (UiPath.UIAutomationNext.Activities.NClick) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Click OCR Text (UiPath.Core.Activities.ClickOCRText) |
Click (UiPath.UIAutomationNext.Activities.NClick) |
* If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine. * The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.* If any out argument property on the OCR engine is set, the migration is not performed. |
Click Picture on Screen (UiPath.Core.Activities.SAP.ClickPictureOnScreen) |
Click Picture on Screen (UiPath.UIAutomationNext.Activities.NSAPClickPictureOnScreen) |
|
Click Text (UiPath.Core.Activities.ClickText) |
Click (UiPath.UIAutomationNext.Activities.NClick) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.* If the classic activity has a browser element set as target, the migration is not performed. |
Click Toolbar Button (UiPath.Core.Activities.SAP.ClickToolbarButton) |
Click Toolbar Button (UiPath.UIAutomationNext.Activities.NSAPClickToolbarButton) |
|
Close Application (UiPath.Core.Activities.CloseApplication) |
Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.* After migration, the Use Application/Browser activity can close applications in more scenarios where Close Application would throw exceptions (e.g. SelectorNotFoundException when app is minimized, ArgumentException when the app is already closed). |
Close Tab (UiPath.Core.Activities.CloseTab) |
Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser) |
* If the activity is outside a scope and does not use an input element, the migration is not performed. |
Close Window (UiPath.Core.Activities.CloseWindow) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
Element Exists (UiPath.Core.Activities.UiElementExists) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
|
Expand ALV Hierarchical Table (UiPath.Core.Activities.SAP.ExpandALVHierarchicalTable) |
Expand ALV Hierarchical Table (UiPath.UIAutomationNext.Activities.NSAPExpandALVHierarchicalTable) |
|
Expand ALV Tree (UiPath.Core.Activities.SAP.ExpandALVTree) |
Expand ALV Tree (UiPath.UIAutomationNext.Activities.NSAPExpandALVTree) |
|
Expand Tree (UiPath.Core.Activities.SAP.ExpandTree) |
Expand Tree (UiPath.UIAutomationNext.Activities.NSAPExpandTree) |
|
Extract Structured Data (UiPath.Core.Activities.ExtractData) |
Extract Data (UiPath.UIAutomationNext.Activities.NExtractData) |
* When Continue on error is set to False and Target - Next button is configured for extracting data from multiple pages, the classic Extract Structured Data activity failed after reaching the last page. In contrast, the modern Extract Data activity continues execution. |
Find Children (UiPath.Core.Activities.FindChildren) |
Find Elements (UiPath.CUIAutomationNext.Activities.NFindElements) |
|
Find Element (UiPath.Core.Activities.WaitUiElementAppear) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the WaitActive property is set, the migration is not performed.* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
Find Image (UiPath.Core.Activities.WaitImageAppear) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
Find OCR Text Position (UiPath.Core.Activities.FindOCRText) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine. * The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.* If any out argument property on the OCR engine is set, the migration is not performed. * If the classic activity has a browser element set as target, the migration is not performed. * After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
Find Text Position (UiPath.Core.Activities.FindText) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the classic activity has a browser element set as target, the migration is not performed. * After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
Get Attribute (UiPath.Core.Activities.GetAttribute) |
Get Attribute (UiPath.UIAutomationNext.Activities.NGetAttribute) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Get From Clipboard (UiPath.Core.Activities.GetFromClipboard) |
Get Clipboard (UiPath.UIAutomationNext.Activities.NGetFromClipboard) |
|
Get Full Text (UiPath.Core.Activities.GetFullText) |
Get Text (UiPath.UIAutomationNext.Activities.NGetText) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Get OCR Text (UiPath.Core.Activities.GetOCRText) |
Get Text (UiPath.UIAutomationNext.Activities.NGetText)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine. * The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.* If any out argument property on the OCR engine is set, the migration is not performed. |
Get Position (UiPath.Core.Activities.GetPosition) |
Get Attribute (UiPath.UIAutomationNext.Activities.NGetAttribute) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Get Text (UiPath.Core.Activities.GetValue) |
Get Text (UiPath.UIAutomationNext.Activities.NGetText) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Get Visible Text (UiPath.Core.Activities.GetVisibleText) |
Get Text (UiPath.UIAutomationNext.Activities.NGetText) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.*If the classic activity has a browser element set as a target, the migration is not performed. |
Go Back (UiPath.Core.Activities.GoBack) |
Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser) |
|
Go Forward (UiPath.Core.Activities.GoForward) |
Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser) |
|
Go Home (UiPath.Core.Activities.GoHome) |
Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser) |
|
Hide Window (UiPath.Core.Activities.HideWindow) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
Highlight (UiPath.Core.Activities.Highlight) |
Highlight (UiPath.UIAutomationNext.Activities.NHighlight) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Hover (UiPath.Core.Activities.Hover) |
Hover (UiPath.UIAutomationNext.Activities.NHover) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Hover Image (UiPath.Core.Activities.HoverImage) |
Hover (UiPath.UIAutomationNext.Activities.NHover)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Hover OCR Text (UiPath.Core.Activities.HoverOCRText) |
Hover (UiPath.UIAutomationNext.Activities.NHover)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine. * The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.* If any out argument property on the OCR engine is set, the migration is not performed. |
Hover Text (UiPath.Core.Activities.HoverText) |
Hover (UiPath.UIAutomationNext.Activities.NHover) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.* If the classic activity has a browser element set as target, the migration is not performed. |
Image Exists (UiPath.Core.Activities.ImageFound) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Inject Js Script (UiPath.Core.Activities.InjectJsScript) |
Inject Js Script (UiPath.UIAutomationNext.Activities.NInjectJsScript) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Maximize Window (UiPath.Core.Activities.MaximizeWindow) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
Minimize Window (UiPath.Core.Activities.MinimizeWindow) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
Move Window (UiPath.Core.Activities.MoveWindow) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
Navigate To (UiPath.Core.Activities.NavigateTo) |
Go To Url (UiPath.UIAutomationNext.Activities.NGoToUrl) |
|
OCR Text Exists (UiPath.Core.Activities.OCRTextExists) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState)Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* If the activity is inside a scope that uses a different OCR engine, an application card is automatically added over the migrated activity to switch the OCR engine. * The activity is migrated even if the Target or Input Element is not set, as long as it has a scope parent.* If any out argument property on the OCR engine is set, the migration is not performed. * After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
On Element Appear (UiPath.Core.Activities.OnUiElementAppear) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the RepeatForever property is set to an expression or true, the migration is not performed. * If the WaitActive property is set, the migration is not performed. * If the WaitVisible property is set to an expression or true without a target, the migration is not performed.* If the Target property is not set and the activity is outside a scope, the migration is not performed.* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
On Element Vanish (UiPath.Core.Activities.OnUiElementVanish) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the RepeatForever property is set to an expression or true, the migration is not performed. * If the WaitNotActive property is set, migration is not performed. * If the WaitNotVisible property is set to an expression or true without a target, the migration is not performed.* If the Target property is not set and the activity is outside a scope, the migration is not performed.* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
On Image Appear (UiPath.Core.Activities.OnImageAppear) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
On Image Vanish (UiPath.Core.Activities.OnImageVanish) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
Open Application (UiPath.Core.Activities.OpenApplication) |
Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
|
Open Browser (UiPath.Core.Activities.OpenBrowser) |
Use Application/Browser (UiPath.UIAutomationNext.Activities.NApplicationCard) |
* The property NewSession is obsolete and it will not be migrated.* If the BrowserType property was not set, it will be migrated to IE, even if the project setting UI Automation Classic > Browser has been configured for another browser. |
Read Status Bar (UiPath.Core.Activities.SAP.ReadStatusbar) |
Read Status Bar (UiPath.UIAutomationNext.Activities.NSAPReadStatusbar) |
|
Refresh Browser (UiPath.Core.Activities.RefreshBrowser) |
Navigate Browser (UiPath.UIAutomationNext.Activities.NNavigateBrowser) |
|
Restore Window (UiPath.Core.Activities.RestoreWindow) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
SAP Login (UiPath.Core.Activities.SAP.Login) |
SAP Login (UiPath.UIAutomationNext.Activities.NSAPLogin) |
|
SAP Logon (UiPath.Core.Activities.SAP.Logon) |
SAP Logon (UiPath.UIAutomationNext.Activities.NSAPLogon) |
|
Select Dates in Calendar (UiPath.Core.Activities.SAP.SelectDatesInCalendar) |
Select Dates in Calendar (UiPath.UIAutomationNext.Activities.NSAPSelectDatesInCalendar) |
|
Select Item (UiPath.Core.Activities.SelectItem) |
Select Item (UiPath.UIAutomationNext.Activities.NSelectItem) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Select Menu Item (UiPath.Core.Activities.SAP.SelectMenuItem) |
Select Menu Item (UiPath.UIAutomationNext.Activities.NSAPSelectMenuItem)OR Select Item ( UiPath.UIAutomationNext.Activities.NSelectItem) |
* If the classic activity was incorrectly used to target elements other than windows, a simple modern Select Item activity is created. |
Send Hotkey (UiPath.Core.Activities.SendHotkey) |
Keyboard Shortcuts (UiPath.UIAutomationNext.Activities.NKeyboardShortcuts)OR Type Into ( UiPath.UIAutomationNext.Activities.NTypeInto) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed.* If an empty field or an expression is used then it will be migrated to a modern Type Into activity. |
Set Focus (UiPath.Core.Activities.SetFocus) |
Set Focus (UiPath.UIAutomationNext.Activities.NSetFocus) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Set Text (UiPath.Core.Activities.SetValue) |
Set Text (UiPath.UIAutomationNext.Activities.NSetText) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Set To Clipboard (UiPath.Core.Activities.SetToClipboard) |
Set Clipboard (UiPath.UIAutomationNext.Activities.NSetToClipboard) |
|
Show Window (UiPath.Core.Activities.ShowWindow) |
Window Operation (UiPath.UIAutomationNext.Activities.NWindowOperation) |
|
Table Cell Scope (UiPath.Core.Activities.CellScope) |
Table Cell Scope (UiPath.UIAutomationNext.Activities.NTableCellScope) |
|
Take Screenshot (UiPath.Core.Activities.TakeScreenshot) |
Take Screenshot (UiPath.UIAutomationNext.Activities.NTakeScreenshot) |
|
Text Exists (UiPath.Core.Activities.TextExists) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the classic activity has a browser element set as target, the migration is not performed. * After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
Type Into (UiPath.Core.Activities.TypeInto) |
Type Into (UiPath.UIAutomationNext.Activities.NTypeInto) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Type Secure Text (UiPath.Core.Activities.TypeSecureText) |
Type Into (UiPath.UIAutomationNext.Activities.NTypeInto) |
* If the Target property is not set and the activity is outside a scope, the migration is not performed. |
Wait Element Vanish (UiPath.Core.Activities.WaitUiElementVanish) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* If the WaitNotActive property is set, the migration is not performed.* If the WaitNotVisible property is set to an expression or true without a target, the migration is not performed.* If the Target property is not set and the activity is outside a scope, the migration is not performed.* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
Wait Image Vanish (UiPath.Core.Activities.WaitImageVanish) |
Check App State (UiPath.UIAutomationNext.Activities.NCheckAppState) |
* After migration, the modern Check App State activity will not throw an error when the timeout is reached, the flow continues to the Target Does not Appear branch. |
UIAutomation Unsupported Activities
UIAutomation Unsupported Activities
| Classic activity name | Classic activity type |
|---|---|
| Anchor Base | UiPath.Core.Activities.AnchorBase |
| Block User Input | UiPath.Core.Activities.BlockUserInput |
| Callout | UiPath.Core.Activities.CalloutScope |
| Click Image Trigger | UiPath.Core.Activities.ClickImageTriggerV2 |
| Click Trigger | UiPath.Core.Activities.ClickTriggerV2 |
| Context Aware Anchor | UiPath.Core.Activities.AnchorContextAware |
| Copy Selected Text | UiPath.Core.Activities.CopySelectedText |
| CV Check | UiPath.CV.Activities.CvCheckWithDescriptor |
| CV Click | UiPath.CV.Activities.CvClickWithDescriptor |
| CV Dropdown Select | UiPath.CV.Activities.CvSelectItemWithDescriptor |
| CV Element Exists | UiPath.CV.Activities.CvElementExistsWithDescriptor |
| CV Extract Table | UiPath.CV.Activities.CvExtractDataTableWithDescriptor |
| CV Get Text | UiPath.CV.Activities.CvGetTextWithDescriptor |
| CV Highlight | UiPath.CV.Activities.CvHighlightWithDescriptor |
| CV Hover | UiPath.CV.Activities.CvHoverWithDescriptor |
| CV Refresh | UiPath.CV.Activities.CvRefresh |
| CV Screen Scope | UiPath.CV.Activities.CvScope |
| CV Type Into | UiPath.CV.Activities.CvTypeIntoWithDescriptor |
| Double Click | UiPath.Core.Activities.Click |
| Double Click Image | UiPath.Core.Activities.ClickImage |
| Double Click OCR Text | UiPath.Core.Activities.ClickOCRText |
| Double Click Text | UiPath.Core.Activities.ClickText |
| Element Attribute Change Trigger | UiPath.Core.Activities.ElementAttributeChangeTrigger |
| Element Scope | UiPath.Core.Activities.ElementScope |
| Element State Change Trigger | UiPath.Core.Activities.ElementStateChangeTrigger |
| Export UI Tree | UiPath.Core.Activities.ExportUITree |
| Find Image Matches | UiPath.Core.Activities.FindImageMatches |
| Find Relative Element | UiPath.Core.Activities.FindRelative |
| Get Active Window | UiPath.Core.Activities.GetActiveWindow |
| Get Ancestor | UiPath.Core.Activities.GetAncestor |
| Get Event Info | UiPath.Core.Activities.GetEventInfo |
| Get Password | UiPath.Core.Activities.GetPassword |
| Get Source Element | UiPath.Core.Activities.GetSourceElementV2 |
| Google Cloud Vision OCR | UiPath.Core.Activities.GoogleCloudOCR |
| Hotkey Trigger | UiPath.Core.Activities.HotkeyTriggerV2 |
| Indicate On Screen | UiPath.Core.Activities.IndicateOnScreen |
| Inject .NET Code | UiPath.Core.Activities.InjectDotNetCode |
| Invoke ActiveX Method | UiPath.Core.Activities.InvokeActiveX |
| Key Press Trigger | UiPath.Core.Activities.KeyPressTriggerV2 |
| Load Image | UiPath.Core.Activities.LoadImage |
| Microsoft Azure Computer Vision OCR | UiPath.Core.Activities.MicrosoftAzureComputerVisionOCR |
| Microsoft OCR | UiPath.Core.Activities.MicrosoftOCR |
| Microsoft Project Oxford Online OCR | UiPath.Core.Activities.MicrosoftCloudOCR |
| Monitor Events | UiPath.Core.Activities.MonitorEvents |
| Mouse Trigger | UiPath.Core.Activities.MouseTriggerV2 |
| Replay User Event | UiPath.Core.Activities.ReplayUserEventV2 |
| SAP Session Attributes Change Trigger | UiPath.Core.Activities.SAPSessionTrigger |
| Save Image | UiPath.Core.Activities.SaveImage |
| Select Multiple Items | UiPath.Core.Activities.SelectMultipleItems |
| Set Clipping Region | UiPath.Core.Activities.SetClippingRegion |
| Set Web Attribute | UiPath.Core.Activities.SetWebAttribute |
| Start Process | UiPath.Core.Activities.StartProcess |
| System Trigger | UiPath.Core.Activities.SystemTriggerV2 |
| Tesseract OCR | UiPath.Core.Activities.GoogleOCR |
| Tooltip | UiPath.Core.Activities.Callout |
| Use Foreground | UiPath.Core.Activities.UseForegroundScope |
| Wait Attribute | UiPath.Core.Activities.WaitAttribute |
Mail Supported Activities
Mail Source and Destination Activities
| Source Activity | Destination Activity | Notes |
|---|---|---|
| Send Outlook Desktop Mail Message (SendOutlookMail) | Send Outlook Desktop Mail Message (SendOutlookMail) | By default the activity is migrated to SendMailConnections. If Mail message field from Forwardcategory is populated, the activity will be migrated to GetEmailByIdConnections + ForwardEmailConnections. The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. When both source attachments are set (File path attachments collection + File path attachments), a new expression is created that unifies both entries in the Attachments(s) property of the migrated activity. Otherwise, only their counterpart migrated property is populated. |
| Get Outlook Desktop Mail Messages (GetOutlookMailMessages) | GetEmailListConnections or GetEmailListConnections + Assign | Filtering options are currently unsupported and have to be manually migrated. If the output of the original activity is set to a variable, an Assign activity will be appended. The Assign activity sets the original output variable from the source activity (List<MailMessage) to the output of the migrated activity (List). This is done in order to preserve the original behavior of the workflow. Therefore, non-migratable activities that consume the original source activity output (List) will still work as expected without requiring input modification. |
| Mark Outlook Desktop Mail As Read/Unread (MarkOutlookMailAsRead) | GetEmailByIdConnections + MarkAsReadUnreadConnections | The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. |
| Move Outlook Desktop Mail Message (MoveOutlookMessage) | GetEmailByIdConnections + MoveEmailConnections | The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. |
| Delete Outlook Desktop Mail Message (DeleteOutlookMailMessage) | GetEmailByIdConnections + DeleteEmailConnections | The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. |
| Reply To Outlook Desktop Mail Message (ReplyToOutlookMailMessage) | GetEmailByIdConnections + ReplyToEmailConnections | The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. |
| Set Outlook Desktop Mail Categories (SetOutlookMailCategories) | GetEmailByIdConnections + SetEmailCategoriesConnections | The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. |
| Save Outlook Desktop Mail Message (SaveOutlookMailMessage) | GetEmailByIdConnections + DownloadEmailConnections | The GetEmailByIdConnections is used to convert from MailMessage to Office365Message by using the MailMessage id. |
Mail Unsupported Activities
Mail Unsupported Activities
| Source Activity | Destination Activity | Notes |
|---|---|---|
| Outlook Desktop Mail Messages Trigger (OutlookMailMessagesTrigger) | Unsupported | The activity is skipped during migration. The Outlook Desktop Mail Messages Trigger cannot be automatically migrated since there is no counter part trigger activity that retains the full behavior of the old trigger. Therefore, the migration has to be done manually after the tool has finished the migration of other supported activities. The trigger has to be manually replaced with 1 of the available triggers for O365 package: 1. Email Received - Triggers when an email is received. 2. Email Sent - Triggers when an email is sent (can apply various filters to the trigger in order to filter out unwanted sent emails). Unfortunately, there is no O365 trigger that monitors a certain mail folder like the old Mail trigger did. The closest trigger option for this behavior is the Email Received from O365 package. |

