3

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

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

4

2 回答 2

5

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

搜索日历约会的注意事项

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

于 2012-06-14T16:15:01.840 回答
0

对于任何使用 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;
        }
    }
于 2016-06-02T12:04:23.160 回答