2010-02-19 2 views
3

나는 Exchange 웹 서비스를 통해 CalendarItems을 (를) 찾고 있습니다. MSDN의 설명서에는 LastModifiedTime이라는 필드가 있습니다.Search EWS CalendarItems으로 최종 수정 시간

Exchange 서버 바인딩을 사용하여 CalendarItemsLastModifiedTime (으)로 질문하는 방법은 무엇입니까?

답변

2

내가 사용 restictions

와 방법을 발견 (그러나 findItemRequest 객체의 findItemRequest.Item findItemRequest.Restictions 속성이 정의되어있는 경우 를 검색하여 이 조합 오류 ... 제공)

경우에만를 Item 또는 Restictions가 정의 된 findItemRequest 객체에 대해 정의 됨

 List<CalendarInfo> calendarEvents = new List<CalendarInfo>(); 

     ExchangeServiceBinding esb = EWS.Helper.ExchangeHelper.GetExchangeBinding(credentials); 

     // Form the FindItem request. 
     FindItemType findItemRequest = new FindItemType(); 


     CalendarViewType calendarView = new CalendarViewType(); 
     calendarView.StartDate = criteria.StartDateAndTime; 
     calendarView.EndDate = criteria.EndDateAndTime; 

     if (criteria.MaxItemsToReturn > 0) 
     { 
      calendarView.MaxEntriesReturned = criteria.MaxItemsToReturn; 
      calendarView.MaxEntriesReturnedSpecified = true; 
     } 

     findItemRequest.Item = calendarView; 

     //-- 
     PathToExtendedFieldType sySyncProp = new PathToExtendedFieldType(); 



     sySyncProp.PropertyTag = "0x3008"; 
     sySyncProp.PropertyType = MapiPropertyTypeType.SystemTime; 
     // Define restrictions 

     RestrictionType ffRestriction = new RestrictionType(); 
     IsGreaterThanOrEqualToType ieGreater = new IsGreaterThanOrEqualToType(); 

     ieGreater.FieldURIOrConstant = new FieldURIOrConstantType(); 
     ieGreater.FieldURIOrConstant.Item = new ConstantValueType(); 
     (ieGreater.FieldURIOrConstant.Item as ConstantValueType).Value = DateTime.Now.AddDays(-1).ToUniversalTime().ToString("u"); 
     ieGreater.Item = sySyncProp; 

     ffRestriction.Item = ieGreater; 

     findItemRequest.Restriction = ffRestriction; 

     //-- 
     // Define which item properties are returned in the response. 
     ItemResponseShapeType itemProperties = new ItemResponseShapeType(); 

     // Use the Default shape for the response. 
     itemProperties.BaseShape = DefaultShapeNamesType.AllProperties; 
     //insert last modified time value also to responses 
     PathToExtendedFieldType[] ptufta = new PathToExtendedFieldType[1]; 
     ptufta[0] = new PathToExtendedFieldType(); 
     ptufta[0].PropertyTag = "0x3008"; //Property Tag for LastModifiedTime 
     ptufta[0].PropertyType = MapiPropertyTypeType.SystemTime; 
     itemProperties.AdditionalProperties = ptufta; 

     findItemRequest.ItemShape = itemProperties; 

     DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1]; 
     folderIDArray[0] = new DistinguishedFolderIdType(); 
     folderIDArray[0].Id = DistinguishedFolderIdNameType.calendar; 

     if (!string.IsNullOrEmpty(criteria.EmailAddress)) 
     { 
      folderIDArray[0].Mailbox = new EmailAddressType(); 
      folderIDArray[0].Mailbox.EmailAddress = criteria.EmailAddress.Trim(); 
     } 

     findItemRequest.ParentFolderIds = folderIDArray; 

     // Define the traversal type. 
     findItemRequest.Traversal = ItemQueryTraversalType.Shallow; 

     try 
     { 
      // Send the FindItem request and get the response. 
      FindItemResponseType findItemResponse = esb.FindItem(findItemRequest); 

      // Access the response message. 
      ArrayOfResponseMessagesType responseMessages = findItemResponse.ResponseMessages; 
      ResponseMessageType[] rmta = responseMessages.Items; 

      int folderNumber = 0; 

      foreach (ResponseMessageType rmt in rmta) 
      { 
       // One FindItemResponseMessageType per folder searched. 
       FindItemResponseMessageType firmt = rmt as FindItemResponseMessageType; 

       if (firmt.RootFolder == null) 
        continue; 

       FindItemParentType fipt = firmt.RootFolder; 
       object obj = fipt.Item; 

       // FindItem contains an array of items. 
       if (obj is ArrayOfRealItemsType) 
       { 
        ArrayOfRealItemsType items = (obj as ArrayOfRealItemsType); 
        if (items.Items == null) 
        { 
         // Console.WriteLine("Folder {0}: No items in folder", folderNumber); 
         folderNumber++; 
        } 
        else 
        { 
         CalendarInfo ce; 
         CalendarItemType cal; 
         foreach (ItemType it in items.Items) 
         { 

          if (it is CalendarItemType) 
          { 
           cal = (CalendarItemType)it; 
           ce = GetCalendarInfo(esb, cal); 
           calendarEvents.Add(ce); 
          } 
          //Console.WriteLine("Folder {0}: Item identifier: {1}", folderNumber, it.ItemId.Id); 

         } 

         folderNumber++; 
        } 
       } 
      } 

      //Console.ReadLine(); 
     } 
     catch (Exception e) 
     { 
      throw; 
     } 


     return calendarEvents;