Как создать повторяющиеся события календаря? - PullRequest
8 голосов
/ 09 февраля 2011

Я использую asp mvc 3, полный календарь jquery, ms sql sever 2008 и c #.

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

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

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

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

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

Существуют ли какие-нибудь библиотеки, в которых есть это?Или я должен сделать это с нуля?

PS

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

Ответы [ 3 ]

9 голосов
/ 09 февраля 2011

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

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

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

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

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

Комментарий:

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

так:

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

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

1 голос
/ 12 февраля 2015

Поскольку вы включили тег # 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"
  ]
}

Это создаст событие под названием «Ежедневный проект», которое происходит ежедневно с 10:00 до 11:00, и повторяется в течение 5 дней подряд.

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

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

0 голосов
/ 09 февраля 2011

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

...