Has creado un flujo de Power Automate que se ejecuta cuando se modifica un elemento de SharePoint. Pero en lugar de ejecutarse una vez, el flujo se sigue disparando a sí mismo una y otra vez. Esto crea un bucle sin fin que puede generar miles de ejecuciones de flujo y ralentizar tu sitio.
La causa raíz es un desencadenador circular: tu flujo modifica el mismo elemento que observa. Cada modificación vuelve a disparar el flujo, que vuelve a modificar el elemento, y el ciclo nunca se detiene. Power Automate no detecta ni bloquea este patrón automáticamente.
Este artículo explica exactamente por qué ocurre el bucle y te ofrece dos soluciones fiables. Aprenderás a detener los bucles activos y a rediseñar tu flujo para que el bucle no vuelva a empezar.
Conclusiones clave: Detener y prevenir el bucle de modificación del desencadenador
- Condición de desencadenador de Power Automate: Agrega una condición que omita el flujo cuando el usuario que modifica sea el propio flujo para romper el bucle.
- Acción Terminar dentro del flujo: Usa la acción Terminar para detener una ejecución de flujo que se esté repitiendo antes de que modifique el elemento nuevamente.
- Historial de versiones de SharePoint: Revisa el historial de versiones del elemento para confirmar qué cambios está haciendo el flujo y cuántas veces.
Por qué el desencadenador de modificación crea un bucle infinito
El bucle ocurre debido a un simple ciclo de causa y efecto:
- Tu flujo está configurado con el desencadenador Cuando se modifica un elemento en una lista o biblioteca de SharePoint específica.
- Cuando un usuario edita un elemento, el desencadenador se dispara y el flujo se ejecuta.
- Dentro del flujo, tienes una acción que actualiza una columna en ese mismo elemento. Por ejemplo, estableces una columna Estado como “Aprobado” o agregas texto a una columna Comentarios.
- Power Automate envía la actualización a SharePoint. SharePoint registra el cambio como una modificación.
- Debido a que el elemento se modificó nuevamente, el desencadenador se dispara una segunda vez. El flujo se ejecuta de nuevo y la acción de actualización se ejecuta de nuevo.
- Este ciclo se repite para siempre hasta que detengas manualmente el flujo o SharePoint lo limite.
Power Automate no distingue entre un humano que realiza un cambio y el flujo que realiza un cambio. Ambos cuentan como modificaciones. El desencadenador no tiene un filtro incorporado para ignorar los cambios realizados por el propio flujo.
Otra causa común es usar la acción Actualizar elemento sin verificar si el valor ya coincide con el objetivo. Si el flujo siempre escribe el mismo valor, sigue provocando un evento de modificación incluso cuando nada ha cambiado realmente. SharePoint trata cada operación de escritura como una modificación, independientemente de si los datos cambiaron.
Cómo detener un bucle activo inmediatamente
Si tu flujo se está repitiendo actualmente, debes detenerlo antes de poder aplicar una solución permanente. Sigue estos pasos para romper el ciclo.
- Desactiva el flujo
Ve a Power Automate, abre tu flujo y selecciona Desactivar. Esto evita que se inicien nuevos eventos de desencadenador. Las ejecuciones existentes en curso continuarán hasta que finalicen o agoten el tiempo de espera. - Cancela las instancias en ejecución
En la página de detalles del flujo, ve a la pestaña Historial de ejecución de 28 días. Selecciona cualquier ejecución que aún esté en curso. Elige Cancelar para detenerla. Repite para todas las ejecuciones activas. - Revisa el historial de versiones del elemento
Abre la lista o biblioteca de SharePoint. Selecciona el elemento afectado y elige Historial de versiones. Verás muchas versiones creadas por el flujo. Esto confirma el bucle y te muestra cuántas veces se ejecutó. - Restaura el elemento a una versión limpia
En el Historial de versiones, selecciona la versión anterior al inicio del bucle. Haz clic en Restaurar. Esto elimina todos los cambios no deseados realizados por el flujo.
Después de estos pasos, el bucle se detiene. No vuelvas a activar el flujo hasta que apliques una de las soluciones siguientes.
Solución 1: Agregar una condición de desencadenador que verifique el campo Modificado por
La solución más fiable es agregar una condición de desencadenador que impida que el flujo se ejecute cuando la modificación haya sido realizada por el propio flujo. Power Automate se ejecuta bajo una cuenta de servicio llamada Microsoft Power Automate o Propietario del flujo dependiendo de tu entorno. Puedes verificar el campo Modificado por del elemento y omitir el desencadenador si el modificador es esa cuenta de servicio.
- Abre tu flujo en modo de edición
Ve a Power Automate y abre el flujo que se repite. Selecciona Editar. - Agrega una condición de desencadenador
Selecciona la tarjeta del desencadenador. En el menú superior, elige Configuración. En Condiciones de desencadenador, agrega la siguiente expresión:@not(equals(triggerOutputs()?['body/Editor/DisplayName'], 'Microsoft Power Automate'))
Si tu entorno usa un nombre de cuenta de servicio diferente, reemplaza Microsoft Power Automate con el nombre para mostrar real. - Guarda y prueba
Guarda el flujo. Modifica un elemento manualmente para verificar que el flujo se ejecute una vez. Luego verifica que el flujo no se ejecute nuevamente cuando se complete la acción de actualización. - Condición alternativa usando la búsqueda de Editor
Si el nombre para mostrar no coincide, usa el ID de Editor en su lugar:@not(equals(triggerOutputs()?['body/Editor/Id'], 'i:0i.t|microsoft.sharepoint.teamservices|flow@sharepoint'))
Este método funciona porque verifica quién realizó la última modificación. Si el flujo realizó el cambio, la condición se evalúa como falsa y el desencadenador no se dispara.
Solución 2: Usar una acción Componer y lógica condicional para evitar actualizaciones innecesarias
Si no puedes usar una condición de desencadenador, rediseña el flujo para que solo actualice el elemento cuando el valor realmente cambie. Esto evita el bucle incluso si el desencadenador se dispara nuevamente.
- Obtén los valores actuales del elemento
Agrega una acción Obtener elemento después del desencadenador. Usa el ID de elemento de la salida del desencadenador para recuperar los valores de columna actuales. - Compara los valores
Agrega una acción Componer que verifique si la columna de destino ya contiene el valor que deseas escribir. Por ejemplo, si deseas establecer Estado como “Completado”, usa esta expresión:@equals(outputs('Get_item')?['body/Status'], 'Completed') - Agrega una acción Condición
Agrega una acción Condición. Configúrala para verificar si la salida de Componer es igual a falso. Si el valor ya está establecido, la condición falla y el flujo termina sin actualizar. - Coloca la acción Actualizar elemento dentro de la rama Sí
Mueve tu acción Actualizar elemento a la rama Si sí de la Condición. Esto asegura que la actualización solo se ejecute cuando el valor sea diferente.
Esta solución rompe el bucle porque el flujo deja de actualizar el elemento después de la primera ejecución. El desencadenador puede dispararse nuevamente, pero la Condición evita cualquier actualización adicional.
Problemas comunes después de aplicar la solución
El flujo aún se repite incluso con una condición de desencadenador
La expresión de la condición de desencadenador puede usar el nombre de campo incorrecto o el nombre para mostrar de la cuenta de servicio no coincide. Abre el historial de ejecución y observa las salidas del desencadenador de una ejecución completada. Encuentra el campo Editor y copia el nombre para mostrar exacto. Actualiza la expresión con ese nombre.
El flujo deja de funcionar para modificaciones legítimas de usuarios
Si la condición de desencadenador es demasiado restrictiva, puede bloquear todas las modificaciones. Prueba con una cuenta de usuario que no sea el propietario del flujo. Si el flujo no se ejecuta, elimina la condición y usa el método de comparar y condicionar en su lugar.
El flujo se ejecuta pero la acción Actualizar elemento falla con un error de permisos
La cuenta de servicio del flujo debe tener permisos de edición en la lista o biblioteca. Ve a SharePoint, abre la configuración de la lista y verifica Permisos para esta lista. Agrega al propietario del flujo o a la cuenta de servicio con acceso de nivel Colaborar.
| Elemento | Método de condición de desencadenador | Método de comparar y condicionar |
|---|---|---|
| Complejidad de configuración | Baja: una expresión en la configuración del desencadenador | Media: varias acciones y una Condición |
| Detiene el bucle inmediatamente | Sí, bloqueando el desencadenador | No: el desencadenador aún se dispara pero se omite la actualización |
| Funciona con cualquier acción de actualización | Sí | Solo si puedes comparar valores antes de actualizar |
| Requiere el nombre exacto de la cuenta de servicio | Sí | No |
| Mejor para | Flujos simples que siempre actualizan la misma columna | Flujos complejos con actualizaciones condicionales |
Usa el método de condición de desencadenador cuando quieras una solución rápida y ligera. Usa el método de comparar y condicionar cuando necesites más control sobre cuándo ocurren las actualizaciones.
Ahora sabes por qué el desencadenador de modificación se repite y cómo detenerlo. Desactiva el flujo que se repite inmediatamente, aplica una de las dos soluciones y prueba con una edición manual. Para futuros flujos, diseñalos siempre de modo que el desencadenador y la acción de actualización no puedan crear una referencia circular. Una buena práctica es usar una lista separada para registrar cambios en lugar de actualizar el mismo elemento que desencadenó el flujo.