代码之家  ›  专栏  ›  技术社区  ›  dankyy1

使用上次修改的时间搜索EWS日历项

  •  3
  • dankyy1  · 技术社区  · 14 年前

    我在找 CalendarItems 使用Exchange Web服务。在有关msdn的文档中,有一个名为 LastModifiedTime .

    如何查询 日历项 通过 上次修改时间 使用Exchange服务器绑定?

    1 回复  |  直到 14 年前
        1
  •  3
  •   dankyy1    14 年前

    我发现了一种使用限制的方法

    (但是通过搜索 如果findItemRequest对象的 查找项请求项 已定义FinditemRequest.Restrictions属性 它给出组合错误…)

    如果只为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;