【问题标题】:Outlook calendars send and receiveOutlook 日历发送和接收
【发布时间】:2020-03-10 06:30:23
【问题描述】:

有没有办法以编程方式将 Outlook 本地共享日历与其 Exchange 版本同步?

我试过 Namespace.SendAndReceive() 但它似乎不影响日历...

有什么我想念的还是不可能的?

我想从我的本地共享日历文件夹“发送”到他的服务器文件夹。

(我知道可以通过取消选中“下载共享日历”直接在服务器版本上工作,如 here 所示,但我不能这样做)

编辑: 为什么要尝试强制同步?

在我的加载项中,用户在共享日历中创建新约会,然后启动一个函数,该函数向使用 EWS 的脚本发出 HTTP 请求以获取此交换日历。但由于未发送新约会,与 EWS 通信的脚本不会获得新约会。

我发现发送/接收中的“更新文件夹”按钮将文件夹发送到交换服务器,但查看 folder 对象我不知道如何以编程方式进行操作...

【问题讨论】:

  • 是什么让您认为它不起作用?请记住,同步是异步的。您是否有通过强制同步无法解决的特定问题?
  • 因为我的日历同步没有改变。当然,我进行了编辑,以便您可以更好地理解。
  • 你是说项目是本地创建的,但不同步?或者您是说您正在创建与与会者的约会并希望它自动发送给与会者?
  • 是的,如果我的解释不清楚,对不起!它们不与交换服务器同步。因此,当我使用 EWS 获取共享 forder 的约会时,我没有得到它们。这就是我尝试强制同步的原因。
  • 我再次编辑,我找到了一个手动完成的按钮,我只需要找到如何以编程方式完成它。

标签: c# vb.net outlook vsto


【解决方案1】:

我终于找到了一种将 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

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多