2011-02-09 5 views
8

Я использую asp mvc 3, jquery full calendar, ms sql sever 2008 и C#.Как создать повторяющиеся события календаря?

Мне интересно, знает ли кто, как делать повторяющиеся события?

Я не уверен, как их сделать.

Например, в календаре Google вы можете назначать встречу повторяться ежегодно навсегда. Я сомневаюсь, что они генерируют это назначение X раз в базе данных.

Мне интересно, как я мог бы иметь один ряд в своем БД и как-то знать, чтобы позвонить, когда это необходимо.

Также Google календарь и перспективы есть много повторяющихся вариантов, как повторение на 1 месяц, в прошлом месяце и т.д.

есть ли библиотеки сборки, которые имеют это? Или я должен сделать это с нуля?

P.S

Я на виртуальном хостинге, так решение должно работать с ограниченными правами.

+0

Этот вопрос может быть полезным: http://stackoverflow.com/questions/1274003/adding-recurring-event-to-google-calendar-via-xml – jrummell

+0

Вы реализовали это? Мне также нужно то же самое –

ответ

9

Создание всех возможных повторений события (теоретически) заполнит ваше хранилище событиями, которые, скорее всего, никогда не будут видны пользователю (поздравляем с 999 999 999 999 999 999 999-й день рождения!).

Это займет немного больше работы, но решение в основном хранить таблицу (или таблицы) правил повторения, которые вы связать ваши записи календаря как вы строите календарь:

«на каждый день в течение недели показываются события, которые повторяются в те дни « » на каждую неделю месяца, проверьте события, которые повторяются в те недели » « за каждый месяц в году »и т. д.

Сколько из этих проверок вам нужно сделать, зависит от того, сколько типов (и продолжительности) повторений вы хотите.

Что касается подавления событий, это еще одна таблица, в которой перечислены точки в датах/времени, которые необходимо устранить. «Если показ понедельники, показать все события, которые повторяются по месяцам, за исключением перечисленных в таблице подавителя»

комментарий Followup:

Ну, вы бы стандартную таблицу записей календаря, чтобы сохранить основную информацию , дата/время и т. д. Затем, по крайней мере, две другие таблицы для хранения повторяющейся информации. Один, который хранит ваши правила повторения. «Каждый понедельник», «первый день месяца», «каждый год», и т.д ..., и третья таблица, которая связывает между записями календаря и правилами

так:

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

запрашивая было бы вопросом создания вещей, чтобы на дату, которую вы рассматриваете, выходят соответствующие правила и приводятся идентификаторы записей календаря для отображения. Может оказаться уродливым, если вы делаете причудливый запрос, который динамически связывается с соответствующими правилами на основе даты, в которой вы прошли.

+0

@Marc B - Можете ли вы подробнее рассказать? Как позволяет повторять повторы каждый понедельник. Итак, как бы выглядело бы создание календаря? Будет ли я выполнять запрос, чтобы найти все задачи, которые повторяются в понедельник, а затем построил 4 для этой недели? – chobo2

+0

@Marc B - Таким образом, эта таблица ссылок просто будет иметь идентификатор (т. Е. Какое правило используется). Тогда я бы запросил эту таблицу и выяснил, какие правила используются? – chobo2

+0

В принципе да. Ссылка на правила может содержать дополнительную информацию, например «только в течение следующих 10 месяцев» или «перестать повторять в 2011 году» и т. Д., Но в основном - некоторые записи календаря и некоторые дополнительные данные о том, как и когда их повторять. –

0

Когда кто-то задает такой вопрос, ссылка на книгу «Разработка ориентированных на время приложений базы данных в SQL "появляется. Он доступен на законных основаниях как free PDF и на Amazon.

0

Поскольку вы включили тэг # google-calendar, я предполагаю, что это то, с чем вы работаете. В Календаре Google используются вызовы REST и JSON. Вот пример:

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

Это позволит создать мероприятие под названием «Daily проект», который происходит ежедневно с 10 утра до 11 часов утра, и повторяет ее в течение 5 дней подряд.

Поскольку вы используете C#, вы также можете использовать объект события API Google (v3). Это имеет все свойства, необходимые для создания рекурсивного события. Тем не менее, вы все равно должны взглянуть на структуру JSON, чтобы выяснить, как формируются правила рекурсии.

Если вы не используете Google Calendar, вы все равно можете использовать их API в качестве руководства: просто создайте правила для повторяющихся событий, а не фактических экземпляров. Используйте поток или таймер, чтобы каждую минуту запрашивать базу данных для новых событий на основе отдельных событий (которые не имеют правил рекурсии) и повторяющихся правил событий.

Смежные вопросы