Alu.cardRPA → readable documentation
← Gallery
UiPathPublic sampleUiPath Studio 20.10.4.0

OrchestratorManager

UiPath-Services/OrchestratorManagerOrchestratorManager.zip

  • Calls into other assets720
  • Decisions762
  • Loops184
  • Error handling462
  • Other steps2679
assets
224
steps
4807
notes
975
source
173k
ExcelCSVHTTP / web serviceActive DirectoryScripting / custom code
SessionRestored from cache — 0 tokens spent
in
192k
out
40k
from cache
485k
cost
$2.39
  1. Read the project files

    Parsed OrchestratorManager (UiPath).

    • 224 assets — Main.xaml, Entities/Folders/MigrateClassicToModern/MigrateProcess.xaml, Entities/Folders/MigrateClassicToModern/MigrateProcessesToDifferentFolders.xaml, Entities/Folders/MigrateClassicToModern/MigrateProcessesToSameFolder.xaml, +56 more
    • 4807 steps, 762 decision points, 184 loops, 462 error-handling steps
    • 975 steps carry the original developer's notes
    • Systems: Excel, CSV, HTTP / web service, Active Directory, Scripting / custom code

    Reading a 173.1k-token digest — 60 assets in full detail.

  2. Work out what the process actually does

    90.4s7.5k out
    Purpose
    Gives UiPath Orchestrator administrators a spreadsheet-driven console for bulk administration: list, create, edit, delete and reconfigure Orchestrator entities (Users, Robots, Machines, Assets, Environments, Processes, Organization Units, Folders, Queues, Packages, Libraries, Triggers, Jobs) in volume rather than one-by-one through the web UI, with per-row results written back to Excel.
    Trigger
    Manual, attended launch by an administrator. Main.xaml opens an authentication form, then a control panel where the operator picks an entity and an operation; the tool loops until the operator cancels.
    Frequency
    not determinable from source — operator-driven, ad hoc; the control panel loop runs repeatedly within a single session until 'cancel' is chosen
    Systems
    1. UiPath Orchestrator REST/OData API (on-premises or Automation Cloud)
      Role: All entity reads and writes: authentication token, /odata/Assets, /odata/Releases (Processes), /odata/Users, Machines, Robots, Environments, Folders, Queues, Packages/Libraries, Triggers, /api/DirectoryService/GetDomains
    2. Microsoft Excel
      Role: Configuration file (Config.xlsx: Settings + Advanced Settings sheets), Translation.xlsx (Localization sheet), and one workbook per entity in the workbooks folder — read the operator's request rows, write retrieved data and per-row Result
    3. Windows Credential Manager
      Role: Store/retrieve saved Orchestrator credentials (targets keyed by credential name plus account/tenant or URL/tenant)
    4. Local file system
      Role: Entity workbook folder (default Desktop\OrchestratorManagerWorkbooks), Logs subfolder, HTML form templates, package download/upload folders, exported queue-item CSVs
    5. HTML custom-input forms (rendered by the automation)
      Role: Authentication panel, control panel (entity + operation picker), Organization Unit/Folder picker, folder-migration confirmation
    6. Active Directory / Directory Service
      Role: Resolve domain and directory users/groups when assigning folder users (GetDomain.xaml, SetFolderUser_DirectoryUserOrGroup.xaml)
    Inputs
    • Config.xlsx — Settings and Advanced Settings sheets (OrchestratorType, OnPremisesOrchestratorURL, OnPremisesTenantName, CloudAccountName, CloudTenantName, OnPremisesOrchestratorVersion, EntitiesWorkbooksFolderPath, MaximumRequestsThreshold, RequestBatchSize, RequestInterval, MakeHTTPRequestNumberOfRetries/RetryInterval, Enable202004FolderMigration, PackagesMinimumDependenciesVersions)
    • Translation.xlsx — Localization sheet, one column per language code (EN, JA); language taken from OS UI culture unless overridden
    • Operator credentials entered on the authentication form: on-prem username/password or tenant, or cloud Client ID/User Key (or App ID/App Secret for OAuth client_credentials); optionally reused from Windows Credential Manager
    • Per-entity Excel workbooks (Assets.xlsx, Users.xlsx, Robots.xlsx, Machines.xlsx, Environments.xlsx, Processes.xlsx, Packages/Libraries, Queues, Folders, Triggers…) with one sheet per operation (Get, Create, Create Credential, Edit, Edit Credential, Delete, Add/Remove …, Update/Rollback package version, Download/Upload, Link or Unlink, Migrate, Edit User Mappings)
    • Package/library .nupkg files for upload; CSV/queue-item files for queue upload
    • Operator selections on the forms: entity, operation, target Organization Units/Folders
    Outputs
    • Entity workbook 'Get' sheets refreshed with current Orchestrator data (previous rows cleared A2:Z before the request)
    • A Result value written to each processed row (default success text from OperationDefaultResult, otherwise the exception message)
    • Newly created entity IDs written back (e.g. AssetID, ProcessID, RobotID, MachineID columns)
    • Updated Config.xlsx values when the operator changes Orchestrator type, URL, tenant, account name, version or workbooks folder
    • Downloaded package/library .nupkg files and package 'referenced entities' files at operator-specified paths
    • Exported queue items; uploaded packages/queue items into Orchestrator
    • Trace/Warn/Error log messages and a Logs folder under the workbooks folder; on-screen status via Report Status ('Entity - Operation: n / total')
    Stages
    1. 1. Load configuration and localisation
      Summary: Read Config.xlsx (Settings, then Advanced Settings merged in) and Translation.xlsx Localization sheet; pick the language column from the OS UI culture (JA branch, otherwise EN default), rename it to 'Value' and merge, then load every Name/Value pair into an in-memory settings dictionary. Retried 3 times at 1 s; if the file cannot be read the operator is told to close the configuration file. If no workbooks folder is configured, default to Desktop\OrchestratorManagerWorkbooks.
      Assets: Main.xaml, Core/InitializeConfigurations.xaml
    2. 2. Authenticate to Orchestrator
      Summary: Build and display the HTML authentication panel (pre-filled with last-used Orchestrator type, URL, tenant, account, version 2018.4–2022.04, and a 'use saved credential' checkbox if a matching Windows Credential Manager entry exists). Loop until the operator cancels or a token is obtained. Any changed setting (type, tenant, URL, account, version, workbooks folder) is written back into Config.xlsx. Cloud: POST client_credentials (OAuth, wide OR.* scope list) or refresh_token, then build OrchestratorURL as AutomationCloudURL/account/tenant. On-prem: POST tenancyName/usernameOrEmailAddress/password, or OAuth. HTTP 200 stores the bearer token; anything else logs and shows 'Authentication failed' and re-prompts. Optionally saves the credential.
      Assets: Core/Authentication/Authenticate.xaml, Core/Authentication/GetAuthenticationData.xaml, Core/Forms/AuthenticationPanelBuilder.xaml, Core/Authentication/Authenticate_Cloud.xaml, Core/Authentication/MakeAuthenticationRequest_Cloud.xaml, Core/Authentication/Authenticate_OnPremises.xaml, Core/Authentication/MakeAuthenticationRequest_OnPremises.xaml, Common/UpdateConfigurationFile.xaml
    3. 3. Prepare the entity workbooks
      Summary: Create the workbooks folder and its Logs subfolder if missing, then copy any missing *.xlsx template from the language-specific templates folder into the operator's workbooks folder (never overwriting an existing workbook, so operator data is preserved).
      Assets: Core/InitializeEntitiesWorkbooks.xaml
    4. 4. Ask what to do (control panel loop)
      Summary: Build and show the control panel form listing entities (Asset, User, Machine, Robot, Environment, Process, Organization Unit, Folder, Queue, Package, Library, Trigger, Job) and operations (Get, Get Credential, Create, Create Credential, Edit, Edit Credential, Delete, Add/Remove environment robots, Add/Remove user OUs, Add/Remove user roles, Update to latest / rollback / update to specified package version, Download/Upload queue items, Download/Upload package or library, Get package referenced entities, Get folders' users, Assign/Unassign folder user, Add/Remove folder user roles, Migrate classic→modern, Enable/Disable trigger, Installed robots, Assign/Unassign folder machine, Link or Unlink, Edit user mappings). Options that depend on Orchestrator version are hidden for on-prem (e.g. Organization Units disappear from 2019.10+). Actions: 'submit' runs the operation, 'openWorkbook' opens that entity's workbook in Excel for editing, 'cancel' ends the session. Selections are remembered for the next iteration.
      Assets: Core/PerformOperationOnEntity.xaml, Core/GetEntityAndOperation.xaml, Core/Forms/ControlPanelBuilder.xaml
    5. 5. Route to the entity manager
      Summary: Dispatch the chosen entity to its manager workflow (Machine, Asset, User, Robot, Environment, Process, Organization Unit, Folder, Queue, Package, Library, Trigger, Job); Packages and Libraries share one manager, differing only in workbook and API endpoint. Unsupported entity/operation combinations log a warning and show a message box.
      Assets: Core/EntityManager.xaml, Entities/*/...Manager.xaml
    6. 6. Read the operator's request rows from the workbook
      Summary: Open the entity workbook (workbooks folder + the entity's configured file name), read the sheet named after the operation, and rename its localised column headers to canonical names (via AssignColumnNames or explicit index-to-name assignments) so rows can be addressed by name. Select only 'unprocessed' rows — those with an empty Result column but at least one other populated cell — so a re-run skips already-completed rows.
      Assets: Common/AssignColumnNames.xaml, Entities/Assets/AssetManager.xaml, Entities/Users/UserManager.xaml, Entities/Robots/RobotManager.xaml, Entities/Processes/ProcessManager.xaml, Entities/Machines/MachineManager.xaml, Entities/Environments/EnvironmentManager.xaml, Entities/PackagesLibraries/PackageLibraryManager.xaml
    7. 7. Guard against oversized bulk runs / choose scope
      Summary: If the number of planned requests exceeds MaximumRequestsThreshold, show a Yes/No confirmation; 'No' raises an OperationCanceledException that aborts the operation cleanly. For read (Get) operations on folder-scoped entities, first prompt the operator to select the Organization Units/Folders to cover; Packages additionally offer a 'Tenant' option when folder-level packages are supported (cloud, or on-prem ≥ 2020.10).
      Assets: Common/ConfirmNumerousRequests.xaml, Common/PromptUserForOUFolders.xaml, Core/Forms/OUFoldersPanelBuilder.xaml, Common/GetOUFolderData.xaml
    8. 8. Pre-fetch reference data once per batch
      Summary: Before looping rows, retrieve the current state of the entities named in the sheet — folders/OUs, assets, robots, users, machines, environments, processes, roles, packages — filtered to just the names/IDs present, so each row can be validated and resolved locally instead of issuing extra calls. OData filters are built with the IN operator (cloud / on-prem ≥ 2020.10) or as OR'd equality conditions capped at ~10 for older versions; long filters are split across several GET requests to stay under URL length limits, and paged results are merged.
      Assets: Common/GetOUFolderData.xaml, Common/ConstructODataFilter.xaml, Common/ConstructODataFilter_Orchestrator202010OrNewer.xaml, Common/ConstructODataFilter_Orchestrator202004OrOlder.xaml, Common/MakeGetRequest.xaml, Common/MakeGetRequests.xaml, Entities/Assets/GetAssetsData.xaml, Entities/Robots/GetRobotsData.xaml, Entities/Users/GetUsersData.xaml, Entities/Machines/GetMachinesData.xaml, Entities/Processes/GetProcessesData.xaml, Entities/Roles/GetRolesData.xaml, Entities/PackagesLibraries/GetPackagesLibrariesData.xaml
    9. 9. Process each row and call Orchestrator
      Summary: For each unprocessed row (assets are grouped by folder + asset name so per-robot/per-user values of one asset are handled together), validate inputs, resolve names to IDs from the cached data, build the JSON body and call the API through the common HTTP wrapper: create asset POST /odata/Assets, edit PUT /odata/Assets(id), delete DELETE /odata/Assets(id); processes are created/deleted via /odata/Releases (ProcessKey = package name, ProcessVersion = package version, default name PackageName_EnvironmentName, no Environment for modern folders). Every call carries the folder id as the X-UIPATH-OrganizationUnitId header unless the id is 0. Progress is reported as 'Entity - Operation: n / total'.
      Assets: Common/MakeHTTPRequest.xaml, Entities/Assets/CreateAsset.xaml, Entities/Assets/CreateAsset_PrepareRequestData.xaml, Entities/Assets/CreateAssetRequest.xaml, Entities/Assets/EditAsset.xaml, Entities/Assets/DeleteAsset.xaml, Entities/Processes/CreateProcess.xaml, Entities/Processes/CreateProcessRequest.xaml, Entities/Processes/DeleteProcess.xaml, Entities/Processes/UpdateProcessToLatestPackageVersion.xaml, Entities/Processes/RollbackProcessToPreviousPackageVersion.xaml, Entities/Processes/UpdateProcessToSpecifiedPackageVersion.xaml, Common/ReportExecutionStatus.xaml
    10. 10. Write results back and refresh the cache
      Summary: In a Finally block, write the outcome to the row's Result cell (and the new ID column where applicable), using either a fixed column letter or a column computed from the canonical column-name list. Successful creations/deletions are also applied to the in-memory entity data so later rows in the same batch see correct duplicate checks; failed edits are rolled back locally (BeginEdit/CancelEdit).
      Assets: Common/WriteCellByColumnNameAndIndex.xaml, Entities/Assets/CreateAsset.xaml, Entities/Processes/CreateProcess.xaml, Entities/Assets/EditAsset.xaml, Entities/Assets/DeleteAsset.xaml
    11. 11. Optional: classic-to-modern folder migration
      Summary: For the Migrate operation on Folders, a dedicated migration workbook is created listing entities per classic folder; after operator confirmation on a migration form, processes, assets, queues (and their items), environments, robots and triggers are recreated in the target modern folder — per-process migration downloads the package, verifies minimum dependency versions, deletes the temp file and creates the release in the modern folder. Each row's Result cell records success or the error, and failures set a migration-exceptions flag.
      Assets: Entities/Folders/FolderManager.xaml, Entities/Folders/MigrateFolder.xaml, Core/Forms/FolderMigrationPanelBuilder.xaml, Entities/Folders/MigrateClassicToModern/MigrateProcessesToDifferentFolders.xaml, Entities/Folders/MigrateClassicToModern/MigrateProcessesToSameFolder.xaml, Entities/Folders/MigrateClassicToModern/MigrateProcess.xaml, Entities/PackagesLibraries/VerifyPackageDependencies.xaml
    12. 12. Return to the control panel or end
      Summary: After the operation completes (or its errors are shown), control returns to the control panel loop for another entity/operation, or logs 'Stopped execution' and ends when the operator cancels.
      Assets: Core/PerformOperationOnEntity.xaml
    Exceptions
    1. Configuration file cannot be read (IOException)
      Handling: Message box in English (localisation not yet loaded): 'It was not possible to read settings. Please make sure that the configuration file is closed and press OK to continue.', then rethrow; whole scope retried up to 3 times at 1 s intervals
    2. Configuration parameter to update is not found in the sheet
      Handling: ArgumentException 'ParameterNotFound' raised (values assumed to live in column B of the sheet)
    3. Authentication returns a status other than 200
      Handling: Log the raw response at Error, show 'Authentication failed' message box, re-display the authentication panel; the loop only exits when a token exists or the operator cancels
    4. 'Use saved credential' selected but no matching Credential Manager entry (tried tenant-specific, then account/URL-specific, then legacy target)
      Handling: Throw ArgumentException with the 'CredentialNotFound' message
    5. Unsupported on-premises Orchestrator version or Orchestrator type in config
      Handling: Throw ArgumentException (OnPremisesOrchestratorVersionNotSupported / OrchestratorTypeNotSupported) while building the authentication form
    6. Bearer token expired mid-run (HTTP 401 containing 'not authenticated')
      Handling: Log warning, re-run the authentication workflow, then throw so the retry scope repeats the request with the new token (default token life ~30 minutes)
    7. Connectivity failure (status code 0) or server error (500–599)
      Handling: Throw WebException inside the retry scope; retried MakeHTTPRequestNumberOfRetries times at MakeHTTPRequestRetryInterval ms
    8. Status code differs from the expected one, or the response body is not parseable JSON (e.g. redirect returning HTML)
      Handling: Throw WebException/Exception with the ProcessEntityFailure or InvalidResponseErrorFailure message; caught per-row and written to that row's Result
    9. Planned requests exceed MaximumRequestsThreshold and operator answers No
      Handling: OperationCanceledException raised; caught in PerformOperationOnEntity, logged as Warn and shown as 'Operation canceled by user'
    10. Any other error during an operation
      Handling: Caught in PerformOperationOnEntity: logged at Error with message and source, generic 'Error during execution' message box; the session continues
    11. One or more selected Organization Units/Folders cannot be read (insufficient rights)
      Handling: Per-folder WebException caught inside the Get*Data loops so other folders still process; the AllOUFoldersAccessed flag is cleared, failure logged, and a 'FailedToAccessOUFolder' warning message box shown
    12. Delete requested with an ID whose name does not match the row's name
      Handling: ConfirmOUFolderData / ConfirmAssetData / ConfirmProcessData throw (…IDAndNameDoNotMatch, …NotFound) to prevent accidental deletion; error written to the row Result
    13. Invalid row data — missing folder/asset/process name, missing scope or type, invalid boolean/integer value, duplicate asset or process name, per-robot and per-user values on the same asset, multiple values for one robot/user, assets-per-user on on-prem < 2020.10, default value for per-robot assets on on-prem < 2019.10
      Handling: Specific ArgumentException raised; message written to that row's Result cell and processing continues with the next row
    14. Duplicate package/library versions returned by Orchestrator (known Orchestrator bug)
      Handling: Affected entities skipped, warning logged and a message box shown; creating a process on a duplicated package version throws
    15. Malformed ID in the sheet (FormatException)
      Handling: Log 'IDInvalidOrNotSpecified' at Error and write that message to the Result cell
    16. Row already has a Result value
      Handling: Row is skipped (only rows with an empty Result and at least one other populated cell are processed), making re-runs safely resumable
    17. Unsupported entity or operation selected
      Handling: Log at Warn/Error and show 'Unsupported entity'/'Unsupported operation' message box; no API calls made
    18. 'Open workbook' action fails (e.g. file locked)
      Handling: Exception caught and its message shown in a message box; control returns to the panel
    Unknowns
    • Who operates the tool and what approval/change-control governs bulk creates and deletes
    • How often it is used and typical row volumes per batch
    • The actual configured values of MaximumRequestsThreshold, RequestBatchSize, RequestInterval, retry count/interval, AutomationCloudURL and the per-entity workbook file names — these live in Config.xlsx, which is not in the outline
    • Exact sheet names for each operation: they come from localised config keys (GetOperationName, CreateOperationName, …), so the visible tab names depend on language
    • The full list of operations actually supported per entity — several managers (Folder, Queue, Trigger, Job, Organization Unit) were not expanded in the outline
    • Endpoints and bodies for several sub-operations shown with '?' arguments (update/rollback package version requests, link/unlink, edit user mappings, job operations)
    • Where downloaded packages, exported queue items and referenced-entity files are stored long term and who consumes them
    • Whether the Logs folder receives files, or only the Orchestrator/Studio execution log
    • How credentials are provisioned and rotated, and the policy on using 'save credential' to Windows Credential Manager
    • Handling of the DisableServerCertificateValidation flag in production (it disables TLS certificate checks when true)
    • Downstream effects of migrations and deletions — no rollback path is described beyond the per-row Result column
  3. Write the SOP

    128.4s11k out

    Procedure written →

  4. Check the SOP against the source

    120.6s10k out
    Verdict
    minor issues
    Confidence
    high
    Coverage
    Covers the real business flow end-to-end and traceably: config/localization load with 3x/1s retry, the HTML sign-in panel and credential-manager lookup order, config write-back to Config.xlsx column B, workbook template seeding, control-panel entity/operation selection with submit/openWorkbook/cancel, per-entity dispatch, positional column renaming (column lists verified against ColumnNames defaults), unprocessed-row filter, MaximumRequestsThreshold gate, folder picker + Tenant option gating (Package AND cloud/on-prem>=202010), sheet clearing A2:Z before the refresh call, OData filter variants (IN vs OR'd, 10-condition cap, 1800-char drop), pagination/merge, X-UIPATH-OrganizationUnitId omission when 0, Releases-vs-Processes endpoint trap, delete ID/name confirmation, Finally-block Result write-back, cache updates, and classic->modern process migration (download package, verify dependencies, delete temp file, create release, result to column E). Correctly flags what the outline cannot support (Folder/Queue/Trigger/Job/OU managers unexpanded, actual config values, several request endpoints). Discrepancies found are localized, not structural.
    Issues
    1. medium
      Location: Stage 9 step 5 and Exceptions table row 'Token expires mid-run'
      Problem: States the tool 'silently re-authenticates' and that operator action is 'Nothing — transparent'. MakeHTTPRequest.xaml on 401 'not authenticated' invokes Core/Authentication/Authenticate.xaml, which loops through GetAuthenticationData.xaml -> AuthenticationPanelBuilder + Custom Input, i.e. the sign-in form is redisplayed to the operator.
      Correction: Say: on token expiry a warning is logged and the sign-in panel re-opens for the operator to re-authenticate; the failed request is then retried by the retry scope. Operator must be present to complete the form.
    2. low
      Location: Stage 2 step 4
      Problem: Says cloud account name and on-premises URL are written back to Config.xlsx '(after login)'. In MakeAuthenticationRequest_Cloud.xaml and MakeAuthenticationRequest_OnPremises.xaml, UpdateConfigurationFile for CloudAccountName / OnPremisesOrchestratorURL runs before the authentication HTTP request.
      Correction: Remove '(after login)' — all changed values, including cloud account name and on-premises URL, are written to Config.xlsx before the authentication request is sent.
    3. low
      Location: Stage 7, ordering of items 2 and 4
      Problem: Numbered order implies the folder picker opens before the sheet is cleared. In the Get blocks (Assets, Robots, Environments, Processes, Packages) the sequence is: read previous rows -> clear A2:Z -> PromptUserForOUFolders -> Get...Data -> write range.
      Correction: Reorder: clear the previous Get results first, then prompt for Organization Units/Folders, then call Orchestrator and write the refreshed rows.
    4. low
      Location: Stage 9 step 1
      Problem: Presents the '<Entity> - <Operation>: n / total' progress line as generic to all row processing. In the expanded source, ReportExecutionStatus.xaml is invoked only from AssetManager.xaml (create, create credential, edit, edit credential, delete loops); other managers' loops do not call it.
      Correction: Scope the statement to Asset operations, or note that progress reporting is confirmed only for Assets in the source.
  5. Apply the corrections

    108.1s11k out

    Procedure written →

Bulk Administration of UiPath Orchestrator Entities (Orchestrator Manager)

Orchestrator Manager is an attended desktop tool that lets an Orchestrator administrator perform bulk maintenance on Orchestrator objects — Users, Robots, Machines, Assets, Environments, Processes, Organization Units, Folders, Queues, Packages, Libraries, Triggers and Jobs — from Excel workbooks instead of clicking through the Orchestrator web interface one record at a time. The operator fills a sheet with the records they want created, edited or deleted, chooses the entity and operation on an on-screen panel, and the tool calls the Orchestrator API for each row and writes the outcome back next to that row. The developer describes it as "a tool to help Orchestrator administrators to perform bulk operations on entities … For more details, refer to the manual located in the Documentation folder."

At a glance

Trigger Manual, attended. The operator starts the tool; it opens a sign-in form, then a control panel where the entity and operation are chosen. The panel re-opens after each operation until the operator selects Cancel.
Frequency Not recorded in the source — ad hoc, operator-driven. Many operations can be run back-to-back within one session.
Systems used UiPath Orchestrator REST/OData API (on-premises or Automation Cloud); Microsoft Excel; Windows Credential Manager; local file system; HTML input panels rendered by the tool; Active Directory / Orchestrator Directory Service (for folder-user assignment and domain lookup)
Inputs Config.xlsx (sheets Settings and Advanced Settings); Translation.xlsx (sheet Localization); per-entity workbooks in the workbooks folder (Assets, Users, Robots, Machines, Environments, Processes, Packages, Libraries, Queues, Folders, Triggers…), each with one sheet per operation; operator credentials; package .nupkg files and queue-item files for upload
Outputs Refreshed "Get" sheets in the entity workbooks; a Result value on every processed row; new entity IDs written back (AssetID, ProcessID, RobotID, MachineID…); updated values in Config.xlsx; downloaded package files and package "referenced entities" files; exported queue items; log messages and a Logs folder under the workbooks folder
Typical run Not recorded in the source. Batch size is bounded only by the operator's sheet; runs above the configured MaximumRequestsThreshold require an explicit Yes/No confirmation.
Owner Not recorded in the source

Before you start

  • Orchestrator access. An Orchestrator account (on-premises user/password or tenant login, or Automation Cloud Client ID + User Key, or an External Application's App ID + App Secret for the OAuth client_credentials flow). The account must hold rights for every entity you intend to change, and must be a member of every Organization Unit/Folder you intend to read — being able to see a folder in a list is not enough; folders the account cannot enter are skipped with a warning.
  • Know your Orchestrator. You will be asked for the deployment type (on-premises or cloud), URL or account/tenant name, and — for on-premises — the version. Supported versions on the form: 2018.4, 2019.4, 2019.10, 2020.4, 2020.10, 2021.04, 2021.10, 2022.04. Anything else is rejected with "Orchestrator version not supported".
  • Files present and closed. Config.xlsx and Translation.xlsx must be readable and closed in Excel — a locked file causes a read failure and a prompt to close it. The entity workbooks live in the folder named by EntitiesWorkbooksFolderPath; if that setting is blank the tool uses %Desktop%\OrchestratorManagerWorkbooks.
  • Windows Credential Manager (optional). If credentials were previously saved, the sign-in form pre-ticks "use saved credential". Saving a credential writes an entry keyed by credential name + account/URL + tenant.
  • Language. Column headings and sheet tab names in the entity workbooks are localised. The tool picks the language from the machine's UI culture (a Japanese branch and an English default exist in the translation logic), unless a language is passed in. Templates are copied from a language-specific folder, so switching machine language mid-life gives you a different set of tab names.
  • Certificate validation. There is a DisableServerCertificateValidation switch that, when true, turns off TLS certificate checking for the whole session. Confirm with your security owner before using it.
  • Plan your rollback. The tool has no undo. Deletions and migrations are permanent; the only record of what happened is the Result column in the sheet.

Procedure

Stage 1 — Load configuration and language strings

  1. Start the tool. If the certificate-validation switch is set to true, server certificate checking is disabled for the session.
  2. The tool reads Config.xlsx: first the Settings sheet, then the Advanced Settings sheet, and merges the second into the first so both sets of parameters are available together.
  3. It reads the Localization sheet of Translation.xlsx, keeps the column for the chosen language (Japanese if the machine UI culture is JA; otherwise the English default column), renames that column to "Value", and merges it into the settings.
  4. Every non-blank Name / Value pair becomes an in-memory setting used for the rest of the session — this includes sheet names, form labels, error messages, thresholds and endpoints.
  5. If the configuration file cannot be read (typically because it is open in Excel), a message box appears — "It was not possible to read settings. Please make sure that the configuration file is closed and press OK to continue." — and the read is retried up to 3 times, 1 second apart. This message is in English because the translated strings are not loaded yet.
  6. If EntitiesWorkbooksFolderPath is blank, the tool defaults it to %Desktop%\OrchestratorManagerWorkbooks.

Stage 2 — Sign in to Orchestrator

  1. The tool builds an HTML sign-in panel, pre-filled from the last session: Orchestrator type (on-premises / cloud), Orchestrator URL, on-premises tenant name, cloud account name and tenant name, on-premises version, and the workbooks folder path.
  2. It checks Windows Credential Manager for a saved credential under four possible targets (cloud generic, cloud + account name, on-premises generic, on-premises + URL). If any exists, the "use saved credential" checkbox is shown and ticked; if none exists, the checkbox is hidden.
  3. Complete the form and submit. If you close or cancel the form, the tool logs "Stopped execution" and ends.
  4. Any value you changed is written straight back into Config.xlsx before the login is attempted — Orchestrator type and version to the Advanced Settings / Settings sheets as appropriate, and tenant name, cloud tenant name, workbooks folder path and (after login) cloud account name and on-premises URL to Settings. Values are assumed to sit in column B of the sheet.
  5. If cloud is selected: the tool looks for a saved User Key under, in order, <credentialName>_<account>_<tenant>, then <credentialName>_<account>, then <credentialName>; if "use saved credential" was ticked and none is found it stops with "Credential not found". It then posts either an OAuth client_credentials request (with the full OR.* scope list — Monitoring, ML, Tasks, Analytics, Webhooks, Folders, TestSets, Audit, License, Settings, Robots, Machines, Execution, Assets, Administration, Users and more) or a refresh_token request using the Client ID and User Key. The working Orchestrator URL is then assembled as <AutomationCloudURL>/<account>/<tenant>.
  6. If on-premises is selected: the same three-step saved-credential lookup runs against <credentialName>_<URL>_<tenant>, <credentialName>_<URL>, <credentialName>. The tool posts either an OAuth request or a body of {"tenancyName":…,"usernameOrEmailAddress":…,"password":…}. The Orchestrator URL is reduced to its scheme + host portion.
  7. If the response is HTTP 200, the bearer token is stored and used for all later calls. Otherwise the raw response is logged as an error, an "Authentication failed" message box is shown, and the sign-in panel re-opens. The loop only ends when a token is obtained or you cancel.
  8. If you ticked "save credential", the password/User Key is written to Windows Credential Manager under the tenant-specific target.

Note the on-screen account-lockout warning on the form: repeated failed attempts can lock the Orchestrator account.

Stage 3 — Prepare the entity workbooks

  1. If the workbooks folder does not exist, it is created.
  2. If the Logs subfolder does not exist (workbooks folder + the configured logs folder name), it is created.
  3. Every *.xlsx template in the language-specific templates folder is copied into the workbooks folder only if a file of that name is not already there. Existing workbooks — and therefore your data — are never overwritten.

Stage 4 — Choose the entity and the operation

  1. The control panel opens, listing the entities: Asset, User, Machine, Robot, Environment, Process, Organization Unit, Folder, Queue, Package, Library, Trigger, Job.
  2. It lists the operations available across those entities, including: Get, Get Credential, Create, Create Credential, Edit, Edit Credential, Delete, Add/Remove Environment Robots, Add/Remove User Organization Units, Add/Remove User Roles, Update Process to Latest Package Version, Rollback Process to Previous Package Version, Update Process to Specified Package Version, Download/Upload Queue Items, Download/Upload Package or Library, Get Package Referenced Entities, Get Folders' Users, Assign/Unassign Folder User, Add/Remove Folder User Roles, Migrate Classic to Modern, Enable/Disable Trigger, Installed Robots, Assign/Unassign Folder Machine, Link or Unlink, Edit User Mappings.
  3. If the deployment is on-premises, the version is passed to the panel so that version-dependent options are hidden. The developer's own example: "Organization Units should not appear when using Orchestrator 2019.10+." The classic→modern folder migration option is likewise gated by an Enable202004FolderMigration setting.
  4. Choose one of three actions:
    • Execute (submit) — runs the operation (Stages 5–10).
    • Open workbook — opens that entity's workbook in Excel so you can fill in or review the rows, then returns to the panel. If the file cannot be opened (for example it is locked), the error message is shown and you return to the panel.
    • Cancel — logs "Stopped execution" and ends the session.
  5. Your entity and operation choices are remembered and pre-selected next time the panel opens in this session.

Stage 5 — Route to the right entity handler

  1. The tool dispatches to the manager for the chosen entity (Machine, Asset, User, Robot, Environment, Process, Organization Unit, Folder, Queue, Package, Library, Trigger, Job). Packages and Libraries share one handler and differ only by workbook and API endpoint.
  2. If the entity or the entity/operation combination is not supported, a warning or error is logged and an "Unsupported entity" / "Unsupported operation" message box is shown. No API calls are made.

Stage 6 — Read your request rows from the workbook

  1. The tool opens the entity's workbook at <workbooks folder>\<entity workbook file name from Config> and reads the sheet whose name matches the chosen operation (e.g. the sheet named by CreateOperationName, DeleteOperationName, AddRemoveUserRolesOperationName).
  2. Because the visible column headings are localised, the tool renames the columns positionally to canonical internal names before doing anything else. Examples from the source:
    • Assets → Create: OUFolderName, AssetName, Description, Scope, RobotUserName, Type, Value, AssetID, Result
    • Assets → Create Credential: OUFolderName, AssetName, Description, Scope, RobotUserName, Value, Password, AssetID, Result
    • Assets → Delete: OUFolderID, OUFolderName, AssetID, AssetName, Result
    • Assets → Link or Unlink: AssetID, OUFolderName, LinkOrUnlink, Result
    • Robots → Create: OUFolderName, HostingType, RobotName, MachineName, RobotType, Username, Password, RobotID, Result
    • Machines → Create: Type, Name, Description, UnattendedSlots, NonProductionSlots, TestAutomationSlots, Key, ID, Result
    • Machines → Edit User Mappings: MachineID, UsersToAssign, UsersToUnassign, Result
    • Processes → Create: OUFolderName, EnvironmentName, PackageName, PackageVersion, ProcessName, Description, InputArguments, ProcessID, Result
    • Processes → Update to Specified Package Version: OUFolderName, ProcessName, PackageVersion, Result
    • Users → Add/Remove Roles: UserID, AddRolesNames, RemoveRolesNames, Result
    • Users → Add/Remove Organization Units: UserID, AddOUsNames, RemoveOUsNames, Result
    • Packages/Libraries → Download: Name, Version, DownloadFolderPath, DownloadedPackageFilePath, Result
    • Packages/Libraries → Upload: PackageFilePath, Result
  3. Only "unprocessed" rows are selected: rows whose Result cell is empty but which have at least one other populated cell. This makes a re-run safely resumable — rows that already succeeded or already carry an error message are skipped, so you should clear the Result cell of any row you want retried.

Stage 7 — Confirm scope and guard against oversized runs

  1. If the number of planned requests exceeds MaximumRequestsThreshold, a Yes/No message box appears. Answer No and the operation aborts cleanly with "Operation canceled by user"; answer Yes and a warning is logged and the run proceeds.
  2. For "Get" operations on folder-scoped entities (Assets, Get Credential Assets, Robots, Environments, Processes, Packages), a folder picker opens listing all Organization Units / Folders the account can see. Select the ones to cover. If you close the picker or select nothing, no folders are processed. If Organization Units are disabled on the target Orchestrator (the folder list contains a single "N/A" entry), the picker is skipped.
  3. For Packages only, an extra Tenant option is added to the picker when folder-level packages are supported — that is, on cloud, or on-premises 2020.10 and above.
  4. Before writing new "Get" results, the tool reads the existing rows on that sheet and clears the range A2:Z<last row> (never row 1, so headers survive). The clear happens before the API call, deliberately, so that a failed refresh cannot leave stale data looking current.

Stage 8 — Pre-fetch reference data once for the whole batch

  1. Before looping through rows, the tool retrieves the current state of everything the sheet references — folders/OUs, existing assets, robots, users, machines, environments, processes, roles, packages — filtered to just the names or IDs that appear in your rows. The developer's rationale: "Get current data beforehand for confirmation purposes and to reduce the number of requests."
  2. Filters are built to suit the Orchestrator version: cloud or on-premises 2020.10+ uses the OData IN operator (Id in (1,2,3), Name in ('A','B')); 2020.4 and older uses OR'd equality conditions and is capped at roughly 10 conditions per query because "there is a limit to the number of conditions specified in a query … usually less than 20".
  3. Long filter lists are split across several GET requests to stay under URL length limits (a filter longer than 1,800 URL-encoded characters is dropped rather than sent), and paged responses are fetched in batches of RequestBatchSize and merged into a single result set.
  4. If a selected folder cannot be read (rights problem), that folder alone fails: the error is logged, the run continues with the other folders, and at the end a warning box tells you not all folders could be accessed. The developer's note: "Even if a user is able to see all OUs/Folders, they might not be a member of some OUs/Folders and thus not be able to access restricted resources."

Stage 9 — Process each row and call Orchestrator

  1. Rows are processed one at a time; a status line "<Entity> - <Operation>: n / total" is shown while running. Assets are an exception: rows are grouped by folder name + asset name, so a global default value and several per-robot or per-user values of the same asset are handled as one unit.
  2. For each row the tool validates the inputs and resolves names to IDs from the data cached in Stage 8, then builds and sends the request. Every call carries the target folder's ID in the X-UIPATH-OrganizationUnitId header, unless the ID is 0 (in which case the header is omitted — 0 is not a valid Orchestrator ID).
  3. Concrete examples from the source:
    • Create asset — POST /odata/Assets with Name, Description, ValueType (text / bool / integer / credential), ValueScope (Global, or PerRobot for both per-robot and per-user assets, "to maintain backwards compatibility"), plus RobotValues/UserValues and, if a global default is also supplied, HasDefaultValue. Expected response 201; the new AssetID is written back.
    • Edit asset — PUT /odata/Assets(<id>). Blank cells mean "keep current value", so the current values are read first and re-sent. Editing an asset that has per-robot or per-user values is rejected.
    • Delete asset — DELETE /odata/Assets(<id>), expected response 204.
    • Create process — POST /odata/Releases. The developer flags the naming trap: "Processes are actually exposed by the Release endpoints. The Processes endpoints refer to Packages." ProcessKey carries the package name, ProcessVersion the package version. If no Environment is given the process is created in a modern folder and named after the package; if an Environment is given the default name follows Orchestrator's own convention PackageName_EnvironmentName. A name you supply overrides both.
    • Delete process — DELETE /odata/Releases(<id>), expected response 204.
    • Update / rollback package version — POST against the Releases endpoints for the named process, resolved from the folder + process name.
  4. Delete operations demand a matching ID and name. Before deleting, the tool checks that the folder ID matches the folder name and that the entity ID matches the entity name given on the same row. Any mismatch stops that row — "To prevent accidental deletion, the workflow confirms whether the … name specified match[es] the names of the given IDs."
  5. If the token expires mid-run (HTTP 401 containing "not authenticated" — the token lasts about 30 minutes by default), the tool logs a warning and re-opens the sign-in panel so the operator can re-authenticate. Once a new token is obtained, the failed request is retried by the retry scope. The operator must be present at the machine to complete the form; the run does not continue unattended.
  6. Between requests the tool waits RequestInterval milliseconds — "optional delay between requests to lessen the burden on Orchestrator due to a large number of consecutive requests."

Stage 10 — Write results back

  1. Whatever happens, each processed row gets a Result value: the configured success text on success, or the exception message on failure. For grouped asset rows, the same Result and the same new AssetID are written to every row in the group.
  2. Where the operation creates something, the new ID is written to the ID column on that row (AssetID, ProcessID, RobotID, MachineID…).
  3. The in-memory cache is updated as it goes — created entities are added so later rows in the same batch see the duplicate-name check correctly, deleted entities are removed, and a failed edit has its local change discarded.
  4. Review the Result column before doing anything else. It is the only record of what succeeded.

Stage 11 — Optional: classic-to-modern folder migration

  1. Choose entity Folder, operation Migrate classic to modern. A dedicated migration workbook is created listing the entities held in the classic folder, with a sheet per entity type (Processes, Assets, Queues, Environments, Robots, Triggers).
  2. A confirmation panel names the classic folder being migrated. Confirm or cancel.
  3. Rows can target the same modern folder for everything, or a different modern folder per row. On the per-row sheets, only rows whose Result is empty and whose Modern Folder name is filled in are processed.
  4. For each process being migrated the tool: downloads the package to <workbooks folder>\<PackageDownloadFolderPath> (creating the folder if needed), verifies the package's dependencies against the minimum versions listed in the PackagesMinimumDependenciesVersions setting, deletes the temporary package file, then creates the equivalent release in the target modern folder.
  5. If the classic folder, the modern folder or the process cannot be found, that row fails with a specific message written to its Result cell (column E on the Processes sheet), a migration-exception flag is raised, and the remaining rows continue.

Stage 12 — Continue or finish

  1. When the operation ends — successfully or after its errors have been shown — the control panel re-opens. Choose another entity/operation, open a workbook, or cancel.
  2. Choosing Cancel logs "Stopped execution" and ends the session.

Exceptions and recovery

Condition What the automation does What the operator should do
Config.xlsx / Translation.xlsx unreadable (file open) English message box "It was not possible to read settings. Please make sure that the configuration file is closed and press OK to continue.", then retries — 3 attempts, 1 second apart Close the workbook in Excel and press OK. If it still fails, check file permissions and path.
A setting to be updated is not found in the sheet Raises "Parameter not found" Check that the parameter row exists on the Settings / Advanced Settings sheet and that its value sits in column B.
Login returns anything other than HTTP 200 Logs the raw response as an error, shows "Authentication failed", re-opens the sign-in panel Re-check URL, tenant, account and credentials. Heed the on-form lockout warning — do not brute-force.
"Use saved credential" ticked but no matching Credential Manager entry (tenant-specific, then account/URL-specific, then legacy target all missing) Stops with "Credential not found" Untick the box and enter credentials manually, ticking "save credential" to store them.
Unsupported on-premises version or Orchestrator type in config Throws while building the sign-in form Correct OnPremisesOrchestratorVersion / OrchestratorType in Config.xlsx to a supported value.
Token expires mid-run (401 "not authenticated") Logs a warning and re-opens the sign-in panel for re-authentication; once a new token is obtained the failed request is retried by the retry scope Stay at the machine — the run is not unattended. Complete the sign-in form when it re-appears. If you cancel it or re-authentication fails, the run stops; restart the session and re-run the affected rows after clearing their Result cells.
Connectivity failure (status 0) or server error 500–599 Retries MakeHTTPRequestNumberOfRetries times at MakeHTTPRequestRetryInterval ms If retries are exhausted, check network/Orchestrator health and re-run the affected rows after clearing their Result cells.
Unexpected status code, or the response is not valid JSON (e.g. a redirect returning HTML) Fails that row with a "process entity failure" / "invalid response" message written to Result Verify the endpoint and the Orchestrator version setting; the HTML-response case usually means a wrong URL.
Planned requests exceed MaximumRequestsThreshold Yes/No prompt. No → operation cancelled cleanly with "Operation canceled by user"; Yes → warning logged, run proceeds Decide deliberately. Consider splitting the batch.
Any other error inside an operation Logged with message and source, generic "Error during execution" box; the session continues Read the Result column to see which rows completed; investigate, clear Results, re-run.
One or more selected folders cannot be read Skips only that folder, clears the "all folders accessed" flag, logs the failure, shows a "Failed to access OU/Folder" warning Data for the skipped folders is missing from the sheet. Get folder membership for your account and re-run.
Delete row where the ID does not match the name Row rejected with "ID and name do not match" or "not found"; nothing is deleted Re-run a Get to refresh the sheet with correct ID/name pairs, then retry.
Invalid row data — missing folder/asset/process name, missing or unsupported scope or type, invalid boolean/integer value, duplicate asset or process name, per-robot and per-user values on the same asset, multiple values for one robot/user, assets-per-user on on-prem < 2020.10, per-robot default value on on-prem < 2019.10 Specific message written to that row's Result; processing continues with the next row Fix the row, clear its Result cell, re-run the operation.
Duplicate package/library versions returned by Orchestrator (known Orchestrator defect) Affected entities are skipped, a warning is logged and a message box lists them; creating a process on a duplicated package version fails Resolve the duplicate in Orchestrator before retrying those rows.
Malformed ID in a cell (FormatException) Writes "ID invalid or not specified" to that row's Result Correct the ID cell (no text, no stray spaces) and re-run.
Row already has a Result value Row is skipped Intentional — clear the Result cell for any row you want to reprocess.
Unsupported entity or operation selected Warning/error logged, message box shown, no API calls Choose a combination valid for your Orchestrator version.
"Open workbook" fails (file locked) Shows the error message, returns to the control panel Close the workbook elsewhere and retry.

Data handled

Item Contents Source
Configuration dictionary All settings and all localised strings for the session: Orchestrator type/URL/tenant/account/version, workbooks folder, thresholds, retry counts, request interval and batch size, sheet names, form labels, error texts, and — after login — the bearer Token and the working OrchestratorURL Config.xlsx (Settings + Advanced Settings) merged with the chosen language column of Translation.xlsx; updated in place during sign-in
Authentication data Orchestrator type, URL, tenant names, account name, Client ID / User Key or username / password, workbooks folder path, and the "use saved credential", "save credential" and "use OAuth flow" flags The sign-in panel, submitted as JSON
Entity / Operation selection Which entity and which operation the operator picked, plus the action (submit / openWorkbook / cancel); remembered so the next panel pre-selects them The control panel, submitted as JSON
Selected OU/Folders The folders the operation should cover, as name + ID; for Packages may include a synthetic "Tenant" row with ID 0 The folder picker panel, filtered from the full folder list retrieved from Orchestrator
…Details tables (AssetsDetails, UsersDetails, RobotsDetails, ProcessesDetails, MachinesDetails, PackagesLibrariesDetails) The operator's request rows, read from the operation's sheet with localised headings renamed to canonical column names The entity workbook
Unprocessed…Details The subset of the above that will actually be sent: empty Result cell, at least one other cell populated Filtered in memory
…Data tables (AssetsData, RobotsData, UsersData, MachinesData, ProcessesData, OUFoldersData, RolesData, PackagesData, EnvironmentsData) The current state of Orchestrator for the entities named in the sheet — used to resolve names to IDs, detect duplicates, and confirm IDs before deletion; kept in step with each successful create/delete during the batch Orchestrator GET calls made in Stage 8
OData filter The $filter= clause built from the names/IDs in the sheet, in IN-operator or OR'd-equality form depending on Orchestrator version, and split if too long Built from the request rows
OperationResult Per row: the configured success text, or the caught exception's message Set in the try/catch around each row; always written back in the Finally block
AllOUFoldersAccessed flag False if any selected folder could not be read Set during the Get…Data loops; drives the "Failed to access OU/Folder" warning
DuplicateEntitiesMessage / DuplicatePackageLibraryVersionsList Packages or libraries with duplicated versions, which are skipped Detected while retrieving package/library data
Migration workbook Per classic folder, the processes, assets, queues, environments, robots and triggers to migrate, each row carrying a target modern folder name and a Result cell Created by the migration routine from Orchestrator data

Not determinable from the source

  • Who operates the tool, and what approval or change-control governs bulk creates and deletes.
  • How often it is used and typical row volumes per batch.
  • The actual configured values of MaximumRequestsThreshold, RequestBatchSize, RequestInterval, retry count/interval, AutomationCloudURL and the per-entity workbook file names — these live in Config.xlsx, which is not part of the outline.
  • The exact sheet tab names for each operation: they come from localised config keys (GetOperationName, CreateOperationName, …), so the visible names depend on the language in use.
  • The full list of operations actually supported per entity — the Folder, Queue, Trigger, Job and Organization Unit managers were not expanded in the source.
  • Endpoints and request bodies for several sub-operations (update/rollback package version requests, link/unlink, edit user mappings, all Job operations).
  • Where downloaded packages, exported queue items and referenced-entity files are stored long term, and who consumes them.
  • Whether the Logs folder actually receives files, or whether logging goes only to the Orchestrator/Studio execution log.
  • How credentials are provisioned and rotated, and the policy on using "save credential" to write them to Windows Credential Manager.
  • How the DisableServerCertificateValidation flag is governed in production — when true it disables TLS certificate checks.
  • Downstream effects of migrations and deletions; no rollback path exists beyond the per-row Result column.

How this SOP was checked

Generated from the project's source files and audited against them. Audit verdict: minor issues, confidence high.

Covers the real business flow end-to-end and traceably: config/localization load with 3x/1s retry, the HTML sign-in panel and credential-manager lookup order, config write-back to Config.xlsx column B, workbook template seeding, control-panel entity/operation selection with submit/openWorkbook/cancel, per-entity dispatch, positional column renaming (column lists verified against ColumnNames defaults), unprocessed-row filter, MaximumRequestsThreshold gate, folder picker + Tenant option gating (Package AND cloud/on-prem>=202010), sheet clearing A2:Z before the refresh call, OData filter variants (IN vs OR'd, 10-condition cap, 1800-char drop), pagination/merge, X-UIPATH-OrganizationUnitId omission when 0, Releases-vs-Processes endpoint trap, delete ID/name confirmation, Finally-block Result write-back, cache updates, and classic->modern process migration (download package, verify dependencies, delete temp file, create release, result to column E). Correctly flags what the outline cannot support (Folder/Queue/Trigger/Job/OU managers unexpanded, actual config values, several request endpoints). Discrepancies found are localized, not structural.

1 correction from the audit was applied to the procedure above.

Remaining minor notes, not corrected:

  • Stage 2 step 4 — Says cloud account name and on-premises URL are written back to Config.xlsx '(after login)'. In MakeAuthenticationRequest_Cloud.xaml and MakeAuthenticationRequest_OnPremises.xaml, UpdateConfigurationFile for CloudAccountName / OnPremisesOrchestratorURL runs before the authentication HTTP request. (Remove '(after login)' — all changed values, including cloud account name and on-premises URL, are written to Config.xlsx before the authentication request is sent.)
  • Stage 7, ordering of items 2 and 4 — Numbered order implies the folder picker opens before the sheet is cleared. In the Get blocks (Assets, Robots, Environments, Processes, Packages) the sequence is: read previous rows -> clear A2:Z -> PromptUserForOUFolders -> Get...Data -> write range. (Reorder: clear the previous Get results first, then prompt for Organization Units/Folders, then call Orchestrator and write the refreshed rows.)
  • Stage 9 step 1 — Presents the '<Entity> - <Operation>: n / total' progress line as generic to all row processing. In the expanded source, ReportExecutionStatus.xaml is invoked only from AssetManager.xaml (create, create credential, edit, edit credential, delete loops); other managers' loops do not call it. (Scope the statement to Asset operations, or note that progress reporting is confirmed only for Assets in the source.)

Source