2011-02-09 51 views
8

Estoy usando asp mvc 3, jquery calendario completo, ms sql sever 2008 y C#.¿Cómo crear eventos recurrentes de calendario?

Me pregunto si alguien sabe cómo hacer eventos recurrentes?

No estoy seguro de cómo hacerlos.

Por ejemplo, en el calendario de google puede hacer una cita para repetir el año para siempre. Dudo que generen esa cita X veces en la base de datos.

Me pregunto cómo podría tener una fila en mi base de datos y de alguna manera saber llamar cuando sea necesario.

También Google Calendar y Outlook tienen un montón de opciones como la repetición de la repetición en el 1er mes, el mes pasado y etc.

¿Hay alguna bibliotecas de generación que tiene esto? ¿O tengo que hacerlo desde cero?

P.S

estoy en un servidor compartido por lo que una solución tiene que trabajar con derechos limitados.

+0

Esta pregunta puede ser útil: http://stackoverflow.com/questions/1274003/adding-recurring-event-to-google-calendar-via-xml – jrummell

+0

¿Ha implementado esto? También necesito de la misma –

Respuesta

9

Generar todas las repeticiones posibles de un evento (en teoría) llenaría su espacio de almacenamiento con eventos que probablemente el usuario nunca haya visto (¡felicidades por su 999,999,999,999,999,999,999 aniversario!).

Se necesita un poco más de trabajo, pero la solución es almacenar básicamente una tabla (o tablas) de reglas de repetición de los que se conecte las entradas de calendario a medida que construye un calendario:

"para cada día de la Se muestra la semana, verifique los eventos que se repiten en esos días " " para cada semana del mes que se muestra, verifique los eventos que se repiten en esas semanas " " por cada mes en un año ", etc ...

Cuantos de estos controles debe hacer depende de cuántos tipos (y duración) de repeticiones desea.

En cuanto a la supresión de eventos, esa es otra tabla que enumera los puntos en las fechas/horas que deben suprimirse. "Si va a mostrar los lunes, mostrar todos los eventos que se repiten en el mes, con excepción de los que se enumeran en la tabla de supresión"

comentario seguimiento:

Bueno, tendría su mesa de entrada de calendario estándar, para almacenar la información básica . fecha/hora, etc ... Luego, al menos otras dos tablas para almacenar la información de repetición. Uno que almacena tus reglas de repetición. "Cada lunes", "primer día del mes", "todos los años", etc ..., y una tercera tabla que vincula entre las entradas del calendario y las reglas de los

así:

calendar entries table <---> link table <---> repeat rules table 

Consulta de sería una cuestión de construir cosas para que, para la fecha que esté considerando, aparezcan las reglas apropiadas y le proporcionen los ID de las entradas del calendario para mostrar. Podría ponerse feo si realiza una consulta compleja que vincule dinámicamente con las reglas apropiadas en función de una fecha que haya pasado.

+0

@Marc B - ¿Puedes elaborar más? Al igual que permite tomar repeticiones todos los lunes. Entonces, ¿cómo se vería la construcción del calendario? ¿Haría una consulta para encontrar todas las tareas que son "repetir el lunes" y luego crear 4 para toda esa semana? – chobo2

+0

@Marc B - Entonces, esta tabla de enlaces simplemente tendría qué identificación (es decir, qué regla se está utilizando). Luego, haré una consulta en esta tabla y averiguaré qué reglas se están utilizando. – chobo2

+0

Básicamente sí. El enlace de reglas puede tener información adicional, como "solo para los próximos 10 lunes" o "dejar de repetir en 2011", etc., pero básicamente, algunas entradas de calendario y algunos datos adicionales sobre cómo y cuándo repetirlos. –

0

Siempre que alguien haga una pregunta como esta el enlace para reservar "Desarrollo de aplicaciones de base de datos orientadas por tiempo en SQL " surge. Está disponible legítimamente como free PDF y en Amazon.

0

Dado que ha incluido la etiqueta # google-calendar, supongo que con eso está trabajando. Google Calendar usa llamadas REST y JSON. He aquí un ejemplo:

{ 
    "summary": "Daily project", 
    "start": { 
    "dateTime": "2011-12-12T10:00:00", 
    "timeZone": "Europe/Zurich" 
    }, 
    "end": { 
    "dateTime": "2011-12-12T11:00:00", 
    "timeZone": "Europe/Zurich" 
    }, 
    "recurrence": [ 
    "RRULE:FREQ=DAILY;COUNT=5" 
    ] 
} 

Esto creará un evento titulado "Proyecto de diario" que ocurre todos los días 10 a.m.-11 a.m., y lo repite durante 5 días seguidos.

Dado que está utilizando C#, también puede utilizar el objeto de evento Google API (v3). Esto tiene todas las propiedades que necesita para crear un evento recursivo. Sin embargo, aún debe echar un vistazo a la estructura JSON para descubrir cómo se forman las reglas de recursión.

Si no está usando Google Calendar, aún puede utilizar su API como guía: simplemente cree reglas para eventos repetidos en lugar de instancias reales. Use un hilo o un temporizador para consultar la base de datos cada minuto en busca de nuevos eventos, en función de eventos únicos (que no tienen reglas de recursión) y reglas de eventos repetidos.

Cuestiones relacionadas