17.2 Action Center & Human-in-the-Loop Orchestration
Key Takeaways
Action Center tasks let an unattended job suspend, free its robot, and resume on any available robot after a person completes the task.
Long-running projects use the Long Running Automation template or the Supports Persistence setting, plus the UiPath.Persistence.Activities package.
Form tasks, app tasks, and external tasks each pair a Create activity with a Wait ... and Resume activity; separating them allows several tasks to be created before waiting.
Tasks are Unassigned, Pending once assigned, and Completed; access follows the action catalog and folder permissions for Actions.
Everything in scope across a wait must be serializable, local files must not be relied on after resumption, and Delay or Retry Scope in the Main workflow need Resume After Delay or a No Persist Scope.
17.2 Action Center & Human-in-the-Loop Orchestration
Core Concept: UiPath Action Center delivers enterprise Human-in-the-Loop (HITL) orchestration by decoupling human validation, approvals, and exception handling from robotic execution. Through the Persistence Activities framework, an unattended robot encountering a decision gate suspends execution, serializes its runtime state into Orchestrator, and terminates its host OS process—instantly releasing its runtime license and VM capacity. Once a human completes the assigned action in Action Center, Orchestrator reallocates an available robot to reconstitute the execution context and seamlessly resume processing.
In conventional unattended automation architectures, processes are designed to execute from start to finish without human intervention. However, complex enterprise processes frequently require subjective human decision-making: approving high-value invoices exceeding corporate thresholds (e.g., $50,000), verifying ambiguous data extracted from degraded scanned documents, or resolving complex business exceptions. Historically, developers attempted to handle these scenarios using modal popups, message boxes, or active polling loops (Thread.Sleep or continuous database checks). In unattended production environments, holding an active robot session while waiting for a human approver who may take hours or days to respond introduces critical architectural flaws: it paralyzes costly unattended robot licenses, monopolizes virtual machine memory and CPU resources, blocks pending queue transactions, and inevitably fails if the host VM reboots or times out.
UiPath Action Center resolves this architectural challenge through native persistence and asynchronous workflow suspension.
1. Action Center & Persistence Architecture
The Action Center architecture is built upon the UiPath Persistence Framework (UiPath.Persistence.Activities). This framework transforms standard transient workflows into Long-Running Workflows capable of pausing execution across arbitrary spans of time—ranging from seconds to weeks—without consuming infrastructure resources while idle.
+-----------------------------------------------------------------------------------+
| ACTION CENTER HITL ARCHITECTURE |
| |
| +--------------------+ |
| | Unattended Robot | |
| | (Host VM #1) | |
| +---------┬----------+ |
| │ 1. Executes automated data extraction & business logic |
| │ 2. Invokes 'Create Form Task' & 'Wait for Form Task and Resume' |
| ▼ |
| +-----------------------------------------------------------------------------+ |
| | UiPath Orchestrator | |
| | |
| | [Job State: RUNNING] ──► [Serializes Context to DB] ──► [Job: SUSPENDED] |
| | │ |
| | * Robot #1 process terminates; runtime license released! │ |
| | * License immediately available for other queue jobs. │ |
| +----------------------------------------------------------------┼------------+ |
| │ |
| ▼ |
| +-----------------------------------------------------------------------------+ |
| | UiPath Action Center Portal | |
| | - Task routed to Action Catalog: 'Finance Approvals' |
| | - Human reviewer claims task ('Assign to Me'), edits data, and Submits |
| +----------------------------------------------------------------┬------------+ |
| │ |
| ┌──────────────────────────────────────────────────────┘ |
| ▼ |
| +-----------------------------------------------------------------------------+ |
| | UiPath Orchestrator | |
| | |
| | [Task Completed Event] ──► [Job: RESUMED] ──► [Dispatches to Queue Pool] |
| +----------------------------------------------------------------┬------------+ |
| │ |
| ┌──────────────────────────────────────────────────────┘ |
| ▼ |
| +--------------------+ |
| | Unattended Robot | 3. Downloads serialized execution state snapshot |
| | (Host VM #2) | 4. Reconstitutes variables & resumes post-Wait activity |
| +--------------------+ 5. Finalizes ERP transaction & commits status |
+-----------------------------------------------------------------------------------+
The Suspension and Resumption Mechanics
When a long-running workflow executes a persistence wait activity (such as Wait for Form Task and Resume), the execution lifecycle transitions through five distinct phases:
- Task Generation: The robot runs
Create Form Taskwith the task title, priority, action catalog, and form data. Orchestrator creates the task and returns a task object that identifies it. - State Serialization: When entering the
Wait for Form Task and Resumeactivity, the UiPath workflow runtime inspects the current execution environment. It captures the entire call stack, execution pointers, active activity bookmarks, and all in-scope workflow variables, serializing this state into a secure binary/JSON payload. - Job Suspension: The robot uploads the serialized state payload to the Orchestrator database. Orchestrator transitions the job state from
RunningtoSuspended. The robot executor process (UiPath.Executor.exe) gracefully shuts down and terminates its Windows session. The unattended robot runtime license is immediately returned to the tenant's shared license pool, allowing other queued automations to utilize the machine. - Human Action: The task appears in Action Center (and in the Tasks tab of UiPath Assistant). Authorized users belonging to the target Action Catalog inspect the business data, correct OCR discrepancies or modify fields, and click an action button (e.g., "Approve", "Reject", "Submit"). The action payload and user comments are saved back to Orchestrator, marking the task as
Completed. - Job Resumption: Orchestrator evaluates the completed task and identifies its associated suspended job. Orchestrator updates the job state from
SuspendedtoResumed(placing it into the execution queue). The next available unattended robot in the folder—which does not need to be the same physical machine or VM that started the job—claims the execution, downloads the serialized state payload, reconstitutes the workflow variables into memory, and resumes execution at the exact step immediately following the wait activity.
2. Configuring Long-Running Orchestration Projects
Not every standard UiPath Studio project supports Action Center suspension. Attempting to use persistence activities inside a standard process results in compile-time or runtime errors.
Project Configuration Requirements
To enable persistence and Action Center integration in UiPath Studio, developers must satisfy three strict requirements:
- Project Template / Settings: Start from the Long Running Automation template (formerly called Orchestration Process), or turn on Supports Persistence in Project Settings. In
project.jsonthe setting appears underruntimeOptions:
{
"name": "InvoiceProcessing_LongRunning",
"main": "Main.xaml",
"runtimeOptions": {
"supportsPersistence": true,
"requiresUserInteraction": false
}
}
- Package Dependency: The project must import the
UiPath.Persistence.Activitiespackage. This package provides core activities includingCreate Form Task,Wait for Form Task and Resume,Create External Task,Wait for External Task and Resume, andResume After Delay. - Main Workflow Rules: UiPath notes that the Delay and Retry Scope activities are not supported in the Main workflow of an orchestration (long-running) process; use Resume After Delay instead, or place them inside a No Persist Scope. Design the Main workflow so that everything held across a wait can be persisted.
3. Form Tasks vs. External Tasks
UiPath Action Center supports two foundational task paradigms: Form Tasks (internal, visual UI forms rendered directly in Action Center) and External Tasks (external approval workflows orchestrated across third-party enterprise platforms).
+-----------------------------------------------------------------------------------+
| FORM TASKS vs. EXTERNAL TASKS |
| |
| +-------------------------------------+ +------------------------------------+ |
| | FORM TASKS | | EXTERNAL TASKS | |
| | (UiPath Action Center Native) | | (Third-Party SaaS Orchestration) | |
| | | | | |
| | - Designed in Studio Form Designer | | - Managed in Salesforce, ServiceNow| |
| | - Rendered natively in Action Center| | Jira, SAP, or Workday | |
| | - Rich dynamic controls, validation | | - External system manages the UI | |
| | - Bi-directional JSON data binding | | - Resumption triggered via | |
| | - Human acts directly in UiPath web | | Orchestrator REST API webhook | |
| +-------------------------------------+ +------------------------------------+ |
+-----------------------------------------------------------------------------------+
Form Tasks & UiPath Form Designer
Form Tasks are custom, responsive interactive forms authored directly inside UiPath Studio using the drag-and-drop Form Designer (powered by the Form.io component engine). Form Designer enables developers to build complex, enterprise-ready user interfaces without front-end web development.
- Supported Controls: Text fields, text areas, number inputs, currency inputs, date/time pickers, dropdown selects, multi-select checkboxes, radio buttons, data grids, file upload controls, and custom HTML/CSS content blocks.
- Client-Side Validation: Enforces mandatory fields, regex patterns, minimum/maximum numeric ranges, and dynamic conditional logic (e.g., displaying an "Approval Justification" text area only when the "Manager Approval" radio button is toggled to "Rejected").
- Data Binding Architecture: Data exchange between the robot workflow and the Form Task is governed by Form Data Arguments configured in the
Create Form Taskactivity:- In Direction (
In_): Supplies read-only data from the robot to pre-populate form fields for the human reviewer (e.g.,in_InvoiceNumber,in_VendorName,in_TotalAmount). - Out Direction (
Out_): Captures user input, reviewer comments, or modified fields back into the robot workflow upon task submission (e.g.,out_ApproverNotes,out_ApprovedDiscountRate). - InOut Direction (
InOut_): Seeds a form field with robot-extracted values while permitting the human user to override or correct the value (e.g.,inout_TaxAmount,inout_LineItemsTable).
- In Direction (
External Tasks
An External Task is utilized when an enterprise mandates that human reviews and approvals take place strictly inside an existing third-party enterprise system—such as ServiceNow ticket approvals, Salesforce Opportunity stage sign-offs, Jira issue transitions, or SAP workflow items.
- Workflow Execution: The robot executes business logic, gathers case data, and calls
Create External Task. Orchestrator creates a task reference with an external task identifier. - Suspension: The robot invokes
Wait for External Task and Resume, serializing its state and suspending the job in Orchestrator. - External System Integration: Simultaneously, the robot or an integration service trigger creates the corresponding record or approval ticket in the external system (e.g., Salesforce).
- Resumption: When the reviewer decides in the external system, that system (or an automation using the Complete Task activity) completes the external task through Orchestrator, passing the result data. Orchestrator then resumes the suspended job, which reads the result from the task object.
4. Key Persistence Activities & Execution Patterns
The UiPath.Persistence.Activities package provides distinct activities designed to separate task instantiation from job suspension, enabling sophisticated parallel and asynchronous workflow patterns.
| Activity Name | Primary Function | Workflow Role |
|---|---|---|
Create Form Task | Submits form definition, arguments, catalog, and priority to Orchestrator. | Non-suspending; generates task record and outputs TaskData object (TaskObject). |
Wait for Form Task and Resume | Suspends workflow execution until the specified TaskObject reaches Completed status. | Suspending; serializes state to DB, shuts down robot executor, reconstitutes upon completion. |
Create External Task | Instantiates an external task reference in Orchestrator. | Non-suspending; outputs external TaskData object. |
Wait for External Task and Resume | Suspends workflow execution until an external API call completes the task. | Suspending; awaits external webhook / REST API trigger. |
Resume After Delay | Suspends workflow execution for a defined TimeSpan duration (e.g., 2 hours). | Suspending; releases robot license during time-delayed waits instead of using Delay. |
Create App Task / Wait for App Task and Resume | Create a task that uses a UiPath App as its form, and wait for it. | Non-suspending / suspending pair, like form tasks. |
Assign Tasks, Complete Task, Forward Task, Get Form Tasks, Get App Tasks | Manage existing tasks from a workflow. | Non-suspending task management. |
The Batching & Parallel Dispatch Pattern
Every human task uses a separate Create activity and Wait activity. Keeping them apart lets one workflow create several tasks first and then wait for all of them.
' Enterprise Pattern: Multi-Departmental Parallel Task Dispatch
' Step 1: Create Legal Review Task (Does NOT suspend execution)
CreateFormTask(
TaskTitle := "Legal Review: Contract #" + strContractID,
TaskCatalog := "Legal_Catalog",
TaskPriority := TaskPriority.High,
FormData := legalInputData,
out_TaskObject := taskLegal
)
' Step 2: Create Finance Review Task (Does NOT suspend execution)
CreateFormTask(
TaskTitle := "Finance Review: Contract #" + strContractID,
TaskCatalog := "Finance_Catalog",
TaskPriority := TaskPriority.High,
FormData := financeInputData,
out_TaskObject := taskFinance
)
' Step 3: Suspend and wait for both reviews to complete in parallel
' Using a Parallel activity hosting two 'Wait for Form Task and Resume' activities
Parallel(
Branch1: WaitForFormTaskAndResume(TaskInput := taskLegal, TaskOutput := taskLegalResult),
Branch2: WaitForFormTaskAndResume(TaskInput := taskFinance, TaskOutput := taskFinanceResult)
)
' Execution resumes ONLY when both legal and finance reviewers submit their forms!
By separating Create from Wait, the robot dispatches dozens of approval requests across multiple enterprise departments within milliseconds before executing a single suspension, maximizing throughput and operational efficiency.
5. Action Catalogs, Task Assignment & Lifecycle Governance
In enterprise deployments with hundreds of human reviewers across disparate corporate divisions, governance and access control are managed through Action Catalogs.
+-----------------------------------------------------------------------------------+
| ACTION CATALOG RBAC & LIFECYCLE |
| |
| [Action Catalog: Accounts_Payable] [Action Catalog: HR_Executive] |
| - Authorized Group: AP_Specialists - Authorized Group: HR_Directors |
| - Retention Policy: 90 Days - Retention Policy: 365 Days |
| |
| Task Lifecycle States: |
| |
| +-------------+ User clicks 'Assign to Me' +-------------+ |
| | Unassigned | ─────────────────────────────────────► | Pending | |
| | | ◄───────────────────────────────────── | (assigned) | |
| +-------------+ User Reassigns or Releases +------┬------+ |
| │ |
| │ User Submits Form|
| ▼ |
| +-------------+ |
| | Completed | |
| | (Resumes) | |
| +-------------+ |
+-----------------------------------------------------------------------------------+
Action Catalogs
An Action Catalog is a folder-scoped container configured in Orchestrator that groups related tasks:
- Security Boundaries: Access is governed by Orchestrator folder permissions for Actions, Action Catalogs, and Action Assignment, together with the catalog's user assignments, so the Accounts_Payable team does not see tasks in the HR_Executive catalog.
- Audit & Retention: Catalogs track operational metrics (average time to complete, task throughput per user) and govern automated task archiving schedules.
Task Lifecycle and Locking Semantics
Every Action Center task progresses through a strict state machine:
- Unassigned: A task created without an assignee waits in its catalog. Authorized users can see it and assign it.
- Pending (assigned): To work on a task, a user selects Assign to Me, or a manager assigns it. While it is assigned:
- Other users see the task greyed out or hidden from their active work queue.
- Concurrent form submission collisions are completely prevented.
- The assignee can enter partial data and click
Saveto preserve work-in-progress without completing the task or resuming the robot.
- Reassignment: If an assigned user is unavailable or escalates the case, the task can be reassigned to another specific user or released back to the general
Unassignedpool. - Completed: The assignee verifies all data and clicks the completion action button (e.g.,
Submit). Orchestrator validates required fields, locks the form against further modifications, immutably records the completion timestamp and user identity in the audit log, and notifies the scheduler to resume the paused job.
6. Architectural Constraints & Serialization Rules
Because long-running workflows suspend execution by serializing memory to the Orchestrator SQL database, they operate under strict technical constraints that do not apply to transient, single-run unattended automations.
The Mandatory Serialization Rule
Caution
Non-Serializable Objects Cause Fatal Runtime Failures:
Every variable and object that remains in scope across a persistence boundary (Wait for Form Task and Resume, Resume After Delay) must be .NET serializable. If an in-scope variable cannot be serialized by the runtime serialization engine, the workflow throws a fatal System.Runtime.Serialization.SerializationException at the moment of suspension, crashing the job without creating a valid checkpoint!
| Variable Category | Allowed Across Suspension? | Architectural Guidance |
|---|---|---|
Primitive Data Types (String, Int32, Boolean, DateTime, Double) | YES | Native primitives serialize cleanly into JSON/binary streams. |
DataTables & Collections (DataTable, List<T>, Dictionary<K,V>) | YES | Standard collections serialize provided all inner types T, K, V are serializable. |
Active UI Automation Handles (UiElement, Target, BrowserWindow) | NO | Windows OS memory pointers and active DOM handles cannot be serialized to disk. Scope all UI activities inside isolated child sequences that complete and dispose variables before reaching wait activities. |
Open System Streams (FileStream, StreamReader, BinaryWriter) | NO | Active file system file locks and streams cannot cross network database boundaries. Close and dispose all streams prior to suspension. |
Database Connections (SqlConnection, DatabaseConnection) | NO | Active TCP sockets and open database transactions cannot be serialized. Disconnect cleanly; re-open connections post-resumption. |
State Locality and Machine Independence
In an elastic, multi-machine cloud robot pool, Job Resumption is Machine-Agnostic:
- A job may execute Phase 1 on VM
Node-Prod-01in Data Center East, suspend for four days while awaiting director approval, and resume Phase 2 on VMNode-Prod-08in Data Center West. - The Local File Anti-Pattern: Never save state-dependent files to local machine scratch paths (e.g.,
C:\Temp\Invoice104.pdf). When the job resumes on a different physical VM, local disk files will not exist, resulting in fatalFileNotFoundExceptionerrors. - Enterprise Solution: Store persistent binary files, documents, and intermediate artifacts in UiPath Storage Buckets, enterprise cloud storage (Azure Blob, AWS S3), or centralized network UNC shares (
\\nas01\rpa_share\), referencing only the file identifier or URI within workflow variables.
7. Timeout Management, SLAs & Escalation Architecture
What happens when a human approver fails to act on a task? Without proactive timeout handling, suspended jobs can linger in Orchestrator indefinitely, violating enterprise Service Level Agreements (SLAs) and stalling business operations.
The Parallel Timeout & Escalation Pattern
Enterprise orchestration processes implement Parallel Control Flow to enforce strict SLAs:
+-----------------------------------------------------------------------------------+
| PARALLEL SLA ESCALATION PATTERN |
| |
| [Parallel Activity] |
| (Condition: boolTaskCompleted = True) |
| │ |
| ┌─────────────────────────────┴─────────────────────────────┐ |
| ▼ ▼ |
| [Primary Approval Branch] [SLA Escalation Branch] |
| │ │ |
| WaitForFormTaskAndResume ResumeAfterDelay |
| (TaskInput: taskApproval) (Duration: 48 Hours)|
| │ │ |
| Assign: boolTaskCompleted = True Assign: boolTimedOut = True |
| │ │ |
| │ Send Reminder Email |
| │ Or Reassign Task |
| ▼ via Orchestrator API |
| [Normal ERP Processing] ▼ |
| [Auto-Reject / Escalate] |
+-----------------------------------------------------------------------------------+
- Implementation Mechanics: A
Parallelactivity is configured with two concurrent execution branches:- Branch 1 (Human Action): Hosts
Wait for Form Task and Resume. Upon completion, sets a flagboolTaskCompleted = True. - Branch 2 (SLA Timer): Hosts a
Resume After Delayactivity configured for the SLA duration (e.g.,TimeSpan.FromHours(48)). When the timer expires, the branch executes escalation logic: sending an automated warning email via Microsoft 365, calling the Orchestrator API to reassign the task to a senior director, or auto-rejecting the transaction.
- Branch 1 (Human Action): Hosts
- CompletionCondition: Setting the Parallel activity's
CompletionConditiontoboolTaskCompleted Or boolTimedOutcancels the other branch as soon as either flag is set.
8. Architectural Summary: Long-Running vs Standard Workflows
| Architectural Attribute | Standard Unattended Workflow | Long-Running Orchestration Workflow |
|---|---|---|
| Project Setting | supportsPersistence: false | supportsPersistence: true |
| Runtime Activity Package | UiPath.System.Activities | UiPath.Persistence.Activities |
| Execution Model | Continuous, synchronous execution | Asynchronous, suspendable execution |
| Idle License Consumption | Consumes 100% of robot license while waiting | 0% license consumption while suspended |
| Variable Scope Restrictions | Any valid .NET object in memory | All persistent variables must be serializable |
| Execution Host Affinity | Runs entirely on a single machine session | Can suspend on Machine A and resume on Machine B |
| Human Interaction Channel | Attended message boxes / UI popups (local) | Action Center web portal & mobile app (centralized) |
| Maximum Practical Wait Duration | Minutes (bounded by OS timeout & license cost) | Days, weeks, or months (unbounded database state) |
What happens to an unattended robot and its allocated runtime license when an orchestration process executes the Wait for Form Task and Resume activity?
The robot keeps its Windows session open and consumes a full unattended runtime license while executing a high-frequency polling loop against Orchestrator.
The robot shifts into a low-power background thread on the local machine, preventing other unattended processes from executing on that specific VM.
The job serializes its execution state into the Orchestrator database, transitions to Suspended status, and shuts down the executor process, completely freeing the runtime license and VM capacity for other queued jobs.
The workflow automatically converts into an attended automation process and transfers execution control directly to the local UiPath Assistant of the assigned user.
Which architectural constraint must be strictly observed regarding variables and state in a long-running workflow using the UiPath.Persistence.Activities framework?
All variables that remain in scope across a persistence suspension point must be .NET serializable, and active unmanaged handles such as open database connections, file streams, or UI elements must not be held across the wait activity.
All workflow variables must be declared as global Orchestrator Assets prior to executing the persistence activities.
Variables used across suspension boundaries cannot exceed 128 characters in length and must be converted to base64 strings.
The workflow cannot utilize DataTables or Dictionaries, as only primitive strings and 32-bit integers can be persisted to the Orchestrator database.
An RPA architect designs a solution where an unattended workflow must generate three independent approval requests for Legal, Finance, and Compliance departments simultaneously, and then pause execution until all three departments have submitted their decisions. Which design pattern correctly implements this requirement?
Run Create Form Task and then Wait for Form Task and Resume for Legal, then repeat for Finance, then for Compliance.
Invoke Create Form Task three times to create each task and keep the task objects without suspending, then wait for all three with Wait for Form Task and Resume activities in a Parallel or Parallel For Each.
Create a standard unattended workflow that emails three PDF forms and continuously queries the Orchestrator queue using a 10-second While loop until all three emails are returned.
Use three separate unattended robot machines, each executing a dedicated process that waits for a single department approval using modal Windows message boxes.
Sections you finish are checked off in the contents.