Планирование повторных встреч, как повторяющихся событий в Outlook

Повторяющиеся события — важная составляющая работы с календарями в Outlook. Будь то еженедельная встреча один на один с вашим руководителем или обзорная встреча всего отдела, которая проводится во второй вторник каждого месяца, повторяющиеся события позволяют легко создать событие один раз и позволить серверу заполнить остальную часть серии.

Главный элемент, благодаря которому повторяющиеся события превращаются в отдельные экземпляры, — это правило повторения. Правило определяет, как часто и как долго повторяется событие. REST API для Outlook моделирует правила повторения в свойстве recurrenceресурса event.

Каждое повторение состоит из двух частей: шаблон повторения (как часто) и диапазон повторения (как долго).

Расписания повторения

Первая часть правила повторения — расписание. Оно задает частоту повторения события. Например, событие может повторяться "каждые 3 дня", "каждый четверг" или "22 июля каждый год". Шаблон представлен в API ресурсом recurrencePattern.

В зависимости от того, каков тип расписания, те или иные поля ресурса recurrencePattern могут быть обязательными, необязательными или игнорируемыми.

Примечание.

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

Рассмотрим все возможные типы расписаний.

Ежедневное

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

Соответствующие свойства

Свойство Важность Описание
interval Обязательный Задает количество дней между повторениями.
type Обязательный Необходимо указать значение daily.

Примеры

  • Повторять это событие каждый день

      "pattern": {
        "type": "daily",
        "interval": 1
      }
    
  • Повторять это событие каждые три дня

      "pattern": {
        "type": "daily",
        "interval": 3
      }
    

Еженедельное

При использовании еженедельного расписания повторения событие повторяется в одни и те же дни недели в соответствии с указанным количеством недель между последовательностями экземпляров.

Соответствующие свойства

Свойство Важность Описание
daysOfWeek Обязательный Указывает, в какие дни недели происходит событие.
firstDayOfWeek Необязательный Указывает, с какого дня начинается неделя. Значение по умолчанию: Sunday.
interval Обязательный Задает количество недель между наборами повторений.
type Обязательный Необходимо указать значение weekly.

Примеры

  • Повторять это событие каждый четверг

      "pattern": {
        "type": "weekly",
        "interval": 1,
        "daysOfWeek": [ "Thursday" ]
      }
    
  • Повторять это событие каждый понедельник и вторник

      "pattern": {
        "type": "weekly",
        "interval": 2,
        "daysOfWeek": [
          "Monday",
          "Tuesday"
        ]
      }
    

Абсолютное ежемесячное

При использовании абсолютного ежемесячного расписания событие повторяется в одно и то же число месяца (например, 15-е) в соответствии с указанным количеством месяцев между повторениями.

Соответствующие свойства

Свойство Важность Описание
dayOfMonth Обязательный Указывает, в какой день месяца происходит событие.
interval Обязательный Задает количество месяцев между повторениями.
type Обязательный Необходимо указать значение absoluteMonthly.

Примеры

  • Повторять это событие 15-го числа каждого месяца

      "pattern": {
        "type": "absoluteMonthly",
        "interval": 1,
        "dayOfMonth": 15
      }
    
  • Повторять это событие ежеквартально (каждые 3 месяца) 7-го числа

      "pattern": {
        "type": "absoluteMonthly",
        "interval": 3,
        "dayOfMonth": 7
      }
    

Относительное ежемесячное

При использовании относительного ежемесячного расписания повторения событие повторяется в один и тот же день одной и той же (по счету) недели месяца в соответствии с указанным количеством месяцев между повторениями. Пример: "каждую вторую среду месяца".

Соответствующие свойства

Свойство Важность Описание
daysOfWeek Обязательный Указывает, в какие дни недели может происходить событие. Относительные ежемесячные события происходят только раз в месяц, поэтому если указать несколько значений, событие будет назначено на первый день, соответствующий расписанию.
index Необязательный Указывает, в какой из разрешенных дней, указанных в daysOfsWeek, происходит событие (начиная с первого экземпляра за месяц). Возможные значения: first, second, third, fourth и last. Значение по умолчанию: first.
interval Обязательный Задает количество месяцев между повторениями.
type Обязательный Необходимо указать значение relativeMonthly.

Примеры

  • Повторять это событие во вторую среду каждого месяца

      "pattern": {
        "type": "relativeMonthly",
        "interval": 1,
        "daysOfWeek": [ "Wednesday" ],
        "index": "second"
      }
    
  • Повторять это событие в первый четверг или первую пятницу каждого месяца

      "pattern": {
        "type": "relativeMonthly",
        "interval": 1,
        "daysOfWeek": [ "Thursday", "Friday" ],
        "index": "first"
      }
    

Абсолютное ежегодное

При использовании абсолютного ежегодного расписания событие повторяется в одни и те же месяц и день года (например, 15 апреля) в соответствии с указанным количеством лет между повторениями.

Соответствующие свойства

Свойство Важность Описание
dayOfMonth Обязательный Указывает, в какой день месяца происходит событие.
month Обязательный Указывает, в какой месяц происходит событие.
interval Обязательный Задает количество лет между повторениями.
type Обязательный Необходимо указать значение absoluteYearly.

Пример

  • Повторять это событие 15 апреля каждого года

      "pattern": {
        "type": "absoluteYearly",
        "interval": 1,
        "dayOfMonth": 15,
        "month": 4
      }
    

Относительное ежегодное

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

Соответствующие свойства

Свойство Важность Описание
daysOfWeek Обязательный Указывает, в какие дни недели может происходить событие. Относительные ежегодные события происходят только раз в год, поэтому если указать несколько значений, событие будет назначено на первый день, соответствующий расписанию.
index Необязательный Указывает, в какой из разрешенных дней, указанных в daysOfsWeek, происходит событие (начиная с первого экземпляра за месяц). Возможные значения: first, second, third, fourth и last. Значение по умолчанию: first.
month Обязательный Указывает, в какой месяц происходит событие.
interval Обязательный Задает количество лет между повторениями.
type Обязательный Необходимо указать значение relativeYearly.

Примеры

  • Повторять это событие в последнюю среду ноября каждого года

      "pattern": {
        "type": "relativeYearly",
        "interval": 1,
        "daysOfWeek": [ "Wednesday" ],
        "index": "last",
        "month": 11
      }
    

Диапазоны повторения

Вторая часть правила повторения — диапазон. Он задает продолжительность повторения расписания. Например, событие может быть отменено после 10 повторений, в указанную дату или повторяться бесконечно. Диапазон представлен в API ресурсом recurrenceRange.

В зависимости от того, каков тип диапазона, те или иные поля ресурса recurrenceRange могут быть обязательными или игнорируемыми.

Примечание.

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

Рассмотрим все возможные типы диапазонов.

Нумерованный диапазон

Нумерованный диапазон задает фиксированное количество повторений события (в соответствии с расписанием) с даты начала.

Соответствующие свойства

Свойство Важность Описание
numberOfOccurrences Обязательный Задает количество повторений. Это должно быть положительное целое число.
recurrenceTimeZone Необязательный Задает часовой пояс для свойства startDate. Если это свойство не задано, используется часовой пояс события.
startDate Обязательный Задает дату, с которой начинает применяться расписание. Значение свойства startDate ДОЛЖНО соответствовать значению даты в свойстве startресурса event. Обратите внимание, что первого собрания может не быть в этот день, если он не соответствует расписанию.
type Обязательный Необходимо указать значение numbered.

Примеры

  • Повторять это событие 10 раз

      "range": {
        "type": "numbered",
        "startDate": "2017-04-02",
        "numberOfOccurrences": 10
      }
    

Диапазон с датой окончания

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

Соответствующие свойства

Свойство Важность Описание
endDate Обязательный Задает дату, с которой расписание перестает применяться. Обратите внимание, что последнего собрания может не быть в этот день, если он не соответствует расписанию.
recurrenceTimeZone Необязательный Задает часовой пояс для свойств startDate и endDate. Если это свойство не задано, используется часовой пояс события.
startDate Обязательный Задает дату, с которой начинает применяться расписание. Значение свойства startDate ДОЛЖНО соответствовать значению даты в свойстве startресурса event. Обратите внимание, что первого собрания может не быть в этот день, если он не соответствует расписанию.
type Обязательный Необходимо указать значение endDate.

Примеры

  • Повторять это событие с 1 июля 2017 г. до 31 июля 2017 г.

      "range": {
        "type": "endDate",
        "startDate": "2017-07-01",
        "endDate": "2017-07-31"
      }
    

Бесконечный диапазон

При использовании бесконечного диапазона событие происходит во все дни, соответствующие применимому расписанию, после даты начала.

Соответствующие свойства

Свойство Важность Описание
recurrenceTimeZone Необязательный Задает часовой пояс для свойства startDate. Если это свойство не задано, используется часовой пояс события.
startDate Обязательный Задает дату, с которой начинает применяться расписание. Значение свойства startDate ДОЛЖНО соответствовать значению даты в свойстве startресурса event. Обратите внимание, что первого собрания может не быть в этот день, если он не соответствует расписанию.
type Обязательный Необходимо указать значение noEnd.

Примеры

  • Бесконечно повторять это событие с 15 мая 2017 г.

      "range": {
        "type": "noEnd",
        "startDate": "2017-05-15"
      }
    

Создание повторяющихся событий с помощью расписаний и диапазонов

Теперь, когда мы рассмотрели расписания и диапазоны по отдельности, посмотрим на их совместную работу и взаимодействие со свойствами start и end события.

Создание правила повторения

Чтобы создать правило повторения, необходимо указать и расписание, и диапазон. Расписания всех типов совместимы с диапазонами всех типов. Вот несколько примеров.

Примеры

  • Проведение собраний с 13:00 до 13:30 каждый понедельник, начиная с 4 сентября 2017 г., до конца года

    • Требование "каждый понедельник" легко соблюдается с помощью расписания повторения типа weekly.
    • Требование "до конца года" указывает на диапазон повторения типа endDate.
      "recurrence": {
        "pattern": {
          "type": "weekly",
          "interval": 1,
          "daysOfWeek": [ "Monday" ]
        },
        "range": {
          "type": "endDate",
          "startDate": "2017-09-04",
          "endDate": "2017-12-31"
        }
      }
    

    31 декабря 2017 г. выпадает на воскресенье, поэтому последнее событие в этой серии произойдет в понедельник, 25 декабря.

  • Проведение собраний с 14:00 до 15:00 в первый четверг каждого второго месяца, начиная с 29 августа 2017 г.

    • Требование "первый четверг каждого второго месяца" можно соблюдать с помощью относительного ежемесячного расписания. Фрагмент "каждого второго месяца" указывает, что для свойства interval необходимо задать значение 2.
    • Дата окончания не указана, поэтому можно использовать диапазон типа noEnd.
      "recurrence": {
        "pattern": {
          "type": "relativeMonthly",
          "interval": 2,
          "daysOfWeek": [ "Thursday" ],
          "index": "first"
        },
        "range": {
          "type": "noEnd",
          "startDate": "2017-08-29"
        }
      }
    

    Значение свойства startDate является более поздней датой, чем первый четверг августа, поэтому первое событие в этой серии произойдет в сентябре.