Salesforce Flow Orchestrator multi-user automation best practices (2025)
Orchestrates multi-user, multi-stage business processes with interactive steps and background automation.
npx claudepluginhub josiahsiegel/claude-plugin-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
Examples:
D:/repos/project/file.tsxD:\repos\project\file.tsxThis applies to:
NEVER create new documentation files unless explicitly requested by the user.
Flow Orchestrator enables you to orchestrate multi-user, multi-step, and multi-stage business processes without code. It allows different users to complete sequential tasks within a unified workflow, with built-in approvals, conditional logic, and error handling.
Key Capabilities:
| Use Case | Flow Orchestrator? | Why |
|---|---|---|
| Employee Onboarding (HR → IT → Manager) | ✅ Yes | Multi-user, sequential stages |
| Quote-to-Cash (Sales → Finance → Operations) | ✅ Yes | Cross-functional approval process |
| Case Escalation (L1 → L2 → L3 Support) | ✅ Yes | Tiered assignment with SLAs |
| Simple record automation (create/update) | ❌ No | Use Record-Triggered Flow |
| Single-user process | ❌ No | Use Screen Flow |
| Batch data processing | ❌ No | Use Scheduled Flow or Apex Batch |
Orchestration = Stages → Steps → Background Automations
Stage 1: "HR Review"
├─ Step 1.1: Interactive Step (HR Manager reviews)
├─ Step 1.2: Background Automation (create records)
└─ Decision: Approved? → Next Stage : End
Stage 2: "IT Provisioning"
├─ Step 2.1: Interactive Step (IT assigns equipment)
├─ Step 2.2: Background Automation (provision accounts)
└─ Step 2.3: Interactive Step (IT confirms completion)
Stage 3: "Manager Onboarding"
├─ Step 3.1: Interactive Step (Manager schedules 1:1)
└─ Step 3.2: Background Automation (send welcome email)
Requirements:
Setup → Flows → New Flow → Orchestration
Name: Employee_Onboarding
Object: Employee__c (custom object)
Trigger: Record Created, Status = 'Pending Onboarding'
Stage 1: HR Document Review
Stage Name: HR_Document_Review
Stage Description: HR verifies employee documentation
Run Mode: One at a Time (sequential)
Step 1.1 (Interactive):
- Name: Review_Documents
- Assigned To: Queue "HR_Onboarding_Queue"
- Due Date: 2 days from start
- Screen Flow: HR_Document_Review_Screen
- Inputs: Employee__c.Id
Step 1.2 (Background - Decision):
- If HR_Approved = true → Next Stage
- If HR_Approved = false → End + Send Rejection Email
Stage 2: IT Provisioning
Stage Name: IT_Provisioning
Condition: Runs only if Stage 1 approved
Step 2.1 (Interactive):
- Name: Assign_Equipment
- Assigned To: Queue "IT_Provisioning_Queue"
- Due Date: 3 days from stage start
- Screen Flow: IT_Equipment_Assignment
- Inputs: Employee__c.Id
Step 2.2 (Background):
- Name: Create_AD_Account
- Autolaunched Flow: Create_Active_Directory_Account
- Inputs: Employee__c.Email, Employee__c.FirstName
Step 2.3 (Background):
- Name: Send_IT_Confirmation
- Action: Send Email Template
- Recipient: Employee__c.Email
- Template: Welcome_Email
Stage 3: Manager Setup
Stage Name: Manager_Setup
Depends On: Stage 2 complete
Step 3.1 (Interactive):
- Name: Schedule_First_Day
- Assigned To: Employee__c.Manager__c
- Due Date: 1 day from stage start
- Screen Flow: Manager_Onboarding_Tasks
Step 3.2 (Background):
- Name: Update_Status
- Record Update: Employee__c.Status = 'Onboarding Complete'
Fault Path on IT Provisioning Failure:
If Step 2.2 (Create_AD_Account) fails:
├─ Retry Step (1 attempt after 10 minutes)
├─ If still fails:
│ ├─ Send email to IT Manager with error details
│ ├─ Create Task for manual provisioning
│ └─ Assign Interactive Step to IT Manager for resolution
└─ Continue to Stage 3 (don't block entire process)
Configuration:
Step 2.2: Create_AD_Account
├─ Fault Path Enabled: true
├─ Retry Attempts: 1
├─ Retry Delay: 10 minutes
└─ On Final Failure:
├─ Create Task
│ ├─ Subject: "Manual AD Account Creation Needed"
│ ├─ Assigned To: IT_Manager_Queue
│ └─ Priority: High
└─ Send Email Notification
├─ Template: IT_Provisioning_Failure
└─ Recipients: IT Managers
Use for: Actions requiring human judgment or input
Interactive Step Configuration:
├─ Screen Flow: Define UI for user input
├─ Assigned To: User, Queue, or Role
├─ Due Date: Formula (TODAY() + 2 for 2 days)
├─ Instructions: What user should do
├─ Input Variables: Data passed to screen flow
└─ Output Variables: Data returned from user
Example Screen Flow (HR Review):
Screen: Review Documents
├─ Display: Employee Name, Position, Documents Uploaded
├─ Input: Radio Button (Approve / Reject)
├─ Input: Text Area (Comments - required if reject)
└─ Action: Save & Submit
Output Variables:
- HR_Approved (Boolean)
- HR_Comments (Text)
Use for: Automated actions without user interaction
Background Step Types:
├─ Autolaunched Flow: Call another flow
├─ Apex Action: Invoke Apex method
├─ Send Email: Email template or custom
├─ Post to Chatter: Notify users
├─ Create Records: DML operations
├─ Update Records: Field updates
├─ External Service: REST callout
└─ Wait: Pause for duration or until condition
Use Case: Skip stages based on criteria
Stage 2: Manager Approval
Condition: Order_Total__c > 10000
Entry Criteria Formula:
{!$Record.Order_Total__c} > 10000
Result:
- If order <= $10,000 → Skip Stage 2, go to Stage 3
- If order > $10,000 → Execute Stage 2 (manager approval required)
Use Case: Multiple teams work simultaneously
Stage 3: Parallel Provisioning
Run Mode: All at Once (parallel)
Step 3.1 (Interactive): IT assigns laptop [Assigned to IT Queue]
Step 3.2 (Interactive): Facilities assigns desk [Assigned to Facilities Queue]
Step 3.3 (Interactive): HR orders business cards [Assigned to HR Queue]
Stage completes when: All steps complete
Use Case: Assign to different users based on record data
Step Assignment Formula:
IF(
{!$Record.Region__c} = 'West',
{!$User.WestCoastManager},
IF(
{!$Record.Region__c} = 'East',
{!$User.EastCoastManager},
{!$User.DefaultManager}
)
)
Use Case: Escalate if step not completed on time
Step Due Date: {!$Flow.CurrentDate} + 2 (2 days)
Scheduled Flow: Check_Overdue_Steps
- Schedule: Daily at 8 AM
- Query: OrchestrationWorkItem where DueDate < TODAY AND Status = 'In Progress'
- Action: Send escalation email to manager
Monitor with SOQL:
// Query overdue orchestration steps
List<FlowOrchestrationWorkItem> overdueItems = [
SELECT Id, Label, StepDefinitionName, AssignedToId,
RelatedRecordId, DueDate, Status
FROM FlowOrchestrationWorkItem
WHERE DueDate < TODAY
AND Status = 'InProgress'
ORDER BY DueDate ASC
];
// Send escalation notifications
for (FlowOrchestrationWorkItem item : overdueItems) {
sendEscalationEmail(item);
}
Query work items for reporting:
// Active orchestrations
List<FlowOrchestrationWorkItem> activeItems = [
SELECT Id, Label, StepDefinitionName, AssignedToId,
CreatedDate, LastModifiedDate, DueDate,
Status, RelatedRecordId
FROM FlowOrchestrationWorkItem
WHERE Status = 'InProgress'
ORDER BY DueDate ASC
];
// Calculate time spent in each step
for (FlowOrchestrationWorkItem item : activeItems) {
Long milliseconds = item.LastModifiedDate.getTime() - item.CreatedDate.getTime();
Decimal hours = milliseconds / (1000.0 * 60 * 60);
System.debug('Step: ' + item.Label + ', Time: ' + hours + ' hours');
}
Key Metrics to Track:
1. Average Time per Stage
SELECT StepDefinitionName,
AVG(LastModifiedDate - CreatedDate) as AvgDuration
FROM FlowOrchestrationWorkItem
WHERE Status = 'Completed'
GROUP BY StepDefinitionName
2. Completion Rate by Assignee
SELECT AssignedToId,
COUNT(CASE WHEN Status = 'Completed' THEN 1 END) as Completed,
COUNT(CASE WHEN DueDate < TODAY AND Status = 'InProgress' THEN 1 END) as Overdue
FROM FlowOrchestrationWorkItem
GROUP BY AssignedToId
3. Bottleneck Identification
- Which steps take longest?
- Which steps have highest rejection/failure rate?
- Which assignees have most overdue items?
public class OrchestrationMetrics {
@AuraEnabled(cacheable=true)
public static Map<String, Object> getMetrics() {
Map<String, Object> metrics = new Map<String, Object>();
// Total active orchestrations
Integer active = [SELECT COUNT() FROM FlowOrchestrationWorkItem WHERE Status = 'InProgress'];
metrics.put('active', active);
// Overdue count
Integer overdue = [SELECT COUNT() FROM FlowOrchestrationWorkItem
WHERE Status = 'InProgress' AND DueDate < TODAY];
metrics.put('overdue', overdue);
// Average completion time (last 30 days)
AggregateResult[] avgTime = [
SELECT AVG(LastModifiedDate - CreatedDate) avgDuration
FROM FlowOrchestrationWorkItem
WHERE Status = 'Completed'
AND CreatedDate = LAST_N_DAYS:30
];
metrics.put('avgCompletionHours', (Decimal)avgTime[0].get('avgDuration') / (1000.0 * 60 * 60));
return metrics;
}
}
Stage 2: Manager Approval
├─ Step 2.1 (Interactive): Manager reviews
│ └─ Screen Flow with Approve/Reject buttons
├─ Background Automation: Update approval status
└─ If Approved: Proceed to Stage 3
If Rejected: Send rejection email, End orchestration
Publish events at stage transitions:
trigger OrchestrationStageTrigger on FlowOrchestrationStageInstance (after insert, after update) {
List<OrchestrationStageEvent__e> events = new List<OrchestrationStageEvent__e>();
for (FlowOrchestrationStageInstance stage : Trigger.new) {
if (stage.Status == 'Completed') {
events.add(new OrchestrationStageEvent__e(
OrchestrationId__c = stage.OrchestrationInstanceId,
StageName__c = stage.StepDefinitionName,
CompletedDate__c = System.now()
));
}
}
if (!events.isEmpty()) {
EventBus.publish(events);
}
}
Subscribe externally:
// External system tracks orchestration progress
client.subscribe('/event/OrchestrationStageEvent__e', (message) => {
const { OrchestrationId__c, StageName__c } = message.data.payload;
console.log(`Stage ${StageName__c} completed for ${OrchestrationId__c}`);
// Update external dashboard
updateOrchestrationStatus(OrchestrationId__c, StageName__c);
});
AI agent handles certain steps:
Stage 2: Document Verification
├─ Step 2.1 (Background): AI agent verifies documents
│ └─ Agentforce Action: Verify_Document_Compliance
│ - Uses Einstein OCR to extract text
│ - Uses LLM to validate against compliance rules
│ - Returns: Compliant (true/false) + Confidence score
├─ Decision: If confidence < 90% → Human review
└─ Step 2.2 (Interactive - Conditional): Human verifies (if AI uncertain)
Issue 1: Work items not appearing for users
Causes:
- User not in assigned queue
- User lacks permission to object
- Filter criteria on view excludes item
Solution:
1. Check queue membership: Setup → Queues
2. Verify object permissions: User profile/permission set
3. Review work item list view filters
Issue 2: Background step failing silently
Causes:
- Apex error in called flow/action
- Required field missing
- Governor limit exceeded
Solution:
1. Enable debug logs: Setup → Debug Logs
2. Check Flow error emails: Setup → Process Automation Settings
3. Implement fault path to catch and handle errors
Issue 3: Orchestration not triggering
Causes:
- Trigger criteria not met
- Record not updated properly
- Orchestration inactive
Solution:
1. Verify record meets entry criteria
2. Check orchestration activation status
3. Review audit trail for record updates
// Query orchestration details for debugging
public class OrchestrationDebugger {
public static void debugOrchestration(Id recordId) {
// Find orchestration instances for record
List<FlowOrchestrationInstance> instances = [
SELECT Id, Label, Status, CreatedDate
FROM FlowOrchestrationInstance
WHERE RelatedRecordId = :recordId
ORDER BY CreatedDate DESC
];
for (FlowOrchestrationInstance instance : instances) {
System.debug('Orchestration: ' + instance.Label);
System.debug('Status: ' + instance.Status);
// Get work items
List<FlowOrchestrationWorkItem> items = [
SELECT Id, Label, Status, AssignedToId, DueDate
FROM FlowOrchestrationWorkItem
WHERE OrchestrationInstanceId = :instance.Id
ORDER BY CreatedDate
];
for (FlowOrchestrationWorkItem item : items) {
System.debug(' Step: ' + item.Label + ', Status: ' + item.Status);
}
}
}
}
Process Builder → Flow Orchestrator:
Process Builder supports only simple automation
Flow Orchestrator adds:
- Multi-user coordination
- Interactive steps
- Stage-based organization
- Visual progress tracking
- Fault handling
When to migrate:
- Process involves multiple users
- Need stage-based workflow
- Want user interface for steps
- Require better error handling
Flow Orchestrator transforms complex, cross-functional business processes into visual, manageable workflows that scale across your organization.
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use for discovering, retrieving, and improving prompts.
Search, retrieve, and install Agent Skills from the prompts.chat registry using MCP tools. Use when the user asks to find skills, browse skill catalogs, install a skill for Claude, or extend Claude's capabilities with reusable AI agent components.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.