使用EWS获取多名员工的日历任务

时间:2014-03-06 07:47:23

标签: c# exchangewebservices ews-managed-api

我需要存储来自多个交换日历的约会数据。现在我有一个解决方案,通过使用以下内容的员工循环:

ExpandGroupResults myGroupMembers = service.ExpandGroup("AllUsers@....onmicrosoft.com");
foreach (EmailAddress address in myGroupMembers.Members){
   service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, address.Address);
    DateTime startDate = DateTime.
    DateTime endDate = startDate.AddDays(7);
   CalendarFolder calendar = CalendarFolder.Bind(service, WellKnownFolderName.Calendar, new PropertySet());
    CalendarView cView = new CalendarView(startDate, endDate);
                cView.PropertySet = new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);
                FindItemsResults<Appointment> appointments = calendar.FindAppointments(cView);

                foreach (Appointment a in appointments) {
                        file.Write(address.Address + ";");
                        file.Write(a.Subject.ToString() + ";");
                        file.Write(a.Start.ToString() + ";");
                        file.Write(a.End.ToString() + ";");
                        file.WriteLine();
                }

}

对每位员工使用service.ImpersonatedUserId非常慢,有人做过类似的事吗?

更新 我将从myGroupMembers中获取大约100名员工的数据。如果这是要走的路,我将继续使用它,因为我找不到另一种解决方案。

1 个答案:

答案 0 :(得分:1)

优化的一个选项是删除不必要的CalendarFolder.Bind行。这将减少每个地址一次呼叫。此外,它将返回您未使用的完整文件夹属性集,以便丢弃通过网络发送的数据。

然后使用ExchangeService.FindItems方法替换calendar.FindAppointments行。让FindItems调用目标日历文件夹,并为其提供CalendarView。

这应该会将通话次数减少50%。