Календари Outlook отправлять и получать - PullRequest
0 голосов
/ 26 февраля 2020

Можно ли программно синхронизировать локальные общие календари Outlook с их версиями Exchange?

Я пробовал Namespace.SendAndReceive (), но, похоже, это не влияет на календари ...

Я что-то пропустил или это просто невозможно?

Я хотел бы выполнить «отправку» из локальной папки общего календаря в папку его сервера.

(я знаю, что можно работать непосредственно с версией сервера, сняв флажок «Загрузить общий календарь», как показано здесь , но я не могу сделать это так)

РЕДАКТИРОВАТЬ: Почему я пытаюсь заставить syn c?

В моей надстройке пользователи создают новые встречи в общем календаре, а затем запускают функцию, которая делает HTTP-запрос к сценарию, работающему с EWS, чтобы получить этот календарь обмена. Но поскольку новые встречи не отправляются, сценарий, взаимодействующий с EWS, не получает новые встречи.

Я обнаружил, что кнопка "Обновить папку" в Send / Receive отправляет папку на сервер Exchange, но смотрит на объект папка Я не нахожу, как это сделать программно ...

enter image description here

1 Ответ

0 голосов
/ 10 марта 2020

Наконец-то я нашел способ синхронизировать локально совместно используемые календари приложения Outlook с версией сервера Exchange (на самом деле он выполняет «отправку»).

Код VB. NET, приведенный ниже, поздравительно открывает каждый общий календарь и затем смоделируйте щелчок по кнопке «обновить календарь».


        Dim app As New Outlook.Application
        Dim ns As Outlook.NameSpace
        Dim objExpl As Outlook.Explorer
        Dim recip As Outlook.Recipient
        Dim olPane As Outlook.NavigationPane
        Dim olModule As Outlook.NavigationModule
        Dim olGroup As Outlook.NavigationGroup
        Dim navFoldersCount As Integer

        ns = app.GetNamespace("MAPI")
        objExpl = app.ActiveExplorer

        For k = 1 To ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Folders.Count
            Try
                'Try catch allows to exclude non-shared calendars to work only with share ones
                recip = ns.CreateRecipient(ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Folders.Item(k).Name)
                recip.Resolve()
                If recip.Resolved Then
                    objExpl.CurrentFolder = ns.GetSharedDefaultFolder(recip, Outlook.OlDefaultFolders.olFolderCalendar)
                    'accessing to the shared calendars creates their "Calendar - xxx@xxx.xxx" clone.
                    If Not objExpl Is Nothing Then
                        'Simulate the click on "UpdateFolder button
                        objExpl.CommandBars.ExecuteMso("UpdateFolder")
                    End If
                End If
            Catch

            End Try
        Next

        olPane = ns.Application.ActiveExplorer.NavigationPane
        olModule = olPane.Modules.GetNavigationModule(Outlook.OlNavigationModuleType.olModuleCalendar)
        olGroup = olModule.NavigationGroups.GetDefaultNavigationGroup(Outlook.OlGroupType.olPeopleFoldersGroup)

        'Removing calendar clones from the navigation pane
        navFoldersCount = olGroup.NavigationFolders.Count
        For i = navFoldersCount To 1 Step -1
            If (olGroup.NavigationFolders.Item(i).DisplayName.Contains("Calendar - ")) Then
                olGroup.NavigationFolders.Remove(olGroup.NavigationFolders.Item(i))
            End If
        Next

...