Exchange Web 服务托管 API:如何通过 FindItem 方法执行重复扩展?

Posted

技术标签:

【中文标题】Exchange Web 服务托管 API:如何通过 FindItem 方法执行重复扩展?【英文标题】:Exchange Web Services Managed API: How can I perform Recurrence Expansion through the FindItem Method? 【发布时间】:2012-06-17 16:58:48 【问题描述】:

我们目前正在使用 Exchange Web Services Managed API 在我们的产品和 Exchange 之间创建同步服务。具体来说,我们希望(按时间安排)在用户日历上来回同步特定的约会。作为同步的一部分,我们不一定要同步所有约会,而是建立了一些复杂的 SearchFilters 来只返回我们想要的约会。我们的问题是,为了使用 SearchFilters,我们需要使用 ExchangeService.FindItems 方法,但是这个方法只返回重复事件的 Master Recurrence。我们的另一个选择是使用 ExchangeService.FindAppointment,这将为我们执行 Recurrence Expansion,但有一个新问题是我们只能使用开始和结束日期来限制结果约会。查看 ExchangeService.FindAppointment 是如何实现的,我们可以看到它是使用 FindItems 方法实现的,这让我相信我应该能够告诉 ExchangeService.FindItems 方法进行循环扩展。

如何使用复杂的 SearchFilter 从交换中获取扩展约会列表?

【问题讨论】:

【参考方案1】:

对于任何使用 FindAppointments/CalendarView 发现 guxiyou 的解决方案不切实际的人,我的解决方案如下。在自动同步的情况下,CalendarView 尤其不方便,您最好使用“最后修改”过滤器,而不是检索所有内容并过滤客户端,这不是很有效。

我使用了支持过滤器的常规 FindItems 方式,并在迭代约会时检查了 AppointmentType,如果是 RecurrenceMaster 类型,它将找到链接的事件并将它们添加到要同步的列表中。

下面的方法是随后获取这些约会的出现。没有结束日期的循环模式将被忽略,因为它们会使您的循环无限。除非您限制同步窗口,否则必须对这些重复进行不同的处理才能进行同步。

    private IEnumerable<Appointment> GetRecurrentAppointments(Appointment masterAppointment)
    
        Recurrence recurrence = masterAppointment.Recurrence;

        if (recurrence == null || !recurrence.HasEnd)
            yield break;

        for (int i = 1; i <= recurrence.NumberOfOccurrences; i++)
        
            Appointment occurrence = Appointment.BindToOccurrence(ExchangeServiceProxy, masterAppointment.Id, i);

            yield return occurrence;
        
    

【讨论】:

【参考方案2】:

刚刚在 MSDN 上找到了这个: http://msdn.microsoft.com/en-us/library/hh148195(v=exchg.140).aspx

搜索日历约会的注意事项

日历约会是搜索的一种特殊情况。某些日历约会(例如定期约会)可能有例外和已删除的事件。为确保 Exchange 服务器在搜索日历文件夹时扩展定期约会,您需要使用日历分页。但是,当您使用日历分页时,您不能使用任何其他搜索限制。这意味着,例如,如果您想要显示特定组织者本月的所有日历约会,则无法创建基于该组织者的搜索过滤器。相反,您可以使用 CalendarView 类来查询当月的所有约会,然后根据组织者在客户端过滤约会。以下示例展示了如何使用日历视图在日历中搜索约会。

【讨论】:

以上是关于Exchange Web 服务托管 API:如何通过 FindItem 方法执行重复扩展?的主要内容,如果未能解决你的问题,请参考以下文章

如何缩小此 ASP.NET ASMX 到 Exchange 2010 托管 API 设置中的故障点?

用于不知名文件夹名称的 Exchange Web 服务 FolderId

o365 和 Exchange 2010 的 EWS 托管 API 的 OAuth 身份验证

如何使用 EWS 托管 API 从 Microsoft Exchange 检索所有联系人?

当我的应用程序托管在 IIS 上时,Microsoft Exchange Web 服务 (EWS) 无法正常工作

[Exchange]使用EWS托管API2.0同步邮箱