Outlook получает информацию о FreeBusy медленно - PullRequest
0 голосов
/ 10 февраля 2019

Мой код является надстройкой MS Outlook и используется для создания календаря отсутствия для более чем 60 человек команды.Компания использует MS Exchange.

Я получаю их статус занятости / занятости с помощью этого кода:

var namespace = ThisAddIn.thisOutlookApp?.GetNamespace( "MAPI" );
var recp = namespace.CreateRecipient( personName );
var freeBusy = recp.FreeBusy( startDate, MinPerChar: 60, CompleteFormat: true );

Хотя этот файл работает, один вызов FreeBusy() занимает около 300 миллисекунд.Для 60 человек и промежутка времени в три месяца это означает, что мой код занимает почти минуту.

Я также попробовал эту альтернативу:

recp.Resolve();
var exu = recp.AddressEntry.GetExchangeUser();
var freeBusy = exu.GetFReeBusy(...)

, но без разницы.Тот же код в VBA показывает ту же производительность.

Это трюк, чтобы ускорить этот вызов, или есть альтернативный способ получения информации о занятости, например, путем доступа к календарю других людей или путем разговора ссам сервер MS Exchange?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Использование GetUserAvailability Операция EWS - позволяет запрашивать информацию f / b для нескольких пользователей за один вызов.

0 голосов
/ 10 февраля 2019

Я сам нашел хорошее решение: я не использовал API взаимодействия с Outlook, но обращался к самому серверу Exchange с помощью управляемого API EWS.

Существует превосходный набор 101 примеров проектов..(Это на самом деле 101 образец!) И очень хорошее пошаговое руководство для начала работы с EWS Managed API.

«Exchange 2013 Получить настройку статуса пользователя программно» былоПример, который я использовал.

Однако мне очень хотелось бы услышать об альтернативных решениях от пользователей SO.

...