我需要存储来自多个交换日历的约会数据。现在我有一个解决方案,通过使用以下内容的员工循环:
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名员工的数据。如果这是要走的路,我将继续使用它,因为我找不到另一种解决方案。
答案 0 :(得分:1)
优化的一个选项是删除不必要的CalendarFolder.Bind行。这将减少每个地址一次呼叫。此外,它将返回您未使用的完整文件夹属性集,以便丢弃通过网络发送的数据。
然后使用ExchangeService.FindItems方法替换calendar.FindAppointments行。让FindItems调用目标日历文件夹,并为其提供CalendarView。
这应该会将通话次数减少50%。