2013-07-11 3 views
2

Excinge를 쿼리하여 현재 시간으로 미리 알림을 설정 한 앱 약속을 가져 오려고합니다.
나는 가까운 미래에 시작 하나의 약속을 반환하는 간단한 방법 만들었습니다EWS가 알림 <= 현재 시간으로 약속 가져 오기

:이 날 최고 한 약속을 반환

public Appointment getMyAppointments() 
    { 
     try 
     { 
      CalendarFolder cfolder = CalendarFolder.Bind(service, WellKnownFolderName.Calendar); 
      CalendarView calendarView = new CalendarView(DateTime.Now, DateTime.Now.AddHours(1));every appointment in one hour 
      calendarView.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Subject, ItemSchema.Categories); 
      FindItemsResults<Appointment> findResults = cfolder.FindAppointments(calendarView); 

      List<Item> items = new List<Item>(); 

      if (findResults.Items.Count > 0) // Prevent the exception 
      { 
       items.AddRange(findResults.Cast<Item>()); 
      } 
      else 
      { 
       return null; 
      } 
      service.LoadPropertiesForItems(items, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Subject, ItemSchema.Categories, ItemSchema.Body)); 
      return findResults.Items[0]; 
     } 
     catch (Exception e) 
     { 
      return null; 
     } 
    } 

현재 시간에서 활동한다는 점에서 가까운 미래를 시작합니다 광고 14시 시작하여 14시 30 분에 끝나는 약속을 계획하면 13시 1 분에 시작하면 약속이 반환되지만 14시 22 분에 시작하면 약속이 반환됩니다.

나는 그것이 현재 시간 전에 알림을 설정하고 시작하지 않은 모든 회의 반환 있도록 그 방법을 변경하려면 :

을 그래서 15시에 약속을 계획하는 경우에 15 분에 알림을 설정하고 나는 나의 방법을 14시 45 분에 호출한다. 약속을 잡을 것이다.

내 생각은 모든 약속을 얻는 것이 8 시간이라고 말하고, 그 다음에 반복하여 IsReminderSet이 있는지 확인하고 Start - ReminderMinutesBeforeStart이 현재 시간보다 작은 지 확인합니다.

편집 -이 내 임시 방편

public OWAAppointment GetMyAppointments(int minutes) 
    { 
     try 
     { 
      CalendarFolder cfolder = CalendarFolder.Bind(service, WellKnownFolderName.Calendar); 
      CalendarView calendarView = new CalendarView(DateTime.Now, DateTime.Now.AddHours(10)); 
      calendarView.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Subject, ItemSchema.Categories); 
      FindItemsResults<Appointment> findResults = cfolder.FindAppointments(calendarView); 

      List<Item> items = new List<Item>(); 

      if (findResults.Items.Count > 0) 
      { 
       items.AddRange(findResults.Cast<Item>()); 
      } 
      else 
      { 
       return null; 
      } 

      service.LoadPropertiesForItems(items, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Subject, ItemSchema.Categories, ItemSchema.Body, ItemSchema.ReminderDueBy, ItemSchema.ReminderMinutesBeforeStart)); 


      var appointment = findResults.Items 
      .Where(item => item.Start >= DateTime.Now) 
      .FirstOrDefault(item => item.Start.AddMinutes(-1*minutes) < DateTime.Now); 

      return appointment // this will return appointment or null 
     } 
     catch (Exception e) 
     { 
      return null; 
     } 
    } 

입니다하지만 어쩌면이 쉽게 EWS 수행 할 수 있습니다?

답변

1

예,이 작업을보다 쉽게 ​​수행 할 수 있습니다. EWS에 대한 GetReminders 작업 (EWS 관리 API 아님)은 Exchange 2013에 도입되었습니다. 정보는 GetReminders operation에서 찾을 수 있습니다. 현재의 모든 미리 알림을 검색하려면 ReminderType을 All로 설정하고 EndTime을 현재 시간으로 설정하십시오.

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
      xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <t:RequestServerVersion Version="Exchange2013" /> 
    </soap:Header> 
    <soap:Body> 
    <m:GetReminders> 
     <m:EndTime>2014-05-06T21:00:00Z</m:EndTime> 
     <m:ReminderType>All</m:ReminderType> 
    </m:GetReminders> 
    </soap:Body> 
</soap:Envelope> 
+0

답장을 보내 주셔서 감사합니다.하지만 유감스럽게도 Exchange 2013에서는 테스트 할 수 없습니다. 테스트 환경을 갖자 마자이 페이지로 돌아 오겠습니다. – Misiu