2014-03-06 2 views
0

여러 개의 교환 일정에서 약속 데이터를 저장해야합니다.EWS를 사용하여 여러 직원의 캘린더 작업 가져 오기

ExpandGroupResults myGroupMembers = service.ExpandGroup("[email protected]"); 
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

지금까지의 내용이 정확합니다. // 캘린더에서 물건을 내 보내시겠습니까? 이 모든 사용자가 동일한 서버에 있습니까? –

+0

@ MichaelMainer-Microsoft 예, 그들은 동일한 서버에 있습니다. 추가 수출 물건 코드로 질문을 업데이트하겠습니다. – mickeger

답변

1

최적화 할 수있는 옵션 중 하나는 불필요한 CalendarFolder.Bind 행을 제거하는 것입니다. 그러면 주소 당 하나의 통화가 줄어 듭니다. 또한 사용하지 않는 전체 폴더 속성 집합을 반환하므로 전선을 통해 데이터를 전송하지 않습니다.

그런 다음 calendar.FindAppointments 행을 ExchangeService.FindItems 메서드로 바꿉니다. FindItems 호출이 달력 폴더를 대상으로하고 CalendarView를 지정합니다.

이렇게하면 통화 수가 50 % 감소합니다.

관련 문제