For the latest updates to this post please visit the original posting here: How to Fix Workflows Stuck in Waiting in CRM 2011

After applying Update Rollup 10, 11, 12 or 13 to Microsoft Dynamics CRM, you may see an issue where workflows that contain a step to send an email get stuck in a status of waiting. This specific issue occurs if the EnableRetrieveMultipleOptimization key exists in the registry and has a value of 2.

(As a side note, if you have workflows that are stuck in waiting and these conditions are NOT true, then we invite you to refer to another one of PowerObjects blogs, How to Fix a CRM Workflow Stuck In Progress.)

But let’s return to the original issue. We saw that system jobs for all workflows that included a step to send emails were stuck with a status of “Waiting,” but all other workflows were succeeding, so we were quickly able to rule out an Async Service issue.

If you have this problem, you can see the error by opening a system job of one of the workflows with a status of waiting, then expanding the details. This is the message:

Crm Exception: Message: Attribute objecttypecode on Entity PrincipalObjectAccessReadSnapshot is of type picklist but has Child Attributes Count 0, ErrorCode: -2147220912

workflows stuck in waiting status - error message

We noticed this error was present on multiple workflows and organizations. However, the error message is not enough to isolate the cause of the error.

At this point, a CRM Platform Trace is a great tool for revealing what is occurring at the platform layer in CRM, while triggering one of the problem workflows to run.

The key to identifying this issue was the exception in the CRM platform trace:

at CrmException..ctor(String message, Exception innerException, Int32 errorCode, Boolean isFlowControlException)  ilOffset = 0×0

at CrmException..ctor(String message, Int32 errorCode)  ilOffset = 0×0

at PagingHelper.GetPagingFieldValue(AttributeMetadata attribute)  ilOffset = 0xA6

at PagingHelper.Serialize(OrderExpressionCollection orderCollection, BusinessEntityCollection entities, EntityExpression entityExpression, ExecutionContext context)  ilOffset = 0xF6

at PagingHelper.CreatePagingCookie(BusinessEntityCollection entities, EntityExpression entityExpression, ExecutionContext context)  ilOffset = 0×36

at Business.QueryAndFillEntityCollection(CrmDbConnection dbConnection, IDbCommand dbCommand, BusinessEntityCollection entities, EntityExpression entityExp, PagingHelper pagingHelper, Boolean useEntityExpression, String aggregateLimitExceededName, ExecutionContext context)  ilOffset = 0x6A

at Business.DoRetrieveMultiple(BusinessEntityCollection entities, EntityExpression entityExp, DatabaseQueryTarget queryTarget, PagingHelper pagingHelper, ExecutionContext context)  ilOffset = 0×41

at Business.DoRetrieveMultiple(BusinessEntityCollection entities, EntityExpression entityExp, DatabaseQueryTarget queryTarget, ExecutionContext context)  ilOffset = 0×40

The “GetPagingFieldValue” would only appear if the EnableRetrieveMultipleOptimization was present with a value of 2. Since the CRM Server was on UR 12, the EnableRetrieveMultipleOptimization was no longer needed. The logic for optimizing the performance for queries which run against large sets of data changed with Update Rollup 10. In other words, the old logic was causing the issue with workflows.

The resolution to this issue is to delete the EnableRetrieveMultipleOptimization registry key and restart all the CRM services. Voila! That’s it.

Hope this helps. If you’re looking for additional technical support from PowerObjects, don’t hesitate to contact us.

Happy CRM’ing!

 

The post How to Fix Workflows Stuck in Waiting in CRM 2011 appeared first on PowerObjects.