GetExchangeUser () возвращает ноль, когда Outlook 2016 использует режим кэширования Exchange - PullRequest
0 голосов
/ 05 апреля 2019

Разработка для : Outlook 2016 Надстройка : VSTO (C #)

Моя компания работает на O365 (Exchange), и я разрабатываю надстройку, которая собирает информацию об их пользователях и обменивается ими. Однако, похоже, что когда в настройках учетной записи Outlook настроен режим кэширования Exchange, функция GetExchangeUser () возвращает ноль.

Если я отключаю клиенты в режиме кэширования Exchange, все работает нормально. Однако моя компания хочет оставить эту функцию включенной.

По моему грубому пониманию, GetExchangeUser () работает только при подключении к серверу Exchange. Я подозреваю, что режим кэширования приводит к тому, что это происходит не всегда, и поэтому метод не работает. Так что мне интересно ..

  • Как заставить (временно) Outlook подключиться к Exchange, чтобы GetExchangeUser () работал?
  • Существуют ли альтернативные способы сбора информации о пользователях Exchange?

    // Create a singleton of the Application instance.
    Outlook.Application app = new Outlook.Application();
    
    // Get the current user object.
    Outlook.ExchangeUser currentUser = app.Session.CurrentUser.AddressEntry.GetExchangeUser();
    
    // ***** currentUser == null when "Use Cached Exchange Mode" is enabled.
    // ***** currentUser == Outlook.ExchangeUser object when "Use Cached Exchange Mode" is disabled.
    
    // Set the form details.
    textBoxName.Text = currentUser.Name;
    textBoxEmployeeID.Text = currentUser.Alias;
    

Я попробовал несколько предложений, которые нашел в Интернете, но ни одно из них не сработало. Такие как ..

  • Принудительное обновление автономной адресной книги (не работает).
  • Удалите старую автономную адресную книгу, затем принудительно обновите (не работает).

1 Ответ

1 голос
/ 06 апреля 2019

Имейте в виду, что объект ExchageUser (возвращенный из AddressEntry.GetExchageUser()) не предоставляет ничего, что вы не можете получить от AddressEntry.PropertyAccessort.GetProperty().

Убедитесь, что данные действительно есть - вы можете сделать это с помощью OutlookSpy : нажмите кнопку Пространство имен на ленте OutlookSpy. Разверните свойство CurrentUser, раскройте AddressEntry, выберите свойство MAPIOBJECT, нажмите «Обзор». В окне IMailUser вы видите все нужные вам свойства MAPI? Если вы выберете свойство, OutlookSpy покажет его имя DASL. Вы можете использовать это имя свойства DASL при вызове AddressEntry.PropertyAccessort.GetProperty().

...