Fechas recurrentes en Salesforce: patrones de repetición
Un martes sí y otro no. El segundo y el cuarto viernes. El último sábado del mes. Son reglas de negocio de lo más corrientes, y Salesforce no tiene ningún campo que exprese ninguna de ellas.
En Salesforce la recurrencia existe para eventos y tareas, y ahí se acaba. En cuanto tu programación vive en un objeto personalizado (un turno, una sesión, una inspección, una guardia rotativa), estás solo, y lo habitual es que alguien calcule las fechas en un calendario de papel y las introduzca a mano.
Los dos tipos de recurrencia a los que se refiere la gente
Se suelen confundir, y cada uno necesita una lógica distinta.
| Tipo | Ejemplos | Qué necesita |
|---|---|---|
| Por intervalo | Cada semana, cada 2 semanas, cada 3 semanas | Un día de la semana y un intervalo de repetición |
| Por aparición en el mes | 1.er lunes, 2.º y 4.º viernes, último sábado | Qué aparición dentro de cada mes |
La recurrencia por intervalo cuenta hacia delante desde una fecha de inicio y no le importan los cambios de mes. La recurrencia por aparición se reinicia cada mes, y «el último» es delicado porque cae en la 4.ª o la 5.ª semana según el mes. Esa sola palabra es donde fallan la mayoría de las implementaciones caseras.
Por qué programarlo tú mismo sale mal
Los meses no duran lo mismo
«El quinto lunes» existe en algunos meses y en otros no.
Años bisiestos
Desplazan sin avisar cualquier cálculo que suponga un año fijo.
«Cada dos semanas» necesita un punto de partida
¿Cada dos semanas a partir de cuándo? Dos personas no se pondrán de acuerdo.
Fines de semana y festivos
Puede que haya que saltárselos, y tus festivos están en los datos de tu propia organización.
Generar fechas demasiado lejos
Crea miles de registros que nadie ha pedido.
Ninguno es difícil por separado. Juntos suponen una semana de trabajo y una fuente permanente de errores en casos límite.
Generar fechas en lugar de guardar una regla
Debajo del algoritmo hay una decisión de diseño: ¿guardas la regla y la expandes al leerla, o la expandes una vez y guardas las fechas resultantes?
En Salesforce, guardar las fechas es casi siempre la mejor respuesta. Los registros de fechas concretas se pueden usar en informes, resúmenes y filtros, y disparan automatizaciones como cualquier otro dato. Una regla guardada hay que interpretarla en cada sitio donde se usa, y los informes de Salesforce no pueden interpretarla en absoluto. La contrapartida es que cambiar el patrón obliga a regenerar las fechas, y por eso el selector de patrones debe estar en el momento de introducir los datos y no escondido en la configuración.
Los tres patrones, en pantalla
Días personalizados va primero, porque ningún campo estándar lo puede expresar. Elige cualquier combinación de días de la semana, fija el intervalo, indica un rango y el calendario marca todas las fechas que coinciden antes de que guardes nada.
Días laborables y Fines de semana son los dos atajos más usados, y hacen la misma expansión con un solo clic.
Deja que vean las fechas antes de confirmar
Lo mejor que puede hacer una interfaz de recurrencia es mostrar el resultado. Cuando el usuario elige «cada 2 semanas el martes» y ve al instante las fechas reales resaltadas en un calendario, los errores se detectan un segundo antes de guardar y no una semana después. También zanja al momento la discusión de «cada dos semanas a partir de cuándo», porque el punto de partida está a la vista.
Lo mismo vale para la consolidación. Si tu selección recurrente da de lunes a viernes durante seis semanas, puede que quieras treinta registros o puede que quieras seis, uno por semana, con fecha de inicio y de fin. Decidirlo al seleccionar sale mucho más barato que migrar después.
Un martes sí y otro no, con un clic
Prueba un patrón recurrente en la demo en vivo. Las fechas aparecen en el calendario antes de guardar.
- 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