MS Exchange: Регулярное получение событий из календарей с помощью временной метки SyncState
В этом документе показано, как организовать регулярное получение новых и измененных событий из календарей Microsoft Exchange с помощью временной метки SyncState. Полученные данные могут использоваться для последующего анализа, например, для оценки распределения встреч по времени и загрузки сотрудников.
Календари Microsoft Exchange часто используются как источник данных о встречах, занятости сотрудников и фактическом использовании рабочего времени. При регулярной загрузке данных без учета предыдущих запусков одни и те же события выгружаются повторно, что приводит к дублированию записей и росту объема данных. Метка SyncState позволяет получать только те события, которые были созданы, изменены или отменены после предыдущей загрузки данных, что снижает нагрузку на систему и исключает повторную обработку уже полученных событий.
Настройка получения событий из календарей Exchange с использованием SyncState выполняется в четыре этапа:
- Этап 1 — настройка подключения к MS Exchange Online
- Этап 2 — первичная загрузка событий и сохранение значения SyncState
- Этап 3 — повторный сбор событий с использованием SyncState
- Этап 4 — визуализация полученных данных
Настройка подключения к MS Exchange Online
В примере используется подключение к MS Exchange Online с аутентификацией OAuth 2.0 Client Credentials Grant.
Этот тип подключения подходит для фоновой синхронизации по расписанию и позволяет получать данные из календарей нескольких пользователей без интерактивной авторизации.
Регистрация приложения в Microsoft Entra ID
Для подключения к MS Exchange Online требуется предварительно зарегистрировать приложение в Microsoft Entra ID и выдать ему необходимые разрешения:
- Откройте Центр администрирования Microsoft Entra, перейдите в раздел Регистрация приложений и нажмите + Новая регистрация
- Укажите имя приложения и нажмите Зарегистрировать.
- В настройках приложения откройте раздел Разрешения API и перейдите в Добавить разрешение → Интерфейсы API, используемые моей организацией.
- Выберите в списке Office 365 Exchange Online и откройте Разрешения приложения.
- Добавьте разрешение full_access_as_app.
- Перейдите в раздел Сертификаты и секреты и добавьте новый секрет клиента.
- Задайте описание секрета и нажмите Добавить.
Настройка подключения в Proceset
После регистрации приложения выполните настройку подключения в системе Proceset:
- В рабочем пространстве нажмите + Добавить и выберите Подключение.
- В открывшемся окне выберите Microsoft Exchange (Вход через Microsoft).
- Задайте название подключения и нажмите Создать.
- В профиле подключения выберите способ аутентификации OAuth 2.0 Client Credentials Grant.
- Перейдите в профиль приложения в Microsoft Entra, откройте раздел Обзор и скопируйте идентификатор приложения.
- Вернитесь в настройки подключения в Proceset и укажите скопированный идентификатор в поле Client ID.
- Аналогично скопируйте идентификатор каталога и значение секрета клиента и укажите их в полях Tenant GUID и Client secret соответственно. При необходимости вы также можете указать идентификатор секрета в поле Secret ID.
- Проверьте подключение и, если оно работает корректно, сохраните его.
Первичная загрузка событий и получение значения SyncState
Чтобы получить начальное значение SyncState, необходимо выполнить первичную загрузку событий по дате:
- В рабочем пространстве нажмите + Добавить и выберите Скрипт.
- Задайте название скрипта и нажмите Добавить.
- Добавьте блок-триггер Ручной запуск.
- Добавьте блок Получить календари из пакета MS Exchange и в параметрах укажите адрес электронной почты пользователя, календари которого требуется получить.
- Добавьте блок Получить события календаря.
- В параметрах блока укажите идентификатор календаря и адрес электронной почты с помощью маппинга из предыдущего блока.
- Выберите тип сбора событий По дате, задайте период и протестируйте блок. Для первичной загрузки рекомендуется использовать короткий диапазон, например, один день.
- В выходных данных блока возвращается значение
sync_state. - Добавьте в скрипт блок Добавить строки, чтобы сохранить данные календарей и значение SyncState в отдельной таблице. Создайте новую таблицу на основе выходных данных блока Получить события календаря.
- Задайте название таблицы, проверьте типы данных колонок и нажмите Добавить.
- Протестируйте скрипт.
Полученное значение SyncState теперь можно использовать при последующих запусках скрипта для получения событий, появившихся или изменившихся после предыдущей загрузки.
Повторный сбор событий с использованием SyncState
На этом этапе скрипт необходимо изменить скрипт так, чтобы при каждом запуске возвращались только новые и измененные события:
- Замените триггер Ручной запуск на Планировщик и настройте расписание.
- Блок Получить календари оставьте без изменений.
- Добавьте блок Фильтр и задайте условие отбора календаря. По умолчанию в Exchange может существовать несколько календарей с одинаковым идентификатором
unique_idи разными именами. Фильтр позволяет выбрать нужный календарь и избежать дублирования данных. - Протестируйте блок.
- Добавьте блок Выбрать строки через SQL-запрос, укажите запрос для получения сохраненного значения SyncState и идентификатора календаря и протестируйте блок.
- В блоке Получить события календаря укажите идентификатор календаря и адрес электронной почты с помощью маппинга из предыдущего блока.
- Выберите тип сбора С последней выгрузки, подставьте значение SyncState с помощью маппинга в соответствующее поле и протестируйте блок.
- Сохраните полученные данные в отдельную таблицу с помощью блока Добавить строки.
- С помощью блока Обновить данные обновите значение SyncState в таблице, где он хранится. Это позволит получить последние актуальные данные при последующей синхронизации.
- В параметрах блока в качестве колонки-ключа укажите
sync_stateи в колонку для обновления подставьтеunique_id. - Протестируйте скрипт целиком и опубликуйте его.
Визуализация данных из календарей MS Exchange для дальнейшего анализа
Полученные данные можно отобразить в дашборде. Для этого:
- Откройте дашборд в режиме редактирования и добавьте виджет Столбиковая диаграмма.
- В поле Разрез 1 выберите колонку
startиз таблицы с данными календарей. - В раскрывающемся списке выберите значение Месяц.
- В качестве меры выберите колонку
startи используйте формулуcount(start).
В результате будет построена диаграмма, отображающая количество встреч по месяцам. Данные в виджете будут обновляться автоматически в соответствии с настроенным расписанием запуска скрипта.
Была ли статья полезна?