Approval workflow gets stuck at manager level when escalation timer expires

Our approval workflows are getting stuck at the manager approval level when escalation timers expire. The escalation policy is configured to move approvals to the next level after 48 hours, but requests remain pending indefinitely. We’ve verified the escalation policy configuration shows correct timeout settings, and role hierarchy setup appears properly mapped in the organization structure.

The workflow definition includes timeout timer management with fallback escalation rules to department heads, but these never trigger:

<escalation timeout="48h" fallback="dept_head">
  <role>manager</role>
</escalation>

This blocks 30-40 change requests weekly, causing significant delays in engineering releases. The workflow engine logs show timer events firing but no escalation action executed. R2021x environment. Any insights on fixing stuck escalation workflows?

Your escalation failure stems from multiple configuration gaps that need systematic resolution across all four critical areas.

Escalation Policy Configuration: The XML syntax is correct, but you need to verify the policy is actually loaded. Check WorkflowAdministration > Escalation Policies and confirm your policy appears with status=“Active”. The timeout format should use ISO 8601 duration format (PT48H not 48h). Update your XML:

<escalation timeout="PT48H" fallback="dept_head" enabled="true">
  <role>manager</role>
  <action>ESCALATE_TO_SUPERIOR</action>
</escalation>

Role Hierarchy Setup: This is likely your primary issue. Escalation requires explicit superior relationships. Navigate to Organization Admin > Role Hierarchy and verify:

  1. Manager role has superior_role attribute set to dept_head
  2. Dept_head role exists in same organizational context
  3. Role inheritance is enabled (wt.org.inheritRoles=true)

Create missing hierarchy links:

<roleHierarchy>
  <role name="manager" superior="dept_head"/>
  <role name="dept_head" superior="director"/>
</roleHierarchy>

Timeout Timer Management: Timer events fire but don’t execute because the EscalationTimerListener isn’t registered. Add to wt.properties:


wt.workflow.engine.escalation.enabled=true
wt.workflow.engine.escalation.checkInterval=3600000
wt.workflow.engine.timer.listener=com.ptc.workflow.EscalationTimerListener

Restart method server after changes.

Fallback Escalation Rules: Your fallback rule needs explicit routing logic. The workflow definition must include state transitions for escalation paths. Add to your workflow template:

<state name="manager_approval">
  <transition event="timeout" target="escalated_approval">
    <action class="EscalationAction" method="escalateToFallback"/>
  </transition>
</state>

After implementing all four fixes, test with a workflow that has a 1-hour timeout to verify escalation triggers correctly. Monitor MethodServer logs for “EscalationEvent processed” messages to confirm proper execution.


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

Check if your fallback roles actually exist in the role hierarchy. We had a similar issue where the dept_head role wasn’t properly defined in the organization context, causing silent escalation failures.

The timer firing without action execution typically means the escalation handler isn’t properly registered. In R2021x, you need to verify that the EscalationHandler class is mapped in your workflow service configuration. Check wf.escalation.handler.class property and ensure it points to the correct implementation class. Also confirm that the workflow engine service is running with escalation processing enabled - this can be disabled accidentally during upgrades.

We encountered this exact problem. Our root cause was timeout values being stored in hours but the engine expecting milliseconds. Double-check your timeout format in the workflow XML definition.

Look at your role hierarchy setup more carefully. Even if roles exist, the escalation path needs explicit parent-child relationships defined. Manager → dept_head escalation won’t work unless dept_head is configured as the organizational superior to manager in the role structure. We had to rebuild our entire role hierarchy to fix this.

Check the workflow process definition for missing transition rules. Escalation timers can fire correctly but fail to move the workflow state if the transition from manager_approval to escalated_approval state isn’t properly defined with appropriate guards and actions.

I’ve debugged similar escalation failures. The issue is usually in the event listener configuration. The workflow engine timer service fires events, but if no listener is registered to handle escalation events, nothing happens. Check your event listener mappings in the workflow configuration files.