Quote approval workflow remains in pending state after manager approval action

We have a quote approval workflow that gets stuck in pending state after managers submit their approval. The workflow is configured with a two-tier approval process: first the sales manager approves, then the finance manager reviews. The issue occurs at the transition between these two approval stages.

When the sales manager clicks ‘Approve’ in the approval notification, the workflow shows their approval was recorded, but it never advances to the finance manager approval step. The workflow status remains ‘Pending Manager Approval’ instead of moving to ‘Pending Finance Approval’.

Here’s the workflow trigger configuration we’re using:


WorkflowTrigger trigger = new WorkflowTrigger();
trigger.setObject("Quote");
trigger.setEvent("StatusChange");
trigger.addCondition("ApprovalStatus", "equals", "Manager_Approved");

The delayed quote processing is impacting our sales cycle. Quotes are sitting in limbo for days until someone manually intervenes. The workflow logs don’t show any errors, it just stops progressing. Has anyone dealt with quote approval workflows getting stuck after approval actions in OCX 23B?

This is a classic workflow synchronization issue in Oracle CPQ integrated with CX Cloud. The problem occurs because quote approval actions and workflow trigger evaluations operate in different execution contexts, causing the workflow to miss the status transition event. Let me provide a comprehensive solution addressing all three focus areas.

Quote Approval Process Architecture: The root issue is that your workflow is using a status-change trigger, but approval actions in OCX 23B update the approval history object first, then asynchronously update the quote status. This creates a race condition where your workflow trigger evaluates before the status field commits.

Redesign your approval workflow structure:

  1. Remove the status-change trigger approach entirely
  2. Use approval event triggers instead: Configure your workflow to trigger on ‘ApprovalCompleted’ event type
  3. Implement a state machine pattern with explicit stage transitions rather than relying on field watches

Workflow Trigger Correction: Replace your current trigger code with an event-based approach:

// Event-based trigger (pseudocode)
trigger.setEvent("ApprovalAction.Completed");
trigger.addCondition("ApproverRole", "equals", "SalesManager");
trigger.addCondition("Action", "equals", "Approved");

This ensures the workflow advances immediately when the approval action completes, without waiting for asynchronous status updates.

Approval Action Implementation: The approval action itself needs modification to properly signal workflow progression. Instead of just updating the status field, implement a comprehensive approval handler:

// Approval handler script
approval.recordAction("Approved", currentUser);
quote.setApprovalStage("FinanceReview");
WorkflowEngine.triggerNext(quote.getId());

This explicitly advances the workflow to the next stage and ensures the trigger fires correctly.

Complete Solution Steps:

  1. Modify Workflow Definition:

    • Navigate to Setup > Workflow Automation > Quote Approval Workflow
    • Change trigger from ‘Status Change’ to ‘Approval Completed’
    • Add approval role filter: ApproverRole = ‘SalesManager’
    • Configure next action to assign to finance manager approval queue
  2. Update Approval Actions:

    • Edit the manager approval action configuration
    • Add post-approval script that explicitly triggers workflow continuation
    • Use REST API call to notify workflow engine:
    
    POST /crmRestApi/resources/latest/workflows/{workflowId}/advance
    Body: {"quoteId": "${Quote.Id}", "stage": "FinanceReview"}
    
  3. Implement Approval Stage Field:

    • Create custom field: ApprovalStage__c (picklist)
    • Values: Pending, ManagerReview, FinanceReview, Approved, Rejected
    • Update workflow to trigger on this field change instead of generic status
    • This provides explicit control over workflow progression
  4. Add Workflow State Validation: Configure validation rules to prevent workflow from getting stuck:

    • If ApprovalStage = ‘ManagerReview’ for > 24 hours, send escalation alert
    • Add timeout handling that auto-advances or reassigns stalled approvals
    • Implement a daily scheduled job that identifies and fixes stuck workflows
  5. Testing and Monitoring:

    • Enable debug logging for approval workflows
    • Add custom audit fields to track approval timestamps
    • Create a dashboard showing quotes in each approval stage with age
    • Set up alerts for workflows stuck in pending state > 4 hours

Alternative Approach (If Code Changes Not Feasible): If you cannot modify the workflow trigger logic, implement a workaround using scheduled automation:

  • Create a scheduled flow that runs every 15 minutes
  • Query for quotes where ApprovalStatus = ‘Manager_Approved’ AND ApprovalStage != ‘FinanceReview’
  • For each found quote, explicitly update ApprovalStage to ‘FinanceReview’
  • This forces the workflow to advance even if the original trigger failed

This comprehensive solution ensures quote approval workflows progress reliably through all approval stages without getting stuck in pending states. The event-based trigger approach eliminates the timing race condition that causes the current issue.


This draft is based on general Oracle CX Cloud knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

The trigger looks correct but check if the ApprovalStatus field is actually being updated to ‘Manager_Approved’ when the manager approves. Sometimes the approval action updates a different field or uses a different status value than expected.

I’ve seen this behavior when approval actions don’t properly commit the status change before the workflow evaluates the next trigger condition. The approval might be recorded in the approval history but the Quote object’s status field hasn’t updated yet. Try adding an explicit status update action in your workflow after the manager approval is received, before checking the condition for the finance approval step. Also verify that your workflow isn’t relying on external approval objects that update asynchronously.

Good point about the status update timing. I checked and the ApprovalStatus field does show ‘Manager_Approved’ in the quote record, but only after several minutes. Could this delay be causing the workflow trigger to miss the status change event?

Yes, that timing delay is definitely the problem. The workflow trigger is evaluating before the approval action fully commits the status change. You need to restructure your workflow to use event-based triggers rather than status polling. Consider using the approval completion event as the trigger instead of watching for status changes.

Another issue could be transaction isolation. If the approval action and workflow evaluation are happening in separate transactions, the workflow might read the old status value before the approval transaction commits. Check your workflow transaction settings and ensure proper isolation levels are configured.

I recommend adding explicit logging to your workflow to track exactly when each step executes and what field values it sees. This will help you identify if it’s a timing issue, a field mapping problem, or a trigger condition problem. You can use groovy scripts to log the quote status at each workflow step.