Cuando un elemento se modifica, el desencadenador se repite sin fin: causa raíz y solución
🔍 WiseChecker

Cuando un elemento se modifica, el desencadenador se repite sin fin: causa raíz y solución

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.

ADVERTISEMENT

Por qué el desencadenador de modificación crea un bucle infinito

El bucle ocurre debido a un simple ciclo de causa y efecto:

  1. Tu flujo está configurado con el desencadenador Cuando se modifica un elemento en una lista o biblioteca de SharePoint específica.
  2. Cuando un usuario edita un elemento, el desencadenador se dispara y el flujo se ejecuta.
  3. 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.
  4. Power Automate envía la actualización a SharePoint. SharePoint registra el cambio como una modificación.
  5. 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.
  6. 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.

  1. 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.
  2. 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.
  3. 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ó.
  4. 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.

ADVERTISEMENT

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.

  1. Abre tu flujo en modo de edición
    Ve a Power Automate y abre el flujo que se repite. Selecciona Editar.
  2. 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.
  3. 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.
  4. 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.

  1. 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.
  2. 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')
  3. 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.
  4. 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.

ADVERTISEMENT

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 Solo si puedes comparar valores antes de actualizar
Requiere el nombre exacto de la cuenta de servicio 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.

ADVERTISEMENT