Revenue recognition batch job fails in project accounting after workflow migration

We recently migrated our project accounting workflows to D365 cloud (10.0.41) and now the revenue recognition batch job consistently fails during posting. The error appears to be related to workflow configuration but the logs aren’t giving clear direction.

The batch job runs for about 45 minutes then throws this error:


Workflow error: User assignment failed for approval step
Workflow instance: REV-2025-0314-001
Project contract: PC-10245

Our workflow configuration was migrated from on-premise using the standard migration tools. We’ve verified that all user roles exist in the cloud environment and the workflow definitions appear intact. However, something in the dependency chain seems broken - the batch job can’t assign the approval task to the correct user group.

This is blocking month-end close for project accounting. Has anyone dealt with workflow configuration issues after cloud migration, specifically around batch job dependencies and user role mapping?

Thanks for the suggestions. I checked the participant mappings and found that several position-based assignments are indeed missing in the cloud environment. The hierarchy was recreated but the workflow definitions still reference the old position IDs. Is there a way to bulk update these or do I need to manually edit each workflow step?

Here’s the comprehensive solution based on multiple cloud migrations I’ve handled:

1. Workflow Configuration Migration The core issue is that workflow participant assignments don’t translate directly from on-premise to cloud. You need to:

  • Navigate to Organization Administration > Setup > Workflow
  • Open each revenue recognition workflow definition
  • For every approval step, click Properties > Assignment
  • Change from Position-based to Role-based assignment where possible
  • If position-based is required, remap to the cloud position hierarchy

2. Batch Job Dependencies Revenue recognition requires proper sequencing:


// Configure batch job constraints:
Job: RevenueRecognition
Depends on: ProjectInvoicePost (must complete)
Depends on: WIPRecognition (must complete)
Max retry: 3
Timeout: 120 minutes

The batch framework in cloud is more strict about dependencies. Set these up in System Administration > Inquiries > Batch jobs > Job constraints.

3. User and Role Mapping This is critical and often overlooked:

  • Verify batch service account has Workflow user role assigned
  • Check that all workflow participants exist in Azure AD and are synced to D365
  • Update workflow participant providers to use cloud-compatible queries
  • Test workflow submission manually before enabling batch processing

Go to System Administration > Users > find your batch service account and add these roles:

  • Workflow user
  • System user
  • Project accountant (for revenue recognition context)

4. Workflow Cache Refresh After making changes:

  • Deactivate all affected workflows
  • Clear workflow cache: System Administration > Periodic tasks > Workflow > Clear workflow cache
  • Reactivate workflows
  • Run the batch job in manual mode first to verify

5. Logging and Monitoring Enable detailed workflow logging to catch future issues:

  • Organization Administration > Setup > Workflow > Workflow infrastructure configuration
  • Set Tracking level to “All”
  • Monitor batch job history for dependency failures

The key difference in cloud is that workflow processing is more isolated from the batch job context, so explicit role assignments and dependency chains are mandatory. After implementing these changes, your revenue recognition batch should complete successfully. Monitor the first few runs closely and check the workflow history logs to ensure all approval assignments resolve correctly.

I want to add something critical about batch job sequencing. Revenue recognition workflows often have dependencies on other batch jobs completing first - like project invoice posting or WIP recognition. In cloud, you need to explicitly configure these dependencies using batch job constraints, otherwise the workflow starts before prerequisite data is ready.

Adding to the above - we had a similar situation where the workflow was trying to resolve users based on position hierarchy that wasn’t properly established in cloud. The batch job failed because it couldn’t determine the approval chain. You need to check if your position hierarchy and security roles are correctly mapped. Also verify that the batch job user account has the necessary permissions to query the workflow participant provider.

I’ve seen this exact issue twice after cloud migrations. The problem is usually that workflow participant assignments don’t migrate cleanly. Check your workflow configuration under Organization Administration > Setup > Workflow and verify the participant type mappings. The batch job context runs under a system account, so if your workflow relies on hierarchical assignments, those mappings need to be reconfigured for cloud.

One thing that often gets missed: the batch job service account permissions. In cloud deployments, the batch processing runs under a managed service account that needs explicit access to workflow participant providers. Go to System Administration > Users and verify the batch service account has the Workflow user role assigned.

You’ll need to manually update the workflow definitions, but there’s a pattern to follow. First, deactivate all affected workflows. Then update each approval step to use role-based assignment instead of position-based if possible - it’s more stable in cloud. For position-based workflows that you must keep, you need to remap the positions using the Position hierarchy form and then refresh the workflow cache. Also check that your batch job dependencies are configured correctly - the revenue recognition job needs the workflow processing batch job to be running concurrently.