【问题标题】:Exchange Web Services Managed API: How can I perform Recurrence Expansion through the FindItem Method?Exchange Web 服务托管 API:如何通过 FindItem 方法执行重复扩展?
【发布时间】: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 从交换中获取扩展约会列表?

【问题讨论】:

    标签: c# exchangewebservices exchange-server-2010 ews-managed-api appointment


    【解决方案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 类来查询当月的所有约会,然后根据组织者在客户端过滤约会。以下示例展示了如何使用日历视图在日历中搜索约会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-06
        • 2020-09-19
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多