actualización
Debería haber añadido desde el principio - esto es en Microsoft Dynamics CRM¿Por qué se activa la protección infinita de bucle en mi flujo de trabajo de CRM?
conozco bien CRM, pero estoy en una pérdida para explicar el comportamiento de mi despliegue actual .
Lea el bosquejo de mi escenario para ayudarme a entender cuál de mis presunciones/interpretaciones es incorrecta (y, por lo tanto, cuál es la causa de este error). No es consistente con mis expectativas.
básico Escenario
- requisito que exige un servicio web se llama cada X minutos (que se suma a la espera de artículos a un índice de base de datos)
- He optado por utilizar una entidad de flujo de trabajo/personalizada modelo desencadenante (es decir, tengo una entidad personalizada que tiene un complemento CREATE registrado. El complemento ejecuta mi lógica. Un flujo de trabajo acompañante se inicia cuando tiempo "completado" + [período de tiempo de espera] expira. Al expirar, crea un nuevo registro desencadenante y el flujo de trabajo termina).
- La lógica del complemento funciona bien. El concepto de flujo de trabajo funciona bien hasta cierto punto, pero después de un período de tiempo el flujo de trabajo se detiene con un error:
Este trabajo de flujo de trabajo se canceló porque el flujo de trabajo que lo inició incluía un ciclo infinito. Corrija la lógica del flujo de trabajo y vuelva a intentarlo. Para obtener información sobre la lógica del flujo de trabajo, consulte la Ayuda.
despliegue específico
En primer lugar, creo que es bastante seguro para nosotros ignorar el contenido del código del plugin en este escenario. Funciona bien, es atómico y apenas toca CRM (para ser claros, es un plugin previo al evento que ejecuta el servicio web remoto, espera una respuesta y luego establece el atributo de fecha/hora "completado" en mi registro de activación antes de pasar la entidad objetivo de nuevo en la tubería). Siempre que se cree un registro de Disparo, este código se ejecuta y hace lo que debería.
Después de haber descontado el contenido del plugin, puede haber un problema que no me gusta en tener el plugin registrado en el pre-crear el paso de la entidad ...
Así que deja el flujo de trabajo propio . Es simple. Se ejecuta así:
- En la creación de una nueva entidad de disparo ...
- que tiene un tiempo de espera de 15 minutos + Trigger.new_completedon
- el tiempo de espera, se crea un nuevo registro de activación (sin " completado en "valor: esto lo establece el complemento recordar)
- Eso es todo, no hay un" flujo de trabajo final "explícito (aunque acabo de agregar uno ahora y lo estableceré para probar ...)
Con esta configuración, creo manualmente un nuevo registro de Disparo y el proceso se activa muy bien. Avanzar 1h 58 mins (basado en el último ciclo que ejecuté, recordando que mi código de complemento puede tardar un minuto en ejecutarse), después de 7 ciclos de ejecución exitosos (es decir, nuevos trabajos de flujo de trabajo creados y completados), el 8º falla con el el error mencionado anteriormente.
lo que ya sé (corregirme cuando me equivoco)
Recursion depth, by default, is set to 8. Si un flujo de trabajo/complemento se llama a sí mismo 8 veces, se detecta un ciclo infinito.
Recursion depth is reset every one hour (or 10 minutes - see "Warnings" in linked blog?)
Recursion depth settings can be set via PowerShell o código SDK utilizando el Deployment Web Serviceen una implementación local solamente (via the Set-CrmSetting Cmdlet)
lo que no quiere oír (por favor)
"Cambiar la configuración de profundidad de recursión"
No puedo cambiar la configuración de Profundidad de recursión de implementación, ya que no es una opción en un escenario en línea; en última instancia, también implementaré en CRM Online.
"Aumentar el tiempo de espera en su flujo de trabajo"
Esta no es una opción, ya sea - el reindex tiene que ocurrir cada 15 minutos, a ser posible antes.
actualización
@Boone sugiere a continuación que el tiempo de espera de nivel de recursividad se restablece después de 60 minutos de inactividad en vez de cada 60 minutos. Ahí radica el primer malentendido.
Al hablar con @alex, sugerí que puede haber cierta persistencia de CorrelationId entre crear una entidad a través del flujo de trabajo y el flujo de trabajo que se genera finalmente ... Bueno, sí existe. El Id. De correlación es el mismo tanto en el complemento como en el flujo de trabajo y cualquier registro que se encargue de ese subproceso. Ahora estoy buscando formas de desacoplar la CorrelationId (o tal vez la creación de registros) de la entidad y el flujo de trabajo.
El flujo de trabajo se está llamando a sí mismo, es por eso que termina en un ciclo infinito. Tendrá que replantearse todo el enfoque, aumentar la profundidad o el tiempo de espera solo retrasaría la eliminación del proceso debido a un bucle infinito. – Alex
Gracias por su respuesta Alex - lo ha hecho sonar simple, pero no creo que sea así. Incluso si aceptamos que el flujo de trabajo se está llamando a sí mismo (MSCRM cree que sí, creo que no es así), el flujo de trabajo crea un nuevo registro, en lugar de volver a llamarse explícitamente como flujo de trabajo secundario. Esperaría que fuera un nuevo ". hilo "- aunque quizás el Id. de correlación del complemento herede del padre y pase a los flujos de trabajo secundarios posteriores), la profundidad de la recursión debe reiniciarse cada 10 o 60 minutos, pero no es así. –
Creo que MSCRM realmente reconoce que la recursión indirecta tiene lugar allí debido exactamente a los Índices de Correlación, por eso la detección de bucles entra en acción. Estoy intrigado, experimentaré un poco y me pondré en contacto contigo (esto también podría ser útil para mí, ¿quién sabe si/cuándo recibiré un requisito similar? (:) – Alex