【问题标题】: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;
}
}