api.calendarEvent Работа с событиями календаря в формате ICS

  • api.calendarEvent.create(summary, start)

    Создание события.

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

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

    Параметры метода:

    • summary — название события. String;
    • start — дата и время начала события. Date.

Методы интерфейса ICalendarEvent для работы с моделью события

  • ICalendarEvent setEndDateTime(end)

    Устанавливает дату и время окончания события.

    Параметр метода:

    • end — дата и время окончания события. Date.
  • ICalendarEvent setDescription(description)

    Устанавливает описание события.

    Параметр:

    • description — описание события. String.
  • ICalendarEvent setRecurRule(frequency, count)

    ICalendarEvent setRecurRule(frequency, endRecur)

    Устанавливает повторяемость события.

    Параметры метода:

    • frequency — частота события. String.

      • "FREQ_DAILY" — ежедневно;
      • "FREQ_WEEKLY"' — еженедельно;
      • "FREQ_MONTHLY" — ежемесячно;
      • "FREQ_YEARLY" — ежегодно.
    • count — количество повторений события. Int;
    • endRecur — количество повторений события. Date.
  • getContentAsString()

    Получение события в виде строки для сохранения.

Пример 1.

Copy
/* Параметры */
String eventTitle = "Название события";
String eventDescription = "Описание события";
String fileName = "event.ics"; //имя файла с расширением
String rootUuid = "root\$801"; //UUID объекта к которому прикрепится событие
String contentType = "text/calendar"; //тип содержимого файла (mime-тип)

def s = new GregorianCalendar(2021, Calendar.APRIL, 28, 18, 0); //дата начала события
def e = new GregorianCalendar(2021, Calendar.APRIL, 28, 19, 0); //дата окончания события
def r = new GregorianCalendar(2021, Calendar.APRIL, 30, 20, 0); //дата до которой будет повторяться событие

/* Создание модели события */
def event = api.calendarEvent.create(eventTitle, s.getTime())
                    .setEndDateTime(e.getTime())
                    .setRecurRule(api.calendarEvent.FREQ_DAILY, r.getTime())
                    .setDescription(eventDescription);

/* Прикрепление файла к объекту */
def attachedEvent = api.utils.attachFile(utils.get(rootUuid), fileName, contentType, fileName, event.getContentAsString().getBytes());

Пример 2.

Copy
/* Параметры */
String eventTitle = "Название события";
String eventDescription = "Описание события";
String fileName = "event.ics"; //имя файла с расширением
String rootUuid = "root\$801"; //UUID объекта к которому прикрепится событие
String contentType = "text/calendar"; //тип содержимого файла (mime-тип)
String timeZone = "Europe/Copenhagen"; // часовой пояс в котором указвыаются даты\время события

def s = new GregorianCalendar(TimeZone.getTimeZone(timeZone));
s.set(2021, 5, 19, 18, 0, 0); //дата начала события
def e = new GregorianCalendar(TimeZone.getTimeZone(timeZone));
e.set(2021, 5, 19, 19, 0, 0); //дата окончания события
def r = new GregorianCalendar(TimeZone.getTimeZone(timeZone));
r.set(2021, 5, 21, 20, 0, 0); //дата до которой будет повторяться событие

/* Создание модели события */
def event = api.calendarEvent.create(eventTitle, s.getTime(), timeZone)
                    .setEndDateTime(e.getTime())
                    .setRecurRule(api.calendarEvent.FREQ_DAILY, r.getTime())
                    .setDescription(eventDescription);

Пример 3.

Copy
/* Параметры */
String eventTitle = "Название события";
String eventDescription = "Описание события";
String fileName = "event.ics"; //имя файла с расширением
String rootUuid = 'ou$801'; //UUID объекта к которому прикрепится событие
String contentType = "text/calendar"; //тип содержимого файла (mime-тип)
String timeZone = "Europe/Moscow"; // часовой пояс в котором указвыаются даты\время события

def s = new Date().parse("dd/MM/yyyy HH:mm XXX", "17/06/2021 17:00 +03:00")
def e = new Date().parse("dd/MM/yyyy HH:mm XXX", "17/06/2021 18:00 +03:00")
def r = new Date().parse("dd/MM/yyyy HH:mm XXX", "29/06/2021 17:00 +03:00")

/* Создание модели события */
def event = api.calendarEvent.create(eventTitle, s, timeZone)
                    .setEndDateTime(e)
                    .setRecurRule(api.calendarEvent.FREQ_DAILY, r)
                    .setDescription(eventDescription);
def attachedEvent = api.utils.attachFile(utils.get(rootUuid), fileName, contentType, fileName, event.getContentAsString().getBytes());

Методы интерфейса ICalendarEvent для корректного отображения события в письме оповещения

  • ICalendarEvent setOrganizerName(name)

    Устанавливает имя организатора.

    Для корректного отображения события в письме обязательно нужно создавать событие с использованием методов setOrganizerEmail и setOrganizerName.

    Параметр метода:

    • name — имя организатора. String.
  • ICalendarEvent setOrganizerEmail(organizerEmail)

    Устанавливает email организатора.

    Параметр метода:

    • organizerEmail — email организатора. String.
  • ICalendarEvent setUID(uid)

    Устанавливает UID события.

    По умолчанию, заполнять UID методом setUID не нужно, поскольку это может привести к наличию одинаковых UID у разных событий. UID генерируется и присваивается событию при его создании методом create. Метод setUID нужно использовать только для переноса/отмены заданного события и в качестве аргумента передавать UID созданного раннее события, которое нужно перенести/отменить

    Параметр метода:

    • uid — UID события. String.
  • ICalendarEvent setMethod(method)

    Устанавливает метод события.

    По умолчанию, событие создается с методом REQUEST, поэтому метод setMethod можно использовать только для отмены уже существующего события

    Параметр метода:

    • method — метод события. String

      • REQUEST - запланировать событие;
      • CANCEL - отменить событие.
  • String getMethod()

    Получить метод события.

  • String getUID()

    Получить UID события.

Примеры:

  • Пример создания события календаря и прикрепления его к оповещению.

    Copy
    /* Параметры */
    String eventTitle = "Название события";
    String eventDescription = "Описание события";
    String timeZone = "Asia/Yekaterinburg"; // часовой пояс в котором указываются даты\время события
    String organizerName = "Фамилия И.О"; // имя организатора
    String organizerEmail = "test@nausd.local"; // email организатора

    def s = new GregorianCalendar(2021, Calendar.NOVEMBER, 23, 17, 0); // дата начала события
    def e = new GregorianCalendar(2021, Calendar.NOVEMBER, 23, 20, 0); // дата завершения события

    /* Создание объекта события */
    def event = api.calendarEvent.create(eventTitle, s.getTime(), timeZone)
                .setEndDateTime(e.getTime())
                .setDescription(eventDescription)
                .setOrganizerName(organizerName)
                .setOrganizerEmail(organizerEmail)

    /* Прикрепление события к оповещению */
    notification.addCalendarEvent(event)
  • Пример переноса времени события

    Для того, чтобы перенести событие созданное раннее событие, нужно иметь его UID . Для его получения нужно использовать метод getUID и полученное значение сохранить в атрибут объекта-заглушки.

    Скрипт переноса события отличается от скрипта создания события только тем, что нужно заполнить UID события.

    Copy
    /* Параметры */
    String eventTitle = "Название события";
    String eventDescription = "Описание события";
    String timeZone = "Asia/Yekaterinburg"; // часовой пояс в котором указываются даты\время события
    String organizerName = "Фамилия И.О"; // имя организатора
    String organizerEmail = "test@nausd.local"; // email организатора
    String eventUid = "f410df49-17d1-dcb5-0000-00001c9f634d" // UID события, которое нужно перенести

    def s = new GregorianCalendar(2021, Calendar.NOVEMBER, 24, 17, 0); // перенесенная дата начала события
    def e = new GregorianCalendar(2021, Calendar.NOVEMBER, 24, 20, 0); // перенесенная дата завершения события

    /* Создание объекта события */
    def event = api.calendarEvent.create(eventTitle, s.getTime(), timeZone)
                .setEndDateTime(e.getTime())
                .setDescription(eventDescription)
                .setOrganizerName(organizerName)
                .setOrganizerEmail(organizerEmail)
                .setUID(eventUid)

    /* Прикрепление события к оповещению */
    notification.addCalendarEvent(event)
  • Пример отмены события

    Скрипт отмены события отличается от скрипта создания события тем, что нужно заполнить UID события и значение параметра METHOD строкой "CANCEL".

    Copy
    /* Параметры */
    String eventTitle = "Название события";
    String eventDescription = "Описание события";
    String timeZone = "Asia/Yekaterinburg"; // часовой пояс в котором указываются даты\время события
    String organizerName = "Фамилия И.О"; // имя организатора
    String organizerEmail = "test@nausd.local"; // email организатора
    String eventUid = "f410df49-17d1-dcb5-0000-00001c9f634d" // UID события, которое нужно отменить

    def s = new GregorianCalendar(2021, Calendar.NOVEMBER, 23, 17, 0);
    def e = new GregorianCalendar(2021, Calendar.NOVEMBER, 23, 20, 0);

    /* Создание объекта события */
    def event = api.calendarEvent.create(eventTitle, s.getTime(), timeZone)
                .setEndDateTime(e.getTime())
                .setDescription(eventDescription)
                .setOrganizerName(organizerName)
                .setOrganizerEmail(organizerEmail)
                .setMethod("CANCEL")
                .setUID(eventUid)

    /* Прикрепление события к оповещению */
    notification.addCalendarEvent(event)