workflowdynamics-crm-onlinedynamics-crm-2015

Dynamics CRM workflow failing with infinite loop detection - but why?


I want to run a plug-in every 30 minutes, to poll an external system for changes. I am in CRM Online, so I don't have ready access to a scheduling engine.

To run the plug-in, I have a 'trigger' entity with a timezone independent date-

Updating the field also triggers a workflow, which in pseudocode has this logic:

If (Trigger_WaitUntil >= [Process-Execution Time])
{
  Timeout until Trigger:WaitUntil
  {
    Set Trigger_WaitUntil to [Process-Execution Time] + 30 minutes
    Stop Workflow with status of: Succeeded
  }
}
If Trigger_WaitUntil < [Process-Execution Time]) 
{
  Send email //Tell an admin that the recurring task has self-terminated
  Stop Workflow with status of: Canceled
}

So, the behaviour I expect is that every 30 minutes, the 'WaitUntil' field gets updated (and the Plug-in and workflow get triggered again); unless the WaitUntil date is before the Execution time, in which case stop the workflow.

However, 4 hours or so later (probably 8 executions, although I haven't verified that yet) I get an infinite loop warning "This workflow job was canceled because the workflow that started it included an infinite loop. Correct the workflow logic and try again. For information about workflow".

My question is why? Do workflows have a correlation id like plug-ins, which is being carried through to the child workflow? If so, is there anyway I can prevent this, whilst maintaining the current basic mechanism of using a single trigger record to manage the schedule (I've seen other solutions in which workflows create new records, but then you've got to go round tidying up the old trigger records as well)


Solution

  • The current supported method for CRM is to use the Azure Scheduler.

    Excerpt:

    create a Web API application to communicate with CRM and our external provider running on a shared (free) Azure web site and also utilize the Azure Scheduler to manage the recurrence pattern.

    The free version of the Azure Scheduler limits us to execution no more than once an hour and a maximum of 5 jobs. If you have a lot going on $20 a month will get you executions every minute and up to 50 jobs - which sounds like a pretty good deal.

    so if you wanted every 30 minutes, you could create two jobs, one on the half hour, and one on the hour.