Construir

Ramas y bucles

Tres pasos repiten trabajo (y un cuarto, Intentar, mantiene un run en marcha tras un fallo): Bucle repite mientras se cumple una condición, los pasos Iterar ejecutan su cuerpo una vez por elemento de una colección, y Saltar vuelve a un paso anterior. Cada uno tiene un límite, y cada límite se aplica.

El «Bucle» paso repite los pasos de su interior mientras se cumple una condición, hasta un máximo de vueltas que tú fijas (un bucle nuevo empieza en 100; el máximo que puedes introducir es 500).

  • Antes de cada vuelta el motor comprueba el límite y después la condición. Un bucle con un máximo de N vueltas solo tiene éxito, por tanto, si la condición pasa a falsa tras como mucho N-1 vueltas del cuerpo. Si la condición solo pasara a falsa tras N vueltas, el paso falla con "the loop exceeded the N laps allowed".
  • Ese fallo termina el run como fallido, sin reintento automático, salvo que el bucle esté dentro de un Intentar. Pulsar Reintentar lo ejecuta otra vez, y se topa con el mismo límite.
  • El bucle no tiene una variable de elemento. La condición ve lo que produjo el cuerpo en las vueltas anteriores; las vueltas posteriores sobrescriben los valores con el mismo nombre, y el último valor se mantiene cuando termina el bucle.
  • Una espera dentro del cuerpo aparca toda la ejecución; cuando se reanuda, las vueltas anteriores se reproducen desde el registro.
  • Cada vuelta usa al menos uno de los 1000 pasos que puede dar una ejecución, solo por la condición. Un bucle de 500 vueltas con tres pasos en su cuerpo necesitaría 2000, así que el límite de la ejecución suele detener un bucle antes que su propio límite.
  • El paso de bucle en sí no cuesta ningún crédito; los pasos de su cuerpo cuestan uno por vuelta.

La primera vuelta

En la primera vuelta, una variable creada dentro del cuerpo aún no existe. Una condición "X es igual a true" es entonces falsa y el bucle no empieza nunca; "X es distinto de true" es verdadera y el bucle se ejecuta; "tiene algún elemento" hace fallar el paso. Para detener un bucle cuando un paso de su interior da un resultado, compara con «es distinto de».

Un paso Iterar resuelve una colección una vez y luego ejecuta su cuerpo una vez por cada elemento. Dentro del cuerpo, el elemento es una variable (el valor propio del paso). La colección se lee una vez y se registra, así que una ejecución reanudada recorre los mismos elementos aunque los datos hayan cambiado.

PasoColecciónArtículo
«Iterar lista»Cualquier lista de tu workflow: el resultado de una búsqueda, un campo de lista de un registro.El elemento de la lista
«Iterar adjuntos»Los adjuntos de un mensaje de email (necesita el id del mensaje).Id, nombre de archivo, tipo de contenido, tamaño
«Iterar mensajes del hilo»Los mensajes de un hilo de email.El mensaje
«Iterar miembros del canal»Los miembros de un canal de Slack.ID de usuario, nombre, nombre real, si es un bot
  • Una colección vacía no es un error: el cuerpo se omite.
  • Una colección de más de 500 elementos se rechaza antes de procesar el primero: el run falla con "resolved more than 500 elements" y no se reintenta. Nunca procesa solo los primeros 500. Acota el origen (un filtro, un rango de fechas) antes de iterar.
  • Una búsqueda que devuelve una página de resultados te da solo esa página.
  • Las variables creadas en el cuerpo se acumulan entre elementos, y se queda el valor del último elemento.
  • Cada paso del cuerpo cuenta para los 1000 pasos de la ejecución y cuesta créditos por cada elemento.

Los iteradores de email y de Slack se describen en Integraciones.

El «Saltar a un paso anterior» paso devuelve la ejecución a un paso anterior, para flujos de tipo reintento ("comprueba otra vez"). No tiene condición propia: ponlo dentro de un «Condición» para saltar de forma condicional.

  • El destino debe ser un paso anterior al salto: un paso anterior en el mismo nivel o en cualquier nivel superior, o un paso que contiene el salto. Un paso dentro de las ramas de un compuesto anterior no es un destino válido. Al guardar se rechaza un destino que no existe o que no es anterior.
  • Tú defines el número máximo de saltos (por defecto 3, entre 1 y 500). Cuando se agotan, la ejecución no falla: simplemente continúa con el siguiente paso.
  • Cada salto usa uno de los 1000 pasos de la ejecución y no cuesta ningún crédito por sí mismo. Los pasos entre el destino y el salto se vuelven a ejecutar en cada pasada; cada uno cuenta para los 1000 pasos y cuesta su propio crédito.
  • Las variables creadas por el camino se conservan; gana la última pasada.

El «Intentar» no es una repetición, sino que va con los demás pasos que contienen un cuerpo. No tiene campos: ejecuta los pasos de dentro y, si uno falla, el run continúa con el paso que sigue al Intentar en lugar de terminar. Su resultado («Ha fallado» y «Mensaje de error») es lo que pueden leer los pasos siguientes. Un Intentar alrededor de un bucle o de un paso Iterar captura el límite del bucle como fallo de paso, pero no el límite de 500 elementos de Iterar, que termina el run. En el visor de runs, el paso que falló dentro aparece como «Error capturado». El detalle, el patrón y lo que no captura están en Errores y reintentos.

No se declara un número máximo de pasos ni una anidación máxima para un workflow. El único límite estructural es que la definición guardada no puede tener más de 100 niveles de profundidad, contando cada envoltorio (cada paso anidado añade un par de niveles).

LímiteValorEn el límite
Vueltas de un Bucle500 como máximo (por defecto 100)El paso falla, la ejecución falla
Elementos de un paso Iterar500La ejecución falla antes de procesar ningún elemento
Saltos de un único paso Saltar500 como máximo (por defecto 3)La ejecución continúa con el paso siguiente
Pasos de una ejecución1000La ejecución falla, sin reintento

Todos los límites estrictos, con lo que ocurre en cada uno, están en Límites y créditos.

  • Construir

    Condiciones y operadores

    Una condición compara una variable con un valor. El paso Condición lleva el run por uno de dos caminos; el paso Switch elige el primero de varios.

  • Ejecutar

    Límites y créditos

    El motor aplica cada uno de los límites siguientes. La última columna dice qué ocurre cuando lo alcanzas, porque esa suele ser la pregunta.

  • Construir

    Datos y expresiones

    No escribes fórmulas en un workflow. Eliges valores de listas, y Filmo guarda lo que elegiste como una expresión estructurada. Esta página explica qué ofrece el selector y cómo se comportan los valores al ejecutarse.

¿Te ha resultado útil esta página?