Guía del usuario de MultiDatePick
Cada componente, cada ajuste y cada trampa, en el orden en que los encuentra un administrador. Sin necesidad de Apex.
Contenido
- Los tres componentes
- Estructuras de registro
- Recorrido por el asistente de configuración
- Conjuntos de permisos y acceso
- Guardar con un clic o guardar desde el flujo
- Colores de estado y modo edición
- Vistas: cinco diseños, un componente
- Reserva de recursos y capacidad
- Limitar lo que seleccionan los usuarios
- Bloquear fechas, horas y recursos
- Páginas públicas para invitados
- Problemas habituales (preguntas frecuentes)
- Recetas de flujos
- Asignación de objetos y campos
- Referencia de todas las propiedades
- Seguridad y accesibilidad
- Preguntas / errores
1. Los tres componentes: cuándo usar cada uno
MultiDatePick incluye tres Lightning Web Components sobre una misma base. Elige el que encaje con tus datos.
Date
En los generadores: MultiDatePick - Dates
Selecciona muchas fechas a la vez. Ideal para confirmaciones de asistencia, control de presencia, vacaciones, fechas bloqueadas y calendarios de festivos.
Date Time
En los generadores: MultiDatePick - Dates & Times
Fechas más franjas horarias. Ideal para clases, citas, bloques de formación y turnos.
Booking
En los generadores: MultiDatePick - Resource Booking
Fechas, horas y un recurso. Ideal para salas, equipos, personas y todo lo que tenga capacidad.
Comparativa de funciones
Las funciones se suman. Todo lo que tiene Date está también en Date Time y Booking. Date Time añade horas; Booking añade recursos y capacidad.
| Función | Date | Date Time | Booking |
|---|---|---|---|
| Disponible en los tres componentes | |||
| Selección de fechas | ✓ | ✓ | ✓ |
| Cinco vistas | ✓ | ✓ | ✓ |
| Colores de estado | ✓ | ✓ | ✓ |
| Fechas bloqueadas | ✓ | ✓ | ✓ |
| Cargar registros existentes | ✓ | ✓ | ✓ |
| Modo edición | ✓ | ✓ | ✓ |
| Patrones recurrentes | ✓ | ✓ | ✓ |
| Solo Date Time y Booking | |||
| Franjas horarias | ✓ | ✓ | |
| Registros de sub-bloque | ✓ | ✓ | |
| Solo Booking | |||
| Selector de recursos | ✓ | ||
| Indicadores de capacidad | ✓ | ||
2. Estructuras de registro: cuándo usar cada una
La estructura de registro define cómo una selección se convierte en registros. Depende de tres decisiones independientes, y todas las combinaciones funcionan.
Date: solo fechas, sin horas.
Date Time / Booking: cada registro tiene hora de inicio y de fin.
Extra: activa Consolidate Time Span (Consolidar rango de tiempo) para tener un registro principal que cubre todo el rango horario, más un sub-bloque hijo por cada hueco dentro de él.
Ninguno: Date, Date Time o Booking sin recurso.
Un solo recurso: Booking con una lista desplegable de recursos.
Varios recursos: Booking con casillas, un registro por cada recurso marcado.
Por clic: cada fecha seleccionada es un registro. Cinco clics, cinco registros.
Por rango: las fechas consecutivas se agrupan en un registro con inicio y fin. Define End Date Field API Name (Campo de fecha de fin).
El asistente de configuración distingue seis estructuras: un registro por fecha, uno por rango de fechas, uno por bloque de tiempo, principal más sub-bloques, un solo recurso y varios recursos.
Ejemplos prácticos: responde las 3 preguntas
Responde tres preguntas por escenario y llegarás a una estructura. El asistente de configuración hace las mismas tres.
Solicitud de vacaciones
¿Necesitas horas? No, solo fechas.
¿Necesitas un selector de recursos? No.
¿Deben unirse las fechas contiguas? Sí. Unas vacaciones de lunes a viernes deben ser UN solo registro.
→ Por rango: un registro que empieza el lunes y termina el viernes.
Reserva de sala de conferencias
¿Necesitas horas? Sí, cada reserva tiene inicio y fin.
¿Necesitas un selector de recursos? Sí, para elegir una sala.
¿Deben unirse las fechas contiguas? No, cada reserva es un registro.
→ Un solo recurso: un registro por fecha × bloque de tiempo, vinculado a la sala.
Formación en 3 salas
¿Necesitas horas? Sí, el mismo horario cada día.
¿Necesitas un selector de recursos? Sí, varias salas con casillas.
¿Deben unirse las fechas contiguas? Sí, dura de lunes a viernes.
→ Varios recursos, por rango: un registro por sala que cubre toda la semana.
Formación de jornada completa con pausa para comer
¿Necesitas horas? Sí, de 9:00 a 17:00 con un hueco para comer.
¿Necesitas un selector de recursos? No.
¿Hay que registrar el hueco? Sí, como registro hijo propio.
→ Principal más sub-bloques: un registro principal de 9:00 a 17:00 y un sub-bloque para la comida.
La cuadrícula: todas las combinaciones
Elige la fila según lo que necesites de hora y recurso. La columna depende de si End Date Field API Name está definido. Todas las celdas son configuraciones válidas.
| Hora + recurso | Por clic (sin End Date Field) |
Por rango (con End Date Field) |
|---|---|---|
| Date Sin hora. Componente Date. |
Un registro por fecha 1 fecha → 1 registro. Usar para: confirmaciones de asistencia, control de presencia, registros diarios. |
Un registro por rango de fechas Fechas consecutivas → 1 registro con inicio y fin. Usar para: vacaciones, viajes, estancias de varias noches. |
| Date Time Un bloque de tiempo por registro. Componente Date Time. |
Un registro por bloque de tiempo 1 fecha × 1 bloque de tiempo = 1 registro. Usar para: hojas de horas, segmentos de turno, bloques de formación. |
Rango con un bloque de tiempo compartido. Fechas consecutivas con el mismo horario → 1 registro. Usar para: formación de varios días con el mismo horario cada día. |
| Date Time + Consolidate Time Span Registro principal más sub-bloques hijos para los huecos |
Principal más sub-bloques Un registro principal abarca todo el rango horario y cada hueco dentro de él se convierte en un sub-bloque hijo. Usar para: formación con pausas para comer, rutas de campo con desplazamientos entre paradas. |
|
| Booking, un solo recurso Una lista desplegable de recursos. Componente Booking. |
Un solo recurso 1 registro por fecha × bloque de tiempo, vinculado al recurso. Usar para: salas de conferencias, agenda de formadores. |
Rango con un solo recurso. Fechas consecutivas en un recurso → 1 registro por rango. Usar para: estancias de varias noches en una habitación, préstamo de equipos durante varios días. |
| Booking, varios recursos Casillas de recursos (Allow Multiple Resources) |
Varios recursos 1 registro por recurso × fecha × bloque de tiempo. Usar para: reuniones de equipo en paralelo, formación en varias salas. |
Rango con varios recursos. Fechas consecutivas en N recursos → N registros, uno por recurso. Usar para: una semana de formación en 3 salas a la vez. |
| Booking + Consolidate Time Span Reserva principal más sub-bloques hijos para los huecos |
Reserva principal más sub-bloques: un recurso reservado todo el día con sus pausas registradas. Usar para: equipos de laboratorio con ventanas de mantenimiento. |
|
En resumen: cualquier combinación de las tres decisiones funciona. Si tu caso no encaja en un patrón con nombre, define cada decisión por separado y el componente hace el resto.
3. Recorrido por el asistente de configuración
El asistente de configuración guarda una configuración una sola vez. Escribe su nombre en Config Name (Nombre de configuración) en cualquier página o pantalla de flujo y esa ubicación la usará. Si cambias la configuración, todas las ubicaciones se actualizan.
- 1 Nombre & tipo
- 2 Objeto & campos
- 3 Campos de tiempo
- 4 Estado & visualización
- 5 Revisar & guardar
Elige cómo empezar
La pestaña Crear nuevo ofrece dos caminos. Guiarme paso a paso hace tres preguntas y elige el componente y la estructura. Configurar todas las propiedades abre todos los ajustes. Al lado hay dos pestañas más: Configuraciones existentes, para editar una configuración guardada, e Importar, para pegar una de la Config Library.
Paso 1: Nombre & tipo
Elige el componente (Date, Date Time o Booking) y ponle nombre a la configuración. Ese nombre es lo que escribirás después en Config Name. En este paso también defines las vistas: la vista predeterminada, qué vistas ofrece el selector y las opciones de Línea de tiempo y Agenda.
Paso 2: Objeto & campos
El paso más importante. Elige el objeto que guarda los registros, su campo de fecha y el campo de relación con el registro principal. Los campos opcionales añaden rangos, recursos, capacidad, sub-bloques y fechas bloqueadas. En las configuraciones de Booking también se definen aquí el objeto de recurso, el campo de capacidad y el horario comercial.
Paso 3: Campos de tiempo
Solo Date Time y Booking. Asigna los campos de hora de inicio y de fin y define el Intervalo de tiempo (sirve cualquier intervalo; lo habitual son 15, 30 o 60 minutos), la hora más temprana y la más tardía, el modo de visualización y qué ocurre ante un conflicto.
Paso 4: Estado & visualización
Campo de estado y colores, estados que ocultar, estados que pueden elegir los usuarios, campos al pasar el cursor, modo edición, nombre de los registros, etiquetas de botones, tamaño del calendario y límites como Max Dates Allowed (Máximo de selecciones).
Paso 5: Revisar & guardar
Revisa el resumen, prueba la vista previa en vivo y haz clic en Guardar configuración. El asistente despliega la configuración por ti en 30 a 60 segundos. Cuando termine, puedes añadir una descripción.
Configuraciones existentes e Importar
Las configuraciones guardadas aparecen en Configuraciones existentes: haz clic en una para editarla o exportarla. La pestaña Importar acepta el JSON de cualquier tarjeta de la Config Library o una exportación de otra organización.
4. Conjuntos de permisos y acceso
El paquete incluye cuatro conjuntos de permisos. Asígnalos en Configuración, Conjuntos de permisos.
| Conjunto de permisos | Para quién | Asistente de configuración | Usar calendarios |
|---|---|---|---|
| MultiDatePick - Setup | Los administradores que crean configuraciones | ✓ Sí | No |
| MultiDatePick - User | Todos los que usan los calendarios | No | ✓ Sí |
| MultiDatePick - All Access | Administradores que los crean y los usan | ✓ Sí | ✓ Sí |
| MultiDatePick - Guest | El usuario invitado de un sitio público de Experience Cloud | No | ✓ Ver y reservar |
Los componentes se ejecutan con los permisos de cada usuario, así que los usuarios también necesitan acceso a tus objetos y campos:
- Objetos: Leer y Crear en el objeto donde se guardan los registros, y Leer en cualquier objeto de recurso, cierre o hijo que lea el calendario.
- Campos, lectura: todos los campos que muestra el calendario (fecha, estado, campos al pasar el cursor).
- Campos, edición: todos los campos que escribe (fecha, horas, estado, segunda lista de selección, campo de nombre, la búsqueda al registro principal). Si el usuario no puede editar un campo, el guardado falla aunque la lectura funcione.
- Registros referenciados: al menos Leer en el registro principal y en el recurso a los que apunta el nuevo registro.
Cada mensaje de error y su causa están en Solución de problemas: errores de acceso. Los sitios para invitados necesitan algunos pasos más: consulta Páginas públicas para invitados.
5. Guardar con un clic o guardar desde el flujo
Hay dos formas de guardar. Elige la que mejor encaje con la ubicación.
Guardar con un clic
El componente escribe los registros por sí mismo. Rellena cuatro ajustes y aparece su propio botón Guardar. Un clic y se crean los registros hijos. Sin elementos de flujo ni código.
Dónde usarlo: páginas de registro, páginas de aplicación, páginas de inicio, sitios de Experience Cloud y pantallas de flujo con un registro principal.
Guardar desde el flujo
El componente entrega la selección a tu flujo. Usa la acción incluida Parse Date Entries from JSON y después tus propios elementos Bucle y Crear registros.
Dónde usarlo: pantallas de flujo en las que quieres control total: aprobaciones, registros condicionales, validaciones adicionales.
Guardar con un clic: los cuatro ajustes
El asistente de configuración los rellena por ti. Cuando los cuatro tienen valor, aparece el botón Guardar.
| Ajuste | Contenido | Nombre de API |
|---|---|---|
| Child Object API Name | El objeto donde se guardan los registros | relatedObjectApiName |
| Date Field API Name | El campo de fecha de ese objeto | dateFieldApiName |
| Relationship Field API Name | La búsqueda que apunta al registro principal | relationshipFieldApiName |
| Parent Record Id o Static Parent Record Id | El registro principal. En una página de registro se rellena solo. En un flujo, enlaza Parent Record Id. En páginas de aplicación, de inicio y de Experience Cloud, escribe el Id en Static Parent Record Id. | recordId / staticRecordId |
Qué registro principal usa cada página, y cuándo conviene elegirlo en un flujo, se explica en Páginas de aplicación, inicio y Experience.
Guardar desde el flujo: las salidas
Deja en blanco los cuatro ajustes. El botón Guardar se oculta y la selección sale por estas salidas del flujo:
| Salida | Contenido | Componentes |
|---|---|---|
| Selected Dates (Output) | Una colección de texto con las fechas (YYYY-MM-DD) | Date, Date Time |
| Date Ranges JSON (Output) | Fechas consecutivas agrupadas en rangos | Date, Date Time |
| Dates With Times JSON (Output) | Cada fecha con sus horas | Date Time |
| Successful Bookings Count / Conflict Dates | Resultados después de que Booking guarde por sí mismo | Booking |
Pasa el JSON a Parse Date Entries from JSON. Devuelve una lista que puedes recorrer con un Bucle, con fecha desde, fecha hasta, hora de inicio, hora de fin e Id de recurso en cada elemento. Paso a paso: Recetas de flujos.
Guardar solo añade
Guardar con un clic solo crea registros nuevos. Deseleccionar una fecha nunca borra un registro guardado, así que un clic equivocado no puede hacerte perder datos. Para cambiar o eliminar registros, usa el modo edición o la lista relacionada.
6. Colores de estado y modo edición
Colores de estado y filtrado
Colorea los registros según cualquier lista de selección de tu objeto, oculta algunos valores y limita lo que pueden elegir los usuarios finales.
| Ajuste | Función | Nombre de API |
|---|---|---|
| Status Field | La lista de selección que define los colores, por ejemplo Confirmed / Tentative / Cancelled. | statusField |
| Status Colors | Un color por valor, como Confirmed:#22C55E, Tentative:#fbbf24. Déjalo en blanco para usar una paleta automática. | statusColors |
| Status Color Display | Dónde se muestran los colores: calendario, cuadrícula o ambos. Déjalo vacío para una página de cliente limpia, sin colores. | statusColorDisplay |
| Ignored Statuses | Oculta del calendario y de los recuentos de capacidad los registros con estos valores (por ejemplo No-Show,Cancelled). | hideBookingsWithStatus |
| Selectable Statuses | Limita los valores que puede elegir un usuario final, por ejemplo solo Requested, mientras el personal los ve todos. | selectableStatuses |
Modo edición
Activa Enable Edit Mode (Activar modo edición) y aparecerá un botón Editar. En el modo edición los usuarios pueden:
- Ver los registros existentes como tarjetas con su fecha y estado
- Hacer clic en fechas para añadir sus registros al conjunto en edición
- Cambiar la fecha, las horas, el recurso o el estado, y el registro se actualiza
- Eliminar con confirmación en dos clics, para que nada se borre por accidente
7. Vistas: cinco diseños, un componente
Cada componente ofrece cinco diseños. Todos leen los mismos registros con las mismas asignaciones de campos, respetan las mismas reglas de conflicto, fechas bloqueadas y horario comercial, y guardan igual. Cambiar de vista cambia cómo se ven los registros, nunca lo que significan.
Las cinco vistas y la pregunta que responde cada una
| Vista (View) | La pregunta | Diseño | ¿Permite editar? |
|---|---|---|---|
| Calendario | ¿Qué pasa el día 14? | Un mes cada vez, con colores de estado por día. | Sí. Es la predeterminada. |
| Línea de tiempo | ¿Qué recurso está libre, y cuándo? | Recursos en filas, fechas en columnas. Los registros de varios días se dibujan como una sola barra. | Sí |
| Semana | ¿Quién está libre el jueves a las 14:00? | Siete días en horizontal y el horario comercial en vertical. Arrastra a la vez sobre días y horas. | Sí |
| Ocupación | ¿Quién supera su capacidad? | Mapa de calor de la capacidad usada, por recurso y por día. | No, solo lectura |
| Agenda | ¿Qué viene ahora? | Una lista ordenada de los próximos 60 días. | No, solo lectura |
Ajustes
| Ajuste | Predeterminado | Función |
|---|---|---|
| Viewview | Calendario | La vista con la que se abre el componente. |
| Available ViewsavailableViews | en blanco | Las vistas que ofrece el selector, por ejemplo calendar,timeline,agenda. En blanco ofrece las cinco. Tu vista predeterminada siempre se incluye, así que indica solo las adicionales. |
| Timeline Window (Days)timelineWindowDays | 14 | Cuántos días muestra a la vez la línea de tiempo. Con un mes completo, cada reserva queda de unos veinte píxeles de ancho y su etiqueta se corta. Pon 0 para el mes completo. Las flechas interiores avanzan una ventana; las exteriores, un mes. |
| Resource RowsresourceViewFilter | all | booked dibuja solo los recursos con alguna reserva en pantalla. Es la mejor forma de acortar una lista larga, porque una fila vacía no aporta información. Si no hay nada reservado en ningún recurso, vuelven a mostrarse todos. |
| Max View ResourcesmaxViewResources | 0 (todos) | Limita cuántas filas de recursos dibujan Línea de tiempo y Ocupación, empezando por las más ocupadas. Todo se sigue contando. Mejor usa Resource Rows, que solo oculta las filas vacías. |
| Agenda FieldsagendaFields | en blanco | Campos adicionales en cada fila de la agenda, hasta cuatro. En blanco reutiliza Hover Popover Fields. La fecha, la hora y el nombre ya aparecen en la fila. |
| Capacity FieldcapacityField | en blanco | No es un ajuste de vista, pero Ocupación lo necesita para mostrar porcentajes en lugar de recuentos. |
Una vista distinta en cada página
La vista se define en cada ubicación, así que los mismos registros pueden verse de forma distinta según dónde aparezcan. Una instalación, un único juego de asignaciones de campos.
| Ubicación | Vista (View) | Vistas disponibles (Available Views) |
|---|---|---|
| Página de entrevistas del reclutador | Semana | calendar,agenda |
| Página de reserva de salas de servicios generales | Calendario | timeline,utilization |
| Cuadrante del responsable de turnos | Línea de tiempo | week,agenda |
| Pantalla mural de operaciones | Agenda | utilization,timeline |
| Página pública de Experience Cloud | Calendario | en blanco, o una lista corta |
El modo edición funciona en todas las vistas
Con Enable Edit Mode activado, el botón Editar aparece en todas las vistas. Haz clic en un registro de Línea de tiempo, Semana o Agenda para añadirlo al conjunto en edición, igual que una fecha en el calendario mensual. Un cambio de estado masivo desde la línea de tiempo funciona exactamente igual que desde el calendario.
Línea de tiempo: filas contraídas
Cuando un recurso tiene reservas solapadas, su fila se contrae en una sola franja con una etiqueta N a la vez. Un desplegable abre un carril por reserva. Las filas contraídas siguen admitiendo arrastrar, pasar el cursor y hacer clic.
Línea de tiempo: arrastra para reprogramar
Con Enable Edit Mode activado, las barras de la línea de tiempo se pueden arrastrar. Agarra el centro para mover una reserva a otros días, o un borde para cambiar su inicio o su fin. La barra muestra dónde quedará y se guarda al soltar. Con zoom de Día, los mismos gestos cambian las horas.
Programa personas, no solo salas
Resource Object API Name (Objeto de recurso) acepta cualquier objeto. Pon User y la línea de tiempo se convierte en un cuadrante de personal, Semana en una cuadrícula de turnos y Ocupación en un panel de capacidad del equipo.
- User no tiene un campo de capacidad estándar. Añade uno personalizado (por ejemplo Daily Capacity) para ver la ocupación en porcentajes.
- Asigna Business Hours Start Field (Campo de inicio del horario comercial) y Business Hours End Field (Campo de fin del horario comercial) a campos de User y la cuadrícula semanal seguirá el horario de cada persona.
La Config Library tiene dos ejemplos ya preparados: Planificación de la capacidad del equipo y Cuadrante de turnos del personal.
8. Reserva de recursos y capacidad (componente Booking)
Un solo recurso
Los usuarios eligen un recurso en una lista desplegable. La cuadrícula de horarios carga las reservas y la capacidad de ese recurso.
Varios recursos
Activa Allow Multiple Resources (Permitir varios recursos) y la lista desplegable se convierte en casillas. La cuadrícula muestra solo las franjas libres en todos los recursos marcados, y Guardar los reserva todos a la vez.
Capacidad
Permite que varias reservas compartan una franja, con indicadores 3/5 en vivo. Una franja completa deja de aceptar reservas.
| Ajuste | Función | Nombre de API |
|---|---|---|
| Capacity Field | Un campo numérico en el recurso, por ejemplo Capacity = 5. | capacityField |
| Show Availability Count | Muestra los indicadores X/Y. | showAvailabilityCount |
| Capacity Aggregation | Combined (predeterminado) suma reservas y capacidades de los recursos marcados: dos salas de 5 muestran 0/10. Distinct cuenta una sola vez un evento reservado en varios recursos y usa la mayor capacidad individual: una clase en 4 salas muestra 1/5, no 4/20. | capacityAggregation |
Conflictos
Conflict Behavior (Comportamiento ante conflictos) decide qué pasa cuando una franja elegida ya está ocupada. Conflict Look-Ahead Days (Días de previsión de conflictos) define hasta cuándo se comprueba (por defecto, 360 días).
| Valor | Qué ocurre | Ideal para |
|---|---|---|
| Block (predeterminado) | Una franja ocupada no se puede elegir, y el guardado se detiene con los conflictos resaltados. | La mayoría de páginas de reservas |
| Skip | Guarda las franjas libres y omite las ocupadas. Las fechas omitidas vuelven en Conflict Dates (Output). | Reservar lo que quede libre en muchas fechas |
| Allow | Sin comprobación de conflictos. Las reservas pueden superar la capacidad. | Sobreventa intencionada |
Un cierre siempre manda. Nada se guarda en una franja bloqueada, ni siquiera con Allow.
9. Limitar lo que seleccionan los usuarios
Limita cuánto puede elegir una persona, por fechas o por franjas horarias.
| Ajuste | Función | Nombre de API |
|---|---|---|
| Max Dates Allowed Booking: Max Dates Per Booking (Máximo de selecciones) | Máximo de fechas que puede elegir un usuario. 0 significa sin límite. | maxSelections |
| Max Time Slots | Máximo de franjas horarias en total, sumando todas las fechas. 0 significa sin límite. Usa 1 para una sola cita por persona. | maxTimeSlotSelection |
| Earliest / Latest Selectable Date | Atenúa las fechas fuera de un intervalo fijo. | minDate / maxDate |
| Book Up To / Minimum Notice | Una ventana móvil: hasta N días por delante, con al menos N horas de antelación. | maxDaysAhead / minNoticeHours |
| Buffer Between Bookings | Reserva tiempo libre de preparación después de cada reserva. | bufferMinutes |
| Add to Calendar | Tras Guardar, un único archivo .ics con todo lo que se acaba de guardar. | showAddToCalendar |
| Allow Past Dates | Desactivado, solo permite hoy y fechas posteriores. Activado por defecto en Date y Date Time, desactivado en Booking. | allowPastDates |
10. Bloquear fechas, horas y recursos (cierres)
Cualquier calendario puede leer cierres de otro objeto y atenuar las fechas, franjas horarias o recursos que cubren, para que los usuarios solo reserven cuando estás abierto. Apunta unos pocos ajustes al objeto de cierres y el componente hace el resto. Los bloqueos de día completo funcionan en los tres componentes; los de hora y de recurso necesitan la cuadrícula de horarios de Date Time o Booking.
Bloquear u ocultar: ¿qué diferencia hay?
Suenan parecido, pero hacen lo contrario. Bloquear quita disponibilidad: la franja se ve, pero no se puede reservar. Ocultar saca registros de la vista, lo que libera sus franjas.
| Bloquear (cierres) | Ocultar (por estado) | |
|---|---|---|
| Qué controla | Qué fechas, horas y recursos se pueden reservar | Qué registros guardados aparecen |
| Ajuste | Blocked Dates Object (Objeto de fechas bloqueadas) y sus campos de fecha, hora y recurso | Ignored Statuses |
| Depende de | Una lista de cierres o festivos: su propio objeto, o tu objeto de reservas filtrado | Un valor de estado en los propios registros |
| Qué ven los usuarios | La franja está, pero tachada, atenuada y sin poder hacer clic | El registro desaparece del calendario |
| Efecto en la capacidad | Quita disponibilidad | Libera disponibilidad: el registro oculto deja de contar |
| Los datos | No existe ninguna reserva; solo marcas la franja como no disponible | Los registros siguen existiendo en Salesforce |
| Úsalo para | Festivos, ventanas de mantenimiento, una sala o región cerrada | Reservas Cancelled o Rejected que no deben saturar la cuadrícula ni contar contra la capacidad |
- Ignored Statuses (Estados ignorados) = Cancelled → la reserva desaparece y su franja queda libre.
- Blocked Dates Object = tu objeto de reservas, filtrado por Status = Cancelled → la reserva bloquea su fecha para que nadie vuelva a reservarla.
Los ajustes de fechas bloqueadas
| Ajuste | Función | Nombre de API |
|---|---|---|
| Blocked Dates Object | El objeto que contiene los cierres, como un objeto Office Closure o tu objeto de reservas. Al definirlo se activa el bloqueo. | blockedDatesSourceObject |
| Blocked Dates Date Field | El campo de fecha de ese objeto. | blockedDatesDateField |
| Blocked Dates Start / End Time Field | Campos de hora opcionales. Define ambos para bloqueos de parte del día; déjalos en blanco para bloqueos de día completo. Date Time y Booking. | blockedDatesStartTimeField / blockedDatesEndTimeField |
| Blocked Dates Resource Field | Búsqueda opcional que limita un cierre a un solo recurso. En blanco, el cierre se aplica a todos los recursos. Booking. | blockedDatesResourceField |
| Blocked Dates Filter Field / Value | Ámbito opcional, como Region = North o Status = Cancelled. Así una sola tabla de cierres sirve a muchos calendarios. | blockedDatesFilterField / blockedDatesFilterValue |
Tres niveles de bloqueo
- Día completo: un cierre sin horas atenúa toda la fecha. En los tres componentes. Una fecha cerrada sigue cerrada aunque ya tenga reservas.
- Parte del día: un cierre con hora de inicio y de fin bloquea solo esas franjas. El resto del día sigue disponible. Las franjas bloqueadas se ven al seleccionar una fecha.
- Un recurso: un cierre que apunta a un recurso cierra solo ese recurso. En la vista de un solo recurso, la franja aparece tachada. En la vista combinada lleva una pequeña marca en la esquina y sigue disponible en los recursos abiertos.
¿Usas la cuadrícula de horarios? Lo que necesitas son bloqueos de parte del día. Los de día completo son para selectores solo de fecha.
Dos patrones para el objeto de cierres
- El mismo objeto, marcado por estado: apunta Blocked Dates Object a tu objeto de reservas y filtra Status = Cancelled, de modo que las reservas canceladas hacen también de cierres. Es lo más sencillo, pero todos los calendarios de ese objeto los comparten. Consulta la configuración Reserva de citas con festivos en la Config Library.
- Un objeto de cierres propio: un objeto Office Closure con una fecha, horas de inicio y fin opcionales, un campo Region y una búsqueda opcional a un recurso. Cada calendario filtra por su región, y un cierre puede apuntar a un solo recurso. Consulta la configuración Cierres de recursos por horas.
Para que cada persona bloquee su propio tiempo (por ejemplo, un responsable que bloquea una mañana), coloca en una página interna o un sitio un componente Date Time que guarde en el objeto de cierres.
Cómo se comportan las franjas bloqueadas
- Aspecto: una franja totalmente cerrada aparece tachada y atenuada. Una franja cerrada solo para algunos de los recursos elegidos lleva una marca en la esquina.
- Selección: una franja totalmente cerrada no se puede pulsar ni arrastrar.
- Guardado: nada se guarda en un recurso, fecha y hora cerrados. Con varios recursos, solo se excluye el cerrado; los abiertos se reservan igual.
Una tabla de cierres, muchos calendarios
Añade al objeto de cierres un campo de etiqueta (Region, Location, Building) y pon el mismo campo en tus recursos. Así cada calendario usa Resource Filter Field / Value para mostrar sus recursos y Blocked Dates Filter Field / Value para leer sus cierres.
11. Páginas públicas para invitados (Experience Cloud)
Coloca un componente en un sitio de Experience Cloud y cualquiera podrá reservar sin iniciar sesión. Completa los cinco pasos antes de probar como invitado.
- Permisos de objeto. Da al usuario invitado del sitio permiso de Leer en cada objeto, y de Crear si los invitados envían datos. Salesforce nunca permite que los invitados editen ni eliminen registros, así que deja las páginas de edición, cancelación y eliminación para usuarios con sesión iniciada.
- Seguridad a nivel de campo en todos los campos que toca el componente, incluidos los de horario comercial del recurso y los de hora de los cierres. Un solo campo que falte detiene la consulta de recursos o de cierres.
- Una regla de colaboración para invitados (Leer) para que el invitado vea los registros. El valor predeterminado externo de toda la organización del objeto debe ser Privado para que la regla se aplique. Una regla implementada como metadatos necesita un clic en Recalcular en Configuración, Configuración de colaboración.
- El conjunto de permisos MultiDatePick - Guest en el usuario invitado del sitio. Incluye el acceso a las clases de Apex con las que el componente carga sus datos.
- Activa el sitio. Publicar y activar son pasos distintos.
- Qué registro ven los invitados: una página pública usa Static Parent Record Id, así que todos los invitados reservan sobre el mismo registro principal (una oficina, una sede o un recurso). Para un registro por visitante, contrólalo desde un flujo con un parámetro de URL. Los calendarios realmente personales requieren usuarios con sesión iniciada.
- Contactos y cuentas: Salesforce restringe mucho el acceso de los invitados a ellos. Haz que los invitados reserven sobre un objeto personalizado o usa un sitio autenticado.
- Varios componentes en una página: no se sincronizan en vivo. Añade un aviso para actualizar entre ellos, de modo que un bloqueo hecho en uno se vea en el siguiente.
Los pasos de ubicación están en Páginas de aplicación, inicio y Experience. Un sitio completo de ejemplo está en Reservas en Experience Cloud.
12. Problemas habituales (preguntas frecuentes)
¿Ves un aviso, falta el botón Guardar o el calendario sale vacío? Solución de problemas muestra cada mensaje con una captura y la solución.
- Mis colores de estado no se aplican
- Revisa tres cosas. (a) ¿Es Status Field (Campo de estado) el nombre de API exacto de la lista de selección? Distingue mayúsculas y minúsculas. (b) ¿Usa Status Colors (Colores de estado de reserva) el formato
Value:#hex, Value:#hexsin comillas?'Confirmed':'#22C55E'lo rompe sin avisar. (c) ¿Tienen realmente los registros un valor en esa lista de selección? - Los registros se guardan con nombres inesperados
- Revisa Record Name Field (Campo de nombre del registro): si el campo es corto, los nombres largos se cortan. Revisa Append Date to Record Name (Añadir fecha y hora al nombre): si está activado, la fecha y la hora seleccionadas se añaden a todos los nombres.
- ¿Cómo oculto los registros Cancelled de la cuadrícula de capacidad?
- Define Ignored Statuses como
Cancelled, o como una lista del tipoCancelled,Rejected. Desaparecen del calendario y del recuento de capacidad. - ¿Qué diferencia hay entre bloquear y ocultar?
- Bloquear (cierres) mantiene visible una fecha, hora o recurso, pero sin poder reservarlo: festivos, mantenimiento, una sala cerrada. Ocultar quita registros, como los Cancelled, del calendario y de la capacidad, lo que libera la franja. Consulta Bloquear u ocultar.
- No aparece el botón Editar
- Activa Enable Edit Mode. Es el único requisito, en los tres componentes. El campo de estado es opcional: solo añade una lista desplegable de estados en el editor. Si el botón sigue sin aparecer, la página o la configuración tiene Enable Edit Mode desactivado.
- Solo quiero algunos recursos (salas, no equipos)
- Usa Resource Filter Field (Campo del filtro de recursos) y Resource Filter Value (Valor del filtro de recursos). Un valor: campo
Active__c, valortrue. Varios valores (O):North,South. Varios campos (Y): campoType__c;Active__c, valorConference Room;true. - El ajuste que buscas es Time Display Mode (Modo de visualización de hora): Grid o Dropdown. En modo Grid todas las fechas comparten la cuadrícula. Para una hora distinta en cada fecha, elige Dropdown y activa Allow Different Times Per Date (Permitir horas distintas).
- ¿Cómo paso de guardar desde el flujo a guardar con un clic?
- Rellena Parent Record Id, Child Object API Name (Objeto relacionado), Date Field API Name (Campo de fecha) y Relationship Field API Name (Campo de relación). Quita la acción Parse Date Entries from JSON y el bucle que creaba los registros. Ahora los escribe el propio botón Guardar del componente.
- Me sale un aviso de error sin detalles
- Abre la consola de desarrollador del navegador y busca las líneas que empiezan por
[MDP:ERROR]. El error completo siempre se registra ahí, aunque el aviso sea breve.
13. Recetas de flujos
Todo lo de esta sección se crea en Flow Builder. Sin Apex.
Recorrer en bucle las fechas seleccionadas
- Añade una pantalla con el componente Date Time. Deja en blanco los ajustes de guardar con un clic.
- Después de la pantalla, añade la acción Parse Date Entries from JSON. Pásale Dates With Times JSON (Output).
- Recorre en un bucle la lista de la acción. Cada elemento tiene fecha desde, fecha hasta, hora de inicio y hora de fin.
- Dentro del bucle, asigna los valores a una variable de registro y añádela a una colección. Crea los registros una sola vez, después del bucle.
Llevar la primera y la última fecha al registro principal
¿Quieres que el registro principal muestre la fecha hija más temprana y la más tardía? Elige la vía sin código que encaje con tus datos.
| Tu configuración | Haz esto |
|---|---|
| Relación principal-detalle | Añade dos campos de resumen consolidado en el registro principal: MIN del campo de fecha y MAX del campo de fecha. Listo. |
| Relación de búsqueda | Un flujo desencadenado por registro en el objeto hijo (después de guardar). Obtener registros del objeto hijo con el mismo registro principal, ordenados por fecha ascendente, solo el primero. Repite con orden descendente. Actualiza la fecha de inicio y de fin del registro principal con esas dos fechas. |
Más patrones de flujo: Guía de flujos de pantalla.
14. Asignación de objetos y campos
La página de cada componente tiene un diagrama completo de asignación de objetos y campos:
Los componentes funcionan con cualquier objeto. Los objetos de ejemplo del paquete (Schedule, Event, Resource, Sub Block) son solo valores por defecto. Apunta los ajustes a tus propios objetos personalizados o estándar con los campos adecuados.
15. Referencia de todas las propiedades
Todos los ajustes de los tres componentes, con la etiqueta que ves en Lightning App Builder, Experience Builder y Flow Builder. El nombre de API aparece bajo cada etiqueta.
Todas las propiedades Más de 100 propiedades Haz clic para desplegar: con búsqueda
| Propiedad | Date | Date Time | Booking | Tipo | Predeterminado | Descripción |
|---|---|---|---|---|---|---|
| Configuración | ||||||
Config NameconfigName | ✓ | ✓ | ✓ | String | en blanco | Opcional: DeveloperName de un registro Config__mdt creado por el asistente de configuración. Si se define, todos los ajustes de campos y objetos de esa configuración se aplican como valores por defecto. Las propiedades de texto y número que definas aquí prevalecen sobre la configuración. Las casillas siempre salen de la configuración: una casilla desmarcada no se distingue de una que nunca se tocó. |
| Vistas | ||||||
Viewview | ✓ | ✓ | ✓ | String | calendar | Qué vista usar. calendar es la cuadrícula mensual (predeterminada). timeline muestra los recursos en filas y las fechas en columnas. week es una cuadrícula de días por horas. utilization es un mapa de calor de capacidad, de solo lectura. agenda es una lista cronológica, de solo lectura. |
Available ViewsavailableViews | ✓ | ✓ | ✓ | String | en blanco | Lista separada por comas de las vistas que ofrece el selector, p. ej. calendar,timeline,agenda. En blanco ofrece las cinco. La vista predeterminada (View, arriba) siempre se incluye. |
Timeline Window (Days)timelineWindowDays | ✓ | ✓ | ✓ | Integer | 14 | Cuántos días muestra a la vez la vista de línea de tiempo. Con un mes entero cada reserva queda de unos veinte píxeles de ancho y todas las etiquetas se cortan, por eso el valor por defecto es 14. Pon 0 para mostrar el mes completo. |
Timeline ZoomtimelineZoom | ✓ | ✓ | ✓ | String | week | Zoom inicial de la vista de línea de tiempo: day (las horas de un día), week (la ventana de Timeline Window) o month. Los usuarios pueden cambiar el zoom mientras la consultan. |
Timeline Group By FieldtimelineGroupByField | ✓ | ✓ | ✓ | String | en blanco | Nombre de API de un campo del objeto de recurso (por ejemplo Building__c) para agrupar las filas de la línea de tiempo bajo encabezados con una franja de capacidad. En blanco, una sola lista plana. |
Max View ResourcesmaxViewResources | ✓ | ✓ | ✓ | Integer | 0 | Máximo de filas de recursos que dibujan las vistas Línea de tiempo y Ocupación, empezando por las más ocupadas. Evita que una lista grande de recursos convierta cualquiera de las dos vistas en un muro ilegible. |
Agenda FieldsagendaFields | ✓ | ✓ | ✓ | String | en blanco | Campos, separados por comas, que se muestran en cada fila de la vista Agenda tras el nombre del registro. En blanco reutiliza Hover Fields. Los campos de fecha, hora y nombre del registro se omiten automáticamente porque la fila ya los muestra. |
Resource RowsresourceViewFilter | ✓ | ✓ | ✓ | String | all | Qué recursos tienen fila en Línea de tiempo y Ocupación. all dibuja todos; booked solo los que tienen alguna reserva en la ventana actual, que es la mejor forma de acortar una lista larga de recursos, porque ocultar una fila vacía no quita información. |
| Visualización y diseño | ||||||
Button Labellabel | ✓ | ✓ | ✓ | String | Date: Seleccionar fechas; Date Time: Seleccionar fechas & horas; Booking: Reservar recurso | Texto del botón que abre el selector de fechas. Ejemplo: 'Elegir fechas' o 'Añadir fechas' |
Calendar TitlemodalTitle | ✓ | ✓ | ✓ | String | Date: Seleccionar fechas; Date Time: Seleccionar fechas & horas; Booking: Reservar recurso | Título que aparece en la parte superior de la ventana modal del calendario. |
Show Inline (Always Visible)También aparece como Show Inline (No Button)showInline | ✓ | ✓ | ✓ | Boolean | true | Activado, el calendario está siempre visible sin necesidad de pulsar un botón. Desactivado, un botón abre el calendario en una ventana emergente. |
Two-Month ViewtwoMonthView | ✓ | ✓ | ✓ | Boolean | false | Activado, muestra dos meses uno al lado del otro para seleccionar rangos con más facilidad. Desactivado, muestra un mes cada vez. |
Calendar SizecalendarSize | ✓ | ✓ | ✓ | String | medium | Controla el tamaño general del calendario. Valores válidos: tiny, xsmall (Very Small), small, medium, large. El predeterminado es medium. Usa tiny o xsmall en barras de utilidades, barras laterales y mosaicos de paneles; small en espacios reducidos; medium en la mayoría de diseños; y large para experiencias táctiles. |
Day Header FormatdayHeaderFormat | ✓ | ✓ | ✓ | String | 3 | Longitud de los encabezados de los días de la semana. Valores válidos: 3, 2, 1. El predeterminado es 3. 3 = DOM LUN MAR, 2 = DO LU MA, 1 = D L M. |
Week Starts on MondayweekStartsOnMonday | ✓ | ✓ | ✓ | Boolean | false | Activado, la semana del calendario empieza en lunes (estándar ISO). Desactivado, empieza en domingo (estándar de EE. UU.). |
Show Recurring Pattern ButtonshowRecurringPattern | ✓ | ✓ | ✓ | Boolean | true | Activado, muestra un botón con el que los usuarios seleccionan rápidamente todos los días laborables, los fines de semana o días concretos de la semana hasta una fecha de fin. |
Show Selection SummaryshowSelectedSummary | ✓ | ✓ | ✓ | Boolean | true | Activado, muestra un resumen con cuántas fechas hay seleccionadas y cuáles son. |
Show Done Button in Inline ModeshowDoneButtonInline | ✓ | ✓ | ✓ | Boolean | false | Activado y con Show Inline habilitado, muestra un botón Listo que contrae el calendario en una vista de resumen. |
Show In-Component ToastshowSuccessToast | ✓ | ✓ | ✓ | Boolean | false | Muestra un aviso de éxito o error dentro del componente (necesario en sitios de Experience Cloud, donde el aviso estándar no aparece). También funciona en páginas de registro. |
Show Add to Calendar After SavingshowAddToCalendar | ✓ | ✓ | ✓ | Boolean | false | Tras guardar correctamente, un botón Añadir al calendario descarga un archivo de calendario (.ics) con un evento por cada registro recién guardado. Se abre en Outlook, Google Calendar y Apple Calendar, y funciona para invitados de Experience Cloud. Los registros solo de fecha se convierten en eventos de todo el día; los que tienen hora la conservan. |
Calendar File Location FieldcalendarLocationField | ✓ | String | en blanco | Nombre de API de un campo del objeto de recurso cuyo valor pasa a ser la ubicación de cada evento del archivo de Añadir al calendario, como la dirección de una sala, o Name para la propia sala. Déjalo en blanco cuando los recursos son personas, como asesores o técnicos: ya aparecen en el título del evento, y una persona no es un lugar. Requiere Show Add to Calendar After Saving. | ||
Success Toast Message (optional)successToastMessage | ✓ | ✓ | ✓ | String | en blanco | Mensaje personalizado opcional al guardar correctamente. En blanco, se usa el predeterminado. |
| Reglas de selección | ||||||
Requiredrequired | ✓ | ✓ | ✓ | Boolean | false | Activado, el usuario debe seleccionar al menos una fecha para que el flujo pueda avanzar a la siguiente pantalla. |
Max Dates AllowedTambién aparece como Max Dates Per BookingmaxSelections | ✓ | ✓ | ✓ | Integer | 0 | Número máximo de fechas que puede seleccionar un usuario. 0 = sin límite. |
Max Time SlotsmaxTimeSlotSelection | ✓ | ✓ | Integer | 0 | Número máximo de franjas horarias que puede seleccionar un usuario en total (sumando todas las fechas). 0 = sin límite. | |
Allow Past DatesallowPastDates | ✓ | ✓ | ✓ | Boolean | Date: true; Date Time: true; Booking: false | Activado, los usuarios pueden seleccionar cualquier fecha pasada. Desactivado, solo se pueden seleccionar hoy y fechas futuras. |
Earliest Selectable DateTambién aparece como Earliest Bookable DateminDate | ✓ | ✓ | ✓ | Date | en blanco | La fecha más temprana que pueden seleccionar los usuarios. Las anteriores aparecen atenuadas. Para impedir reservas en el mismo día, usa mejor Minimum Notice: avanza con el reloj. |
Latest Selectable DateTambién aparece como Latest Bookable DatemaxDate | ✓ | ✓ | ✓ | Date | en blanco | La fecha más tardía que pueden seleccionar los usuarios. Las posteriores aparecen atenuadas. |
Book Up To (Days Ahead)maxDaysAhead | ✓ | ✓ | ✓ | Integer | 0 | Una ventana de reserva móvil: la última fecha seleccionable es hoy más este número de días, y avanza cada día. 0 significa sin límite. Si también se define Latest Selectable Date, se aplica la más temprana de las dos. |
Minimum Notice (Hours)minNoticeHours | ✓ | ✓ | ✓ | Integer | 0 | No se puede elegir ni guardar nada que empiece antes de ahora más este número de horas. Los días anteriores aparecen atenuados y, en el día límite, se cierran las franjas más tempranas. Se vuelve a comprobar al guardar, así que una página abierta toda la noche no puede reservar dentro del plazo de antelación. 0 significa sin mínimo. |
Pre-Selected DatesdefaultDates | ✓ | ✓ | ✓ | String[] | en blanco | Fechas que ya están seleccionadas al abrir el calendario. En formato ISO (YYYY-MM-DD). |
Blocked DatesdisabledDates | ✓ | ✓ | ✓ | String[] | en blanco | Fechas concretas que no se pueden seleccionar (aparecen atenuadas). Para festivos o fechas bloqueadas. En formato ISO (YYYY-MM-DD). |
Only These Dates Are SelectableavailableDates | ✓ | ✓ | ✓ | String[] | en blanco | Si se define, SOLO estas fechas se pueden seleccionar: todas las demás aparecen atenuadas. En formato ISO (YYYY-MM-DD). Útil cuando las fechas válidas vienen de otra fuente en tu flujo. |
Auto-Jump to First Available DateautoJumpToFirstAvailable | ✓ | ✓ | ✓ | Boolean | false | Activado y con 'Only These Dates Are Selectable' definido, el calendario se abre directamente en el mes de la primera fecha disponible. |
Allow Whole-Day (No Times)allowWholeDayNoTimes | ✓ | ✓ | Boolean | false | Activado, seleccionar una fecha sin franjas horarias guarda un registro de día completo (bloquea o reserva todo el día). Las fechas con franjas horarias se guardan como registros con hora. | |
| Registros y guardado | ||||||
Parent Record IdrecordId | ✓ | ✓ | ✓ | String | en blanco | Si se define, el componente funciona en modo guardar con un clic y escribe registros hijos vinculados a este registro principal. Pasa un Id de registro de una salida de Obtener registros o de recordCreate (p. ej. {!recordVar.Id}). Déjalo en blanco para usar el patrón estándar de acción de análisis + bucle + crear registros. |
Static Parent Record IdstaticRecordId | ✓ | ✓ | ✓ | String | en blanco | Caso especial: fija un Id de registro para anclar este calendario a un único registro principal. Funciona en Record Page, App Page (requiere Id estático), Home Page (requiere Id estático) y Experience Site (requiere Id estático). En una Record Page, déjalo en blanco: el registro de la página se inyecta automáticamente. |
Parent Record Id FieldparentRecordIdField | ✓ | ✓ | ✓ | String | en blanco | Solo es necesario cuando este componente está en la página de registro de un objeto DISTINTO del principal. Introduce el nombre de API del campo de búsqueda que apunta al registro principal real. Déjalo en blanco cuando el componente está en la página del objeto principal. |
Child Object API NameTambién aparece como Related Booking Object API Name; Child Object API Name (for preload)relatedObjectApiName | ✓ | ✓ | ✓ | String | en blanco | Nombre de API del objeto donde cada fecha seleccionada se guarda como registro. Ejemplo: Appointment__c, Schedule_Entry__c. Obligatorio para guardar con un clic. |
Date Field API NameTambién aparece como Date Field API Name (for preload)dateFieldApiName | ✓ | ✓ | ✓ | String | en blanco | Nombre de API del campo Date del objeto hijo que guarda la fecha seleccionada. Ejemplo: Event_Date__c, Start_Date__c |
End Date Field API NameTambién aparece como End Date FieldendDateField | ✓ | ✓ | ✓ | String | en blanco | Nombre de API de un campo de fecha de fin en el objeto hijo. Si se define, las fechas seleccionadas contiguas se consolidan en un único registro con fecha de inicio y de fin, en lugar de un registro por fecha. Ejemplo: End_Date__c |
Relationship Field API NameTambién aparece como Parent Record Relationship FieldrelationshipFieldApiName | ✓ | ✓ | ✓ | String | en blanco | Nombre de API del campo de búsqueda del objeto hijo que lo vincula con el registro principal. Ejemplo: Account__c, Contact__c, Order__c |
Load Existing DatesTambién aparece como Load Existing BookingspreloadExistingDates | ✓ | ✓ | ✓ | Boolean | true | Activado, consulta los registros hijos existentes y muestra sus fechas en el calendario al cargar. Requiere Child Object, Date Field y Relationship Field. |
Existing Dates ModeTambién aparece como Existing Bookings ModepreloadMode | ✓ | ✓ | ✓ | String | editable | Controla cómo aparecen las fechas cargadas. Solo se aplica con Load Existing Dates activado. Valores válidos: editable, readonly. Predeterminado: editable. editable = las fechas aparecen seleccionadas y se pueden cambiar. readonly = las fechas aparecen atenuadas y no se pueden quitar. En un flujo se muestra como un cuadro de texto libre, así que escribe exactamente uno de estos valores. |
Save Button LabelsaveButtonLabel | ✓ | ✓ | ✓ | String | Guardar | Texto del botón de guardar en modo guardar con un clic. Ejemplo: 'Guardar fechas', 'Confirmar selección' |
Record Name FieldrecordNameField | ✓ | ✓ | ✓ | String | en blanco | Nombre de API de un campo de texto del objeto hijo donde se guarda una etiqueta del registro. Si se define, aparece un cuadro de texto para que los usuarios escriban una etiqueta. |
Default Record NamedefaultRecordName | ✓ | ✓ | ✓ | String | en blanco | Rellena de antemano el nombre del registro. Los usuarios pueden cambiarlo al usarlo. Ejemplo: 'Día de vacaciones', 'Reunión de equipo'. |
Append Date/Time to Record NameTambién aparece como Append Date to Record NameappendDateTimeToName | ✓ | ✓ | ✓ | Boolean | true | Activado, añade la fecha al nombre del registro. |
| Estado y edición | ||||||
Status FieldstatusField | ✓ | ✓ | ✓ | String | en blanco | Nombre de API de un campo de lista de selección o de estado del objeto hijo. Si se configura, aparece una lista desplegable de estados junto al nombre del registro para que los usuarios asignen un estado al seleccionar fechas. Necesario para Status Colors, Ignored Statuses, Status Field Label y Enable Edit Mode. Ejemplo: Status__c |
Status ColorsstatusColors | ✓ | ✓ | ✓ | String | en blanco | Asignación, separada por comas, de valores de estado a colores hexadecimales. Formato: Value:#hex. Los colores de estado se muestran en las celdas de fecha del calendario. Requiere Status Field. Ejemplo: Confirmed:#22C55E, Tentative:#fbbf24, Pending:#60a5fa, Cancelled:#a1a8b5 |
Status Color DisplaystatusColorDisplay | ✓ | ✓ | ✓ | String | Date: calendar; Date Time: both; Booking: both | Dónde se muestran los colores de estado. En el componente Dates solo está disponible 'calendar': las celdas de fecha del calendario se colorean según su estado. |
Ignored StatusesTambién aparece como Ignored StatuseshideBookingsWithStatus | ✓ | ✓ | ✓ | String | en blanco | Lista separada por comas de valores de estado cuyos registros se ocultan del calendario. Los registros ocultos no se dibujan, pero siguen en Salesforce. Requiere Status Field. Ejemplo: Cancelled, Rejected |
Selectable Statuses (Status Picker)selectableStatuses | ✓ | ✓ | ✓ | String | en blanco | Valores de estado, separados por comas, que puede asignar el selector de estado de la reserva. En blanco permite todos (uso interno). P. ej. 'Scheduled' para un sitio de clientes. Si solo hay un estado seleccionable, se elige automáticamente y el selector se oculta. Requiere Status Field. |
Second Picklist FieldsecondStatusField | ✓ | ✓ | ✓ | String | en blanco | Nombre de API opcional de una segunda lista de selección que el usuario elige al guardar (p. ej. Reason__c). No tiene colores: statusField controla los colores del calendario. Añádela a Hover Popover Fields para mostrarla. Funciona en flujos, App Builder y Communities. |
Second Picklist LabelsecondStatusFieldLabel | ✓ | ✓ | ✓ | String | en blanco | Etiqueta opcional de la lista desplegable de la segunda lista de selección. En blanco, el componente genera una etiqueta legible a partir del nombre de API del campo. |
Selectable Second-Picklist ValuesselectableSecondStatuses | ✓ | ✓ | ✓ | String | en blanco | Lista opcional, separada por comas, de los valores que el usuario puede elegir en la segunda lista de selección. En blanco permite todos. Si solo se indica uno, se elige automáticamente y el selector se oculta. |
Status Field LabelstatusFieldLabel | ✓ | ✓ | ✓ | String | en blanco | Etiqueta opcional de la lista desplegable de estados que ven los usuarios finales. NO escribas aquí un nombre de API de campo: es solo una etiqueta visible. En blanco, el componente genera una etiqueta legible a partir del nombre de API de Status Field. |
Hover Popover FieldshoverFields | ✓ | ✓ | ✓ | String | en blanco | Lista separada por comas de nombres de API de campos que se muestran al pasar el cursor sobre una fecha del calendario con registros existentes. Los campos se consultan del objeto hijo. Admite campos de relación. Solo muestra datos cuando se cargan los registros existentes (con Load Existing Dates). Ejemplo: Name, Status__c, Notes__c. Déjalo en blanco para desactivar las ventanas emergentes. |
Enable Edit ModeenableEditMode | ✓ | ✓ | ✓ | Boolean | true | Activado, los usuarios pueden hacer clic en fechas existentes para editar la fecha o el estado, o eliminar el registro. Requiere que estén configurados Status Field Y Status Colors. |
Edit Button LabeleditButtonLabel | ✓ | ✓ | ✓ | String | en blanco | Etiqueta personalizada del botón que activa el modo edición. Si se deja en blanco, es 'Editar fechas'. |
Edit Record DisplayeditRecordDisplay | ✓ | ✓ | ✓ | String | en blanco | Palabras clave, separadas por comas, que controlan qué campos aparecen en la lista de registros del modo edición y en qué orden. Palabras clave: name, status, time, date, resource. Si está en blanco: name, status, time. Ejemplo: name, date, status |
| Franjas horarias | ||||||
Time Display ModetimeDisplayMode | ✓ | String | grid | Cómo se presentan las horas. Valores válidos: grid, dropdown. Predeterminado: grid. grid = cuadrícula visual de franjas en la que los usuarios hacen clic o arrastran para elegir bloques de tiempo. dropdown = selectores de hora lightning-input. Usa Allow Different Times Per Date para elegir entre selectores compartidos o por fecha en modo dropdown. En un flujo se muestra como texto libre, así que escribe exactamente uno de estos valores. | ||
Time Interval (Minutes)También aparece como Time Slot Interval (Minutes)timeInterval | ✓ | ✓ | Integer | 30 | Minutos entre franjas horarias. Sirve cualquier número entero; lo habitual son 15, 30 o 60 minutos. Ejemplo: 30 muestra 9:00, 9:30, 10:00. | |
Earliest TimeminTime | ✓ | String | 09:00 | Hora más temprana del selector de hora. Usa formato de 24 horas (HH:mm). Ejemplos: 08:00 (las 8 de la mañana), 13:00 (la 1 de la tarde). En blanco empieza a las 0:00. | ||
Latest TimemaxTime | ✓ | String | 18:00 | Hora más tardía del selector de hora. Usa formato de 24 horas (HH:mm). Ejemplos: 17:00 (las 5 de la tarde), 20:00 (las 8 de la tarde). En blanco termina a las 23:30. | ||
Start Time FieldTambién aparece como Start Time Field API NamestartTimeField | ✓ | String | en blanco | Nombre de API de un campo Time del objeto hijo para la hora de inicio de la franja. Ejemplo: Start_Time__c | ||
End Time FieldTambién aparece como End Time Field API NameendTimeField | ✓ | String | en blanco | Nombre de API de un campo Time del objeto hijo para la hora de fin de la franja. Ejemplo: End_Time__c | ||
Allow Different Times Per DateallowDifferentTimes | ✓ | ✓ | Boolean | false | Activado y con Time Display Mode en 'dropdown', cada fecha tiene su propio selector de hora (agrupados por semana). Desactivado, todas las fechas comparten una hora. No tiene efecto cuando Time Display Mode es 'grid'. | |
Enable End TimeenableEndTime | ✓ | Boolean | true | Activado, muestra una lista desplegable de hora de fin junto a la de hora de inicio, y devuelve startTime y endTime en la salida JSON. Solo se aplica en modo dropdown (Time Display Mode = 'dropdown'). No tiene efecto en modo grid. | ||
Group Time Slots by PeriodgroupTimeSlotsByPeriod | ✓ | ✓ | Boolean | false | Activado, las franjas horarias se agrupan en secciones Mañana, Tarde y Noche. Desactivado (predeterminado), muestra una cuadrícula plana. Solo se aplica cuando Time Display Mode es 'grid'. | |
Time Grid OnlytimeGridOnly | ✓ | ✓ | Boolean | false | Activado, oculta por completo el calendario y muestra SOLO la cuadrícula de franjas horarias para una fecha implícita. El usuario elige franjas y los registros se guardan en el registro anfitrión con guardar con un clic (sin paso de elegir fecha). La fecha implícita sale de Time Grid Date; si no, de Time Grid Date Field; y si no, es hoy. | |
Time Grid DatetimeGridDate | ✓ | ✓ | String | en blanco | Fecha ISO explícita opcional (YYYY-MM-DD) para la fecha implícita cuando Time Grid Only está activado. Tiene la máxima prioridad. Déjalo en blanco para leerla de Time Grid Date Field o usar hoy. | |
Time Grid Date FieldtimeGridDateField | ✓ | ✓ | String | en blanco | Nombre de API opcional de un campo Date del registro anfitrión del que leer la fecha implícita cuando Time Grid Only está activado (en una página de registro). Solo se usa si Time Grid Date está en blanco. Ejemplo: Appointment_Date__c | |
Disable Time Slot Grid (Full-Day Mode)disableTimeSlotGrid | ✓ | Boolean | false | Activado, oculta la cuadrícula de franjas horarias para reservas de día completo en las que solo importa la fecha. Desactivado (predeterminado), muestra la cuadrícula para reservar por horas con precisión. | ||
| Recursos y capacidad | ||||||
Resource Object API NameresourceObjectApiName | ✓ | String | en blanco | Nombre de API del objeto que guarda tus recursos reservables. Cada registro = un recurso reservable que aparece en la lista desplegable. Ejemplo: Room__c, Equipment__c, Vehicle__c, Staff__c | ||
Resource Name FieldresourceNameField | ✓ | String | Name | Nombre de API del campo que contiene el nombre visible del recurso. Normalmente 'Name'. | ||
Resource Filter Field (optional)resourceFilterField | ✓ | String | en blanco | Nombre de API de un campo del objeto de recurso que limita qué recursos aparecen en el selector. Se usa junto con Resource Filter Value. Usa ';' para combinar varios campos (Y). Ejemplos: 'Active__c' (un campo booleano), 'Type__c' (una lista de selección), 'Type__c;Building__c' (DOS campos combinados con Y). En blanco se muestran todos los recursos. | ||
Resource Filter Value (optional)resourceFilterValue | ✓ | String | en blanco | Valor o valores que debe tener el campo de filtro. ',' entre valores de UN campo = O (cláusula IN). ';' entre valores = Y entre varios campos (debe coincidir con el número de campos de Resource Filter Field). Ejemplos: 'true': Active=true. 'Conference Room': Type=Conference Room. 'North,South': Building IN North o South. 'Conference Room;North': Type=Conference Room Y Building=North. 'Conference Room;North,South': Type=Conference Room Y Building IN North o South. | ||
Business Hours Start FieldbusinessHoursStartField | ✓ | String | en blanco | Nombre de API del campo Time del objeto de recurso que define cuándo pasa a estar disponible cada día. Ejemplo: Business_Hours_Start__c (con valor 08:00:00.000Z para las 8:00). En blanco se usan franjas horarias para todo el intervalo configurado. | ||
Business Hours End FieldbusinessHoursEndField | ✓ | String | en blanco | Nombre de API del campo Time del objeto de recurso que define la última hora disponible de cada día. Ejemplo: Business_Hours_End__c (con valor 18:00:00.000Z para las 18:00). | ||
Allow Multiple ResourcesTambién aparece como Allow Booking Multiple ResourcesallowMultipleResources | ✓ | Boolean | false | Activado, los usuarios pueden seleccionar varios recursos con casillas y reservarlos todos a la vez. La cuadrícula de horarios muestra solo las franjas libres en TODOS los recursos seleccionados. Ejemplo: reservar una sala Y un proyector al mismo tiempo. | ||
Allow No ResourceTambién aparece como Allow Save Without Picking a ResourceallowNoResource | ✓ | Boolean | false | Activado, los usuarios pueden Guardar sin elegir ningún recurso: la búsqueda al recurso del registro guardado queda vacía. Pensado para quien registra cierres o fechas bloqueadas, donde un recurso en blanco significa 'se aplica a todos'. Los calendarios que leen esos cierres con un filtro por recurso (blockedDatesResourceField) tratan un recurso vacío como válido para toda la región, así que, junto con allowNoResource, se obtiene el patrón de 'asesor opcional'. Déjalo desactivado (predeterminado) en las reservas normales, donde siempre hay que elegir un recurso. | ||
Booking Object API NameresourceBookingObject | ✓ | String | en blanco | Nombre de API del objeto donde se crean los registros de reserva. Un registro por fecha y por recurso. Ejemplo: Room_Booking__c, Equipment_Reservation__c | ||
Booking Date FieldbookingDateField | ✓ | String | en blanco | Nombre de API del campo Date del objeto de reserva. Debe ser de tipo Date (no DateTime). Ejemplo: Booking_Date__c | ||
Booking Resource FieldbookingResourceField | ✓ | String | en blanco | Nombre de API del campo de búsqueda del objeto de reserva que apunta al recurso. Ejemplo: Room__c (búsqueda de Room_Booking__c a Room__c) | ||
Booking Start Time FieldbookingStartTimeField | ✓ | String | en blanco | Nombre de API del campo Time del objeto de reserva para la hora de inicio. Ejemplo: Start_Time__c. Déjalo en blanco para reservas por día, sin franjas horarias. | ||
Booking End Time FieldbookingEndTimeField | ✓ | String | en blanco | Nombre de API del campo Time del objeto de reserva para la hora de fin. Ejemplo: End_Time__c. El sistema calcula la hora de fin a partir de las franjas seleccionadas. | ||
Book Button LabelresourceBookButtonLabel | ✓ | String | Book | Texto del botón que confirma la reserva. Ejemplo: 'Reservar ahora', 'Reservar', 'Confirmar reserva' | ||
Capacity FieldcapacityField | ✓ | String | en blanco | Nombre de API de un campo Number del objeto de recurso que define el máximo de reservas simultáneas por franja horaria. Si se define, las franjas muestran un indicador X/Y y siguen disponibles hasta llenarse. Ideal para aulas de formación, puestos compartidos o inscripciones a clases. Déjalo en blanco para una reserva por franja. Ejemplo: Capacity__c | ||
Capacity Aggregation (multi-resource)capacityAggregation | ✓ | String | Combined | SOLO EN MODO DE RESERVA CON CAPACIDAD (requiere Capacity Field). Controla cómo se calcula la capacidad X/Y cuando se seleccionan varios recursos. COMBINED (predeterminado) suma reservas Y capacidades: lo mejor cuando cada recurso es un inventario independiente (p. ej. 4 registros en 4 salas con capacidad 5 cada una = 4/20). DISTINCT cuenta eventos únicos (los registros con la misma fecha + hora de inicio + hora de fin en distintos recursos cuentan como UNO) y usa la MAYOR capacidad individual: lo mejor cuando un evento ocupa varios recursos a la vez (4 registros en 4 salas = 1/5). | ||
Show Availability CountshowAvailabilityCount | ✓ | Boolean | true | Activado, muestra detalles de disponibilidad en el panel de recursos (p. ej. '3/5 días disponibles'). Ayuda a los usuarios a elegir el mejor recurso antes de reservar. Requiere que esté configurado Resource Object API Name. | ||
| Conflictos | ||||||
Conflict BehaviorconflictBehavior | ✓ | ✓ | String | block | Controla qué ocurre cuando las fechas seleccionadas chocan en horario con registros existentes. 'block' (predeterminado): se bloquea el guardado y se resaltan las fechas en conflicto. 'skip': se guarda, pero se omiten las fechas en conflicto. 'allow': sin comprobación de conflictos. Solo se aplica en modo de cuadrícula compartida (Time Display Mode='grid' + Allow Different Times Per Date=OFF). | |
Buffer Between Bookings (Minutes)bufferMinutes | ✓ | ✓ | Integer | 0 | Minutos que se dejan libres después de cada reserva existente para limpieza o preparación, por recurso en Booking. Una hora que empezaría dentro del margen cuenta como ocupada en todos los lugares donde se muestra la disponibilidad (cuadrícula de horarios, recuentos de capacidad, arrastre en Semana) y al guardar, y Conflict Behavior decide qué ocurre. Ejemplo: 15 deja un cuarto de hora entre reuniones en la misma sala. | |
Conflict Look-Ahead DaysconflictLookAheadDays | ✓ | ✓ | Integer | 360 | Cuántos días por delante se comprueban los conflictos de franjas y se carga la disponibilidad. Predeterminado: 360. Redúcelo para mejorar el rendimiento en objetos con mucho volumen. | |
| Sub-bloques | ||||||
Consolidate Time SpanconsolidateTimeSpan | ✓ | ✓ | Boolean | false | Activado, las franjas seleccionadas se devuelven como un único rango desde el inicio de la primera franja hasta el fin de la última. Los huecos entre franjas seleccionadas se vuelven naranjas automáticamente y se registran como sub-bloques. Úsalo cuando necesites el turno completo (p. ej. de 9:00 a 17:00) y registrar las pausas por separado. Solo se aplica en modo grid. | |
Sub-Block Button LabelsubBlockModeButtonLabel | ✓ | ✓ | String | en blanco | Si se define, añade un botón conmutador para que los usuarios marquen franjas a mano como sub-bloques (naranja). Útil para sub-bloques en los extremos del turno. Déjalo en blanco para usar solo el naranja automático. Ejemplo: 'Marcar como pausa', 'Marcar como comida'. Requiere Consolidate Time Span activado. | |
Show Sub-Block Toggle ButtonshowSubBlockButton | ✓ | ✓ | Boolean | false | Activado, muestra el botón conmutador de sub-bloques en el encabezado de la cuadrícula de horarios. Requiere Consolidate Time Span activado y Sub-Block Button Label definido. | |
Sub-Block Object API NamesubBlockObjectApiName | ✓ | ✓ | String | en blanco | Nombre de API del objeto hijo para los registros de sub-bloque. Ejemplo: Work_Break__c. Requiere Consolidate Time Span activado y el modo guardar con un clic (Parent Record Id definido). | |
Sub-Block Parent Lookup FieldsubBlockParentLookupField | ✓ | ✓ | String | en blanco | Campo de búsqueda del objeto de sub-bloque que lo vincula al registro principal. Ejemplo: Shift__c. Obligatorio si se define Sub-Block Object. | |
Sub-Block Date FieldsubBlockDateField | ✓ | ✓ | String | en blanco | Campo de fecha del objeto de sub-bloque. Ejemplo: Break_Date__c. Obligatorio si se define Sub-Block Object. | |
Sub-Block Start Time FieldsubBlockStartTimeField | ✓ | ✓ | String | en blanco | Campo de hora de inicio del objeto de sub-bloque. Ejemplo: Break_Start__c. Obligatorio si se define Sub-Block Object. | |
Sub-Block End Time FieldsubBlockEndTimeField | ✓ | ✓ | String | en blanco | Campo de hora de fin del objeto de sub-bloque. Ejemplo: Break_End__c. Obligatorio si se define Sub-Block Object. | |
Sub-Block Name FieldsubBlockNameField | ✓ | ✓ | String | en blanco | Campo de texto del objeto de sub-bloque para guardar una etiqueta. Ejemplo: Break_Name__c. Obligatorio si se define Sub-Block Object. | |
| Fechas bloqueadas | ||||||
Blocked Dates ObjectblockedDatesSourceObject | ✓ | ✓ | ✓ | String | en blanco | Nombre de API de un objeto del que se consultan las fechas que no se pueden seleccionar. Ejemplo: Public_Holiday__c |
Blocked Dates Date FieldblockedDatesDateField | ✓ | ✓ | ✓ | String | en blanco | Nombre de API del campo Date del objeto de fechas bloqueadas. Requiere que esté definido Blocked Dates Object. |
Blocked Dates Start Time FieldblockedDatesStartTimeField | ✓ | ✓ | ✓ | String | en blanco | Opcional: campo Time del objeto de bloqueos que marca el INICIO de un cierre de parte del día. Si se definen los campos de hora de inicio y de fin y un registro bloqueado tiene ambos, solo se cierra ese rango horario en la fecha (el resto sigue disponible). Déjalo en blanco para bloquear el día completo. |
Blocked Dates End Time FieldblockedDatesEndTimeField | ✓ | ✓ | ✓ | String | en blanco | Opcional: campo Time del objeto de bloqueos que marca el FIN de un cierre de parte del día. Va junto con Blocked Dates Start Time Field. |
Blocked Dates Resource FieldblockedDatesResourceField | ✓ | ✓ | ✓ | String | en blanco | Opcional: limita un cierre a un solo recurso. Indica el nombre de API de un campo de búsqueda o de recurso del objeto de bloqueos; cuando el recurso de un registro bloqueado coincide con el recurso seleccionado en el calendario, solo ese recurso se cierra en ese rango horario. En blanco, cada cierre se aplica a TODOS los recursos (toda la región). El bloqueo en sí lo activa Blocked Dates Source Object, no este campo. Solo tiene sentido con reserva de recursos. |
Blocked Dates Filter FieldblockedDatesFilterField | ✓ | ✓ | ✓ | String | en blanco | Opcional: campo de filtro del objeto de bloqueos. Dos modos: (a) modo valor: si Blocked Dates Filter Value está definido, limita los registros bloqueados a <field> = <value> (p. ej. Status__c = Cancelled). (b) modo registro principal: si Filter Value está en blanco, trata este campo como una búsqueda al registro actual y limita por <field> = recordId. Déjalo en blanco para bloquear de forma global. |
Blocked Dates Filter ValueblockedDatesFilterValue | ✓ | ✓ | ✓ | String | en blanco | Opcional: valor con el que filtrar Blocked Dates Filter Field. Si se define, los registros bloqueados deben cumplir <filterField> = <filterValue> (p. ej. Status__c = Cancelled). Permite que varias categorías de bloqueos convivan en la misma tabla: cada calendario elige qué categoría le afecta. |
| Salidas del flujo | ||||||
Output Date Ranges as JSONoutputAsJson | ✓ | ✓ | Boolean | false | Activado, rellena la salida Date Ranges JSON con las fechas consecutivas agrupadas en rangos. Necesario si quieres usar la acción MultiDatePickParser para recorrer los rangos en un bucle. | |
Selected Dates (Output)selectedDates | ✓ | ✓ | String[] | en blanco | SALIDA: matriz con todas las fechas seleccionadas en formato ISO (YYYY-MM-DD). Úsala en tu flujo para crear registros o pasarla a la siguiente pantalla. | |
Date Ranges JSON (Output)selectedDateRangesJson | ✓ | ✓ | String | en blanco | SALIDA: JSON con las fechas consecutivas agrupadas en rangos. Solo se rellena con 'Output Date Ranges as JSON' activado. Pásalo a MultiDatePickParser para recorrerlo en el flujo. | |
Dates With Times JSON (Output)selectedDatesWithTimesJson | ✓ | String | en blanco | SALIDA: cadena JSON con cada fecha y su hora seleccionada. Pásala a MultiDatePickParser para recorrerla en tu flujo. | ||
Sub-Blocks JSON (Output)subBlocksJson | ✓ | String | en blanco | SALIDA: JSON con las ventanas de sub-bloque (huecos o pausas) por fecha. Solo se rellena con Consolidate Time Span activado. Úsalo en un bucle del flujo para crear registros hijos. | ||
Successful Bookings Count (Output)bookingSuccessCount | ✓ | Integer | en blanco | SALIDA: número de registros de reserva creados correctamente. Úsalo en tu flujo para mostrar un mensaje de confirmación. | ||
Conflict Dates (Output)bookingConflictDates | ✓ | String[] | en blanco | SALIDA: lista de fechas en las que no se pudieron crear reservas por conflictos con reservas existentes. | ||
Ninguna propiedad coincide con tu filtro o búsqueda.
16. Seguridad y accesibilidad
- Aprobado en la revisión de seguridad de Salesforce AppExchange.
- 100 % nativo. Tus datos se quedan en tu organización de Salesforce. Sin servidores externos ni llamadas externas. Consulta Confianza y seguridad.
- Siempre con tus permisos. Cada lectura y cada guardado se ejecutan con el acceso del propio usuario, así que los permisos de objeto, la seguridad a nivel de campo y la colaboración se aplican en cada registro.
- Accesible. WCAG 2.1 AA, probado con axe-core. VPAT 2.5 completo.
- 9 idiomas: inglés, español, francés, alemán, japonés, hindi, portugués (Brasil), italiano y chino (simplificado).
17. ¿Preguntas o errores?
¿Falta algo en esta guía o algo no funciona? Escribe a support@multidatepick.com.
¿Listo para verlo en tu organización?
US$20 por usuario al mes, todas las funciones incluidas y prueba gratuita de 30 días. Próximamente en Salesforce AppExchange.