Próximamente en Salesforce AppExchange

Bucles en Salesforce Flow: un registro por fecha o turno

Una pantalla, muchos registros. El patrón de bucle que necesita todo el que crea flujos de pantalla, con tres flujos de ejemplo para copiar: turnos, días libres y rangos de fechas.

Publicado el 29 de octubre de 2026 · MultiDatePick

Un reclutador tiene que añadir doce turnos a un puesto. Un responsable aprueba una semana libre. Una organizadora de eventos reserva un taller de tres días y un día de seguimiento. Cada caso es una sola decisión en una sola pantalla, y cada uno debería convertirse en varios registros.

Los flujos de pantalla no tienen ningún elemento que diga «crea un registro por fecha». Se construye con tres piezas estándar: un bucle, una asignación y un solo guardado. Este artículo explica ese patrón y te da tres flujos que funcionan con él.

El patrón nace de un proyecto de reclutamiento en TalentRover, donde los reclutadores tenían que añadir una serie de turnos a un puesto. Introducirlos registro a registro llevaba más tiempo que la propia planificación. Elegir los días y las horas una vez y dejar que un bucle escribiera los turnos lo resolvió, y funciona igual con cualquier objeto.

El patrón en cinco elementos

Un flujo de pantalla de Salesforce en Flow Builder que añade turnos: una pantalla de MultiDatePick, una acción Parse Date Entries, un bucle que crea cada turno y un único Crear registros después del bucle
El flujo de ejemplo Add Shifts. El guardado va después del bucle, no dentro.
  1. Pantalla. Un calendario de MultiDatePick en el que el usuario elige todas las fechas a la vez, y las horas si las necesitas.
  2. Análisis. La acción Parse Date Entries from JSON convierte la selección en una lista que Flow puede recorrer en un bucle.
  3. Bucle. Un elemento Bucle recorre la lista, una entrada cada vez.
  4. Asignación. Dentro del bucle: copia la fecha y las horas de la entrada en una variable de registro y después añade ese registro a una colección de registros.
  5. Crear registros. Después del bucle, un único Crear registros guarda toda la colección.

Por qué el guardado va después del bucle

Es tentador poner un Crear registros dentro del bucle: una vuelta, un registro. Funciona con tres fechas y falla con treinta. Cada Crear registros es un guardado independiente en la base de datos, y Salesforce admite 150 por transacción, compartidos con todos los desencadenadores y flujos que esos guardados ponen en marcha. Un guardado dentro del bucle consume uno por fecha.

Crear una colección y guardarla una vez consume un solo guardado en total, elija lo que elija el usuario. Además es más rápido, y guarda todo o nada, así que un fallo nunca deja la mitad de los turnos a medias.

Crear registros dentro del bucleColección guardada después del bucle
Guardados para 30 fechas301
Riesgo de límitesCrece con cada fecha elegidaNinguno por el bucle
Si hay un errorAlgunos registros se guardan y otros noTodo o nada

Caso de uso: añadir turnos a un puesto

El reclutador abre el flujo desde el puesto, elige los días del turno en el calendario y las horas en la cuadrícula de horarios, y hace clic en Siguiente. El flujo escribe un turno por día, vinculado al puesto.

Selector de fecha y hora de MultiDatePick en un flujo de pantalla de Salesforce: tres días de turno elegidos en noviembre con la franja de 13:00 a 14:00 seleccionada para todos
Tres días de turno y un rango de horas, elegidos en una sola pantalla. El flujo los convierte en tres registros de turno.

El calendario entrega la selección al flujo como JSON en su salida selectedDatesWithTimesJson. Flow no sabe leer JSON, y ahí entra el analizador. Cada entrada que devuelve tiene estos campos:

CampoTipoContiene
fromDateDateEl día del turno
toDateDateEl mismo día en un turno; el último día en un rango
startTimeHoraLa primera franja elegida
endTimeHoraEl final de la última franja elegida

Las franjas contiguas forman un solo turno, así que 13:00 y 13:30 se convierten en de 13:00 a 14:00. Si eliges dos bloques separados en un día, por ejemplo uno de mañana y otro de tarde, obtienes dos entradas y dos turnos para ese día.

Flujo de ejemplo: Add Shifts

Elige días y horas y guarda un turno por bloque, vinculado al registro desde el que se lanza el flujo. MDP_Starter_Add_Shifts.flow-meta.xml

Descargar

Caso de uso: un registro por cada día libre

Las ausencias suelen contarse por días: la nómina cuenta días, y una solicitud aprobada a medias hay que dividirla por días de todos modos. Aquí ni siquiera necesitas el analizador. El componente Date también devuelve selectedDates, una lista de texto simple con cada día elegido, con los rangos desglosados día a día.

Recorre esa lista directamente en el bucle. La única pega es que cada elemento es texto, como 2026-11-09, así que una fórmula de una línea, DATEVALUE({!Loop_Days}), lo convierte en fecha antes de que la asignación lo copie en el registro.

Flujo de ejemplo: Record per Day

Elige días y rangos y guarda un registro por cada día, sin necesidad de analizador. MDP_Starter_Record_Per_Day.flow-meta.xml

Descargar

Caso de uso: un registro por rango de fechas

Algunas cosas abarcan varios días pero son una sola: un taller de tres días, el alquiler de un equipo, una visita a obra de lunes a miércoles. Eso pide un registro con fecha de inicio y fecha de fin, no tres.

Para eso está la salida selectedDateRangesJson. El calendario une los días contiguos en un solo rango, así que elegir el 9, el 10 y el 11 da una entrada del 9 al 11. Analízala, recórrela en un bucle y copia fromDate y toDate en los campos de inicio y fin.

Flujo de ejemplo: Record per Range

Elige fechas y rangos y guarda un registro por rango con su fecha de inicio y de fin. MDP_Starter_Record_Per_Range.flow-meta.xml

Descargar
¿Reservas un recurso? No necesitas bucle. El componente Booking guarda sus propias reservas, comprobando la capacidad y los conflictos sobre la marcha, e informa al flujo de cuántas guardó en bookingSuccessCount y de qué fechas entraron en conflicto en bookingConflictDates.

Usa un flujo de ejemplo en tu organización

Los flujos de ejemplo guardan en los objetos Schedule y Event que vienen con MultiDatePick, así que se implementan tal cual y funcionan nada más instalar. Cambia a tus propios objetos cuando hayas visto que funcionan.

  1. Copia o descarga el XML del flujo de arriba.
  2. Impleméntalo desde VS Code. Implementar un flujo desde VS Code lo explica paso a paso.
  3. Ábrelo en Flow Builder y haz clic en el calendario de la primera pantalla. Escribe el Config Name (Nombre de configuración) de una configuración que hayas guardado en el asistente de configuración, o de una importada de la Config Library, para aplicarle tus ajustes.
  4. Apúntalo a tus objetos si no usas Schedule y Event: cambia el objeto de la variable de registro y los campos de la asignación.
  5. Actívalo y añádelo a la página de registro con el componente Flow o como acción. Lee el Id del registro de su variable recordId.

Errores que cuestan una tarde

  • Guardar dentro del bucle. Bien en una prueba con tres fechas, un error de límites en producción con cuarenta.
  • Olvidar añadir el registro a la colección. La asignación necesita dos partes: definir los campos y después Add la variable de registro a la colección. Sin la segunda, el guardado del final no tiene nada que guardar.
  • Asignar texto a un campo de fecha. La lista selectedDates es texto. Envuelve antes cada elemento en DATEVALUE().
  • Dejar desactivado Output As JSON. Las salidas JSON solo se rellenan cuando el ajuste Output As JSON del calendario está activado. Los flujos de ejemplo lo activan.
  • Lanzarlo desde el sitio equivocado. El flujo vincula cada registro a recordId. Ejecútalo desde el puesto, el evento o la persona a la que pertenecen los registros, o el vínculo se queda vacío.

Preguntas frecuentes

¿Cómo creo varios registros desde un flujo de pantalla (Screen Flow) de Salesforce?

Recoge las opciones en una pantalla, recórrelas en un bucle y, dentro del bucle, usa una Asignación para rellenar una variable de registro y añadirla a una colección de registros. Después del bucle, un único elemento Crear registros guarda toda la colección.

¿Crear registros debe ir dentro de un bucle de Flow?

No. Un Crear registros dentro de un bucle guarda una vez por elemento, y una transacción admite 150 de esos guardados, así que una lista larga falla y cualquier lista va más lenta. Crea una colección de registros en el bucle y guárdala una sola vez cuando termine.

¿Cómo recorro un JSON en un bucle de Salesforce Flow?

Flow no sabe leer JSON por sí solo. Primero conviértelo en una colección: MultiDatePick incluye una acción, Parse Date Entries from JSON, que transforma la salida JSON del calendario en una lista de entradas con fromDate, toDate, startTime y endTime, que un elemento Bucle puede recorrer.

¿Cómo añado varios turnos a un puesto en Salesforce?

Coloca un selector de fecha y hora en un flujo de pantalla que se lance desde el registro del puesto, deja que el reclutador elija los días y las horas de los turnos, convierte la selección en una lista y recórrela en un bucle para crear un registro de turno por día, vinculado al puesto. Guárdalos todos en un único Crear registros después del bucle.

¿Necesito Apex para recorrer las fechas elegidas en un bucle?

No. La acción de análisis viene con MultiDatePick, y el bucle, la asignación y el guardado son elementos estándar de Flow. Para días completos ni siquiera necesitas la acción: el calendario también devuelve una lista simple con los días elegidos.

Una pantalla y todos los registros que debe crear.

Copia un flujo de ejemplo de arriba, o prueba antes el calendario en la demo en vivo.

  • US$20/usuario/mes, todas las funciones
  • Prueba gratis de 30 días, sin tarjeta
  • 100 % nativo de Salesforce
  • Sin Apex
  • Próximamente en Salesforce AppExchange