Working with Migration Output in Power Automate Desktop (PAD)

Updated by Tony Higgins

This article describes some of the more commonly asked aspects of the Power Automated Desktop flows generated by Blueprint migrated from other RPA tools.

Generated Subflows

When migrating from another RPA platform to Power Automate Desktop, Blueprint will create various subflows if needed based on the contents of the migrated bot

These Subflows will be generated for every Migrated Flow :
  • Init_Variables - All variables declared in your source RPA file will be declared within this subflow:

One or more of these Subflows will be generated depending on content of the Migrated Flow:

These subflows will be created if the corresponding flag within the error handling of the source RPA tool was enabled:

  • Err_TakeScreenshot - Captures and saves a screenshot at time of error
  • Err_LogToFile - Logs capture error and current date time to provided file path
  • Err_SendEmail - Sends an email to provided users
  • Err_DumpVariables - Dumps values of all variables into a dictionary variable

UiPath to PAD Common Items

  1. VARIABLES
    1. UiPath Global Variables
      Setting these variables will help improve migration quality.

      Variable

      Behavior

      How to Reconcile in PAD

      %BasePath%

      In UiPath, relative file or folder paths are relative to the main xaml file. In PAD, relative file or folder paths are relative to PAD installation folder.

      Set %BasePath% where specific project files will be located after migration

      %SPECIAL_FOLDER_X%

      Possible Special Folders:

      ApplicationData, CommonApplicationData, LocalApplicationData, Cookies, Favorites, History, InternetCache, Programs, MyMusic, MyPictures, Recent, SendTo, StartMenu, Startup, System, Templates, DesktopDirectory, Personal, ProgramFiles, CommonProgramFiles

      Set %SPECIAL_FOLDER_X% where specific folder will be located after migration

Automation Anywhere v11 to PAD Common Items

  1. VARIABLES
    1. AA Global Variables
      Global Variables do not exist in PAD. User will need to find a way to recreate the necessary global variables to call them.
      Common examples include:

      AA System Variable

      Behavior

      How to Reconcile in PAD

      AAApplicationPath

      Returns product application Path

      User to define variable with the path in the inti_Variables subflow

      AATaskName

      Returns complete path and name of the task being executed

      In each flow/subflow where AATaskName is used, user to define variable with the path and name of the current flow/subflow

      Millisecond

      Returns System Millisecond

      PAD does not support getting the current time to the millisecond. User will need to determine if milliseconds is needed.

      If yes, user will need to analyze the use case and refactor

      If no, user can simply delete

  2. NON-COMPLIANT COMMANDS
    Depending on your organization's security policies, some users may not be allowed to utilize certain commands, such as 'run scripts' or 'send email', due to compliance issues. If not, they will be brought over as a TODO comment (see below) that must be manually configured and completed.
    1. Send Email
    2. Run VBScript
    3. Any command involving sensitive/encrypted text
  3. COMMENTS
    1. SRC
      SRC comments describe what the command originally was in AA. Use as a reference and review code that follows and check for correctness.
    2. TODO
      TODO comments describe what the user needs to do in various situations. It may be reviewing the next line(s) of code, adding an command that couldn’t be migrated, or asking for verification that migrated step looks correct.
      Common examples include:

      TODO

      How to Reconcile

      NO MATCH FOUND FOR "" IN EXTERNAL FLOW MAPPING TEMPLATE FOR DESKTOP CALL

      Run Logic action that is calling a Metabot has not been mapped using the Metabot mapping sheet. User will need to map the metabot to an existing PAD Desktop Flow

      Run Logic

      Run Logic action that is calling a Metabot is not supported in PAD and the user has not uploaded a Metabot Mapping sheet yet

      Run Task

      A task was missing the export job from Blueprint

      Please check the paths

      Please check that the variablized file path is correct

      Migration of "" is unclear. Below are two possible interpretations, please delete what is unnecessary.

      Blueprint cannot tell what expressions containing variables are attempting to do, whether it is string manipulation or a calculation.

      Removed sensitive password text, please complete

      Provide the missing credentials password

      Update Email Server settings

      Provide the missing credentials password

      End XML Session

      This action doesn’t exist in PAD, user can delete comment

      Run Stored Procedure

      Use an 'Execute SQL Statement' action

Blue Prism to PAD Error Handling

  1. BP to PAD Local Exceptions

Example from BP

Example Migration in PAD

The purpose of the Recover stage in Blue Prism is to catch errors within the Block it's a part of. For Instance, in the BP screenshot all the errors are occur within the Block are considered "local" and are caught by Recover stage.

This screenshot for PAD migration shows the use of On Block Error action, which is equivalent to Try and Catch Block.

If an error occurs within the On Block Error, we trigger similar error handling to what was set up in Blue Prism.

The error details are recorded in the _LastError Variable.

We Use Stop Flow action instead of Convert text to number: 1/0 when Throwing or Rethrowing an error.

If no error is found, or the error has been handled, then the flow will resume. The action which is causing the flow to resume back in Blue Prism is called "Resume". In PAD, this Resume resets the On Error variable to False and resumes the flow.

  1. BP to PAD Global Exceptions

Example from BP

Example Migration in PAD

In Blue Prism, if a Recover stage is placed outside of a Block, it will function as global error handling. The purpose of Global Recovery is to catch any error that has occured outside of blocks. For Instance, any error found outside the block 1 could be considered under Global Recovery.

_LastError variable is used to store the error details.

We Use Stop Flow action instead of Convert text to number: 1/0 when Throwing or Rethrowing an error.

If no error is found, or the error has been handled, then the flow will resume. The action which is causing the flow to resume back in Blue Prism is called "Resume". In PAD, this Resume resets the On Error variable to False and resumes the flow.

  1. BP to PAD Multi Entry and Multi Exists

Example from BP

Example Migration in PAD

In Blue Prism, processes can be created with error blocks that have multiple entries and exit points. To make an equivalent in PAD, we need to flatten this down to a linear structure with the use of Set Variables, Ifs, and Go Tos.

For Multiple Entries into an On Block Error, we create the variable Entry Destination and use it in If statements to determine the entry path.

For Instance: In the below example, we are using the Entry Destination variable in If and elseif to determine what action/path will run next.

Similarly, if there are multiple exit points, we create the variable Exit Destination to decide the exit path.

For Instance: In the below example, we are using If and elseif to check if the Exit Destination variable to determine what action/path will run next.

  1. BP to PAD Exception Type and Details

Example from BP

Example Migration in PAD

Preserve Current Exception

In Blue Prism, users can manually throw an exception with the Exception stage. Within it, there is the option to preserve the current exception type by selecting the Preserve Exception option, which will get whatever the the last exception message was and where it occurred on the page.

In PAD, this is migrated as an If statement. The _LastError variable will retrieve the last exception details (saved in _Lasterror).

In the screenshot, OnError is a variable set to False to retrieve the last exception message.

However, if the user chooses to log the exception in Blue Prism with custom details and the Preserve Type unchecked, the custom Type and Details will also be migrated.


How did we do?