2011-02-09 14 views
8

Sto usando asp mvc 3, jquery calendario completo, ms sql sever 2008 e C#.Come creare eventi del calendario ricorrenti?

Mi chiedo se qualcuno sa come creare eventi ricorrenti?

Non sono sicuro di come realizzarli.

Ad esempio nel calendario di google è possibile fissare un appuntamento ogni anno per sempre. Dubito che generino quell'appuntamento X volte nel database.

Mi chiedo come potrei avere una riga nel mio database e in qualche modo sapere chiamarlo quando necessario.

Google ha anche il calendario e le prospettive hanno un sacco di opzioni come ripetente al 1 ° mese, il mese scorso ed ecc

c'è qualche librerie di compilazione che ha questo? O devo farlo da zero?

P.S

Io sono su un host condiviso così una soluzione deve lavorare con diritti limitati.

+0

Questa domanda potrebbe essere utile: http://stackoverflow.com/questions/1274003/adding-recurring-event-to-google-calendar-via-xml – jrummell

+0

Hai implementato questo? Ho anche bisogno dello stesso –

risposta

9

Generare tutte le possibili ripetizioni di un evento (in teoria) riempirebbe il tuo spazio di archiviazione con eventi che molto probabilmente non sarebbero mai stati visti dall'utente (congratulazioni per il tuo 999,999,999,999,999,999,999 ° compleanno!).

ci vuole un po 'più di lavoro, ma la soluzione è quella di memorizzare fondamentalmente una tabella (o tabelle) delle regole di ripetizione che vi uniscono le voci del calendario di come si costruisce un calendario:

"per tutti i giorni della settimana viene mostrato, verificare la presenza di eventi che si ripetono in quei giorni" 'per ogni settimana del mese di essere indicati, verificare la presenza di eventi che si ripetono in quelle settimane' 'per ogni mese in un anno', ecc ...

Quanti di questi controlli devi fare dipende da quanti tipi (e durata) di ripetizioni vorrai.

Come per gli eventi di soppressione, questa è un'altra tabella che elenca i punti alle date/orari che devono essere soppressi. "Se mostrando il lunedì, mostrare tutti gli eventi che si ripetono in mesi, ad eccezione di quelli elencati nella tabella soppressione"

commento followup:

Beh, avresti il ​​vostro tavolo voce del calendario di serie, per memorizzare le informazioni di base . data/ora, ecc ... Quindi almeno altre due tabelle per memorizzare le informazioni di ripetizione. Uno che memorizza le regole di ripetizione. "Ogni lunedi", "primo giorno del mese", "ogni anno", ecc ..., e una terza tabella che collega tra le voci di calendario e le regole

così:

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

Interrogazione sarebbe una questione di costruzione di cose in modo che per la data che stai considerando, le regole appropriate escano e ti danno gli ID delle voci del calendario da visualizzare. Potrebbe diventare brutto se fai una query elaborata che si collega in modo dinamico alle regole appropriate in base a una data passata.

+0

@Marc B - Puoi approfondire? Come lascia prendere le ripetizioni ogni lunedì. Quindi come sarebbe la costruzione del calendario? Vorrei fare una query per trovare tutte le attività che sono "ripetere il lunedì", quindi costruito 4 per quella settimana intera? – chobo2

+0

@Marc B - Quindi questa tabella di collegamenti dovrebbe avere solo quale id (cioè quale regola viene utilizzata). Quindi vorrei una query su questo tavolo e scoprire quali regole vengono utilizzate? – chobo2

+0

Fondamentalmente si. Il link delle regole potrebbe contenere informazioni aggiuntive, come "solo per i prossimi 10 lunedì" o "stop ripetuto nel 2011", ecc ... ma in pratica: alcune voci del calendario e alcuni dati aggiuntivi su come/quando ripeterli. –

0

Ogni volta che qualcuno fa una domanda come questa il link per prenotare "Sviluppo di applicazioni database orientate al tempo in SQL " viene fuori. È disponibile legittimamente come free PDF e su Amazon.

0

Dato che hai inserito il tag # google-calendar, immagino che sia quello con cui stai lavorando. Google Calendar utilizza le chiamate REST e JSON. Ecco un esempio:

{ 
    "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" 
    ] 
} 

Questo creerà un evento dal titolo "Progetto Daily" che accade tutti i giorni 10:00-11:00, e lo ripete per 5 giorni di fila.

Dato che stai utilizzando C#, puoi anche utilizzare l'oggetto Event dell'API di Google (v3). Questo ha tutte le proprietà necessarie per creare un evento ricorsivo. Tuttavia, dovresti comunque dare un'occhiata alla struttura JSON per capire come si formano le regole di ricorsione.

Se non si utilizza Google Calendar, è comunque possibile utilizzare le proprie API come guida: è sufficiente creare regole per eventi ripetuti anziché istanze reali. Utilizzare un thread o un timer per interrogare il database ogni minuto per nuovi eventi, in base a singoli eventi (che non hanno regole di ricorsione) e regole di eventi ripetute.

Problemi correlati