Exchange server 如何使用Exchange Web服务检索定期事件主控程序?

Exchange server 如何使用Exchange Web服务检索定期事件主控程序?,exchange-server,exchangewebservices,Exchange Server,Exchangewebservices,我正在使用CalendarItemType视图检索日历项。我唯一关心的项目是我创建的项目,我知道它们都是每周重复的项目。我能够获得每个单独的事件,并从其中任何一个事件中获得重复出现的主项,但我想将搜索范围缩小到那些与我的模式匹配的项目 我正在尝试使用FindItemType上的Restriction属性为calenderRecurrenceId指定一个带有null常量的NotEqualTo限制。这导致我的请求超时。到目前为止,我根本无法使用FindItemType加载recurrences,当我

我正在使用CalendarItemType视图检索日历项。我唯一关心的项目是我创建的项目,我知道它们都是每周重复的项目。我能够获得每个单独的事件,并从其中任何一个事件中获得重复出现的主项,但我想将搜索范围缩小到那些与我的模式匹配的项目

我正在尝试使用FindItemType上的Restriction属性为calenderRecurrenceId指定一个带有null常量的NotEqualTo限制。这导致我的请求超时。到目前为止,我根本无法使用FindItemType加载recurrences,当我发现一个事件是周期性序列中的事件时,需要使用后续的GetItemType调用

这是我开始的代码。该代码需要与Exchange2007和Exchange2010一起使用

    var findItemRequest = new FindItemType();

    findItemRequest.ParentFolderIds = new DistinguishedFolderIdType[]
    {
        new DistinguishedFolderIdType()
    };

    ((DistinguishedFolderIdType)findItemequest.ParentFolderIds[0]).Id = DistinguishedFolderIdNameType.calendar;
    findItemRequest.Traversal = ItemQueryTraversalType.Shallow;

    var itemShapeDefinition = new ItemResponseShapeType(
    {
        BaseShape = DefaultShapeNamesType.AllProperties;
    }

    findItemRequest.Item = calenderView;
    findItemRequest.ItemShape = itemShapeDefinition;

    var findItemResponse = this.esb.FindItem( findItemRequest );

此外,如果您知道任何好的示例来源(除了MSDN中的示例),我将非常欢迎。我在紧急情况下获取了其他人的代码,正在尝试动态学习Exchange Web服务。

也许我误解了您的意思,在这种情况下,我向您道歉

您不使用CalendarView-如果只需要主循环日历项,则使用普通IndexedPageItemView


您可以使用CalendarView将重复项扩展到各个项目。但是,与CalendarView的折衷是,除了开始和结束日期之外,不允许有任何限制。无。

您可以创建自定义搜索筛选器。如果您从特定的startdate或isRecurring属性进行搜索,您有最简单的方法…(SearchItems返回重复出现的主控项)

List searchFilterCollection=newlist();
SearchFilter.IsGreaterThanOrEqualTo startDatumFilter=newsearchfilter.IsGreaterThanOrEqualTo(appointschema.Start,new DateTime(2012,9,16));
SearchFilter.IsEqualTo masterRecurringFilter=new SearchFilter.IsEqualTo(appointschema.IsRecurring,true);
searchFilterCollection.Add(startDatumFilter);
searchFilterCollection.Add(主循环过滤器);
SearchFilter finalFilter=新建SearchFilter.SearchFilterCollection(LogicalOperator.Or,SearchFilterCollection);
ItemView ItemView=新的ItemView(100000);
itemView.PropertySet=新的PropertySet(BasePropertySet.FirstClassProperties,AppointSchema.AppointmentType);
FindItemsResults项目=_service.FindItems(WellKnownFolderName.Calendar、finalFilter、itemView);

找到的唯一需要的属性是RecurrenceStart属性。因为EWS有限制,所以不可能使用限制中的所有属性。这一个按预期工作


参考:

您可以使用带有ExtendedPropertyDefinition的RecurrencePidlid来搜索RecurrenceMaster。这是因为,根据他们的文档,“单实例日历项上不能存在此属性。”

//https://msdn.microsoft.com/en-us/library/cc842017.aspx
ExtendedPropertyDefinition apptType=新的ExtendedPropertyDefinition(
DefaultExtendedPropertySet.约会,
0x00008216,//pidlidAppointmentRecurr
MapPropertyType.Binary);
var restriction=newsearchfilter.Exists(apptType);
var iView=新项目视图(10);
var found=folder.FindItems(限制,iView);

我刚刚确认了这一点,今天,当我重温一些在云中使用Office365 EWS的旧代码时。

当我学习EWS时,我使用了EWS编辑器的代码作为参考。是否添加代码示例或包含参考?我能够让事情顺利进行,但只是通过过滤回复。我使用了其他人的代码作为起点,这就是为什么我开始使用CalendarItemView(这听起来很合理,因为我正在寻找日历项目),但我想尝试按照您的方式来做。我很想这样做,但坦率地说,我们的代码有点混乱。我们从一次50个项目的线程阻塞开始(以及一些我不喜欢的复杂/避免种族条件的东西)。执行FindItem(idOnly)并后跟getItems的。然后我们发现,在正常的IndexedPageView中,我们只得到主项。请允许我推荐圣杯-它有点过时(2007 web services),但它全面、清晰,有很多例子……这是一本由Microsoft Press出版的名为Inside Microsoft Exchange Server 2007 web services的书。它还讨论了EWS的许多奇怪的角落案例。每个开发团队都应该有一份副本。内部Microsoft®Exchange Server 2007 Web服务,由David Sterling编写;本西班牙;迈克尔·梅纳;马克·泰勒;Huw Upshall--------------------------------------------------------------------发布者:微软出版社发布日期:2007年11月28日打印ISBN-10:0-7356-2392-9打印ISBN-13:978-0-7356-2392-7对于主办方拥有的母版,担保为假。看见
List<SearchFilter> searchFilterCollection = new List<SearchFilter>();

        SearchFilter.IsGreaterThanOrEqualTo startDatumFilter = new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, new DateTime(2012, 9, 16));
        SearchFilter.IsEqualTo masterRecurringFilter = new SearchFilter.IsEqualTo(AppointmentSchema.IsRecurring, true);

        searchFilterCollection.Add(startDatumFilter);
        searchFilterCollection.Add(masterRecurringFilter);

        SearchFilter finalFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection);

        ItemView itemView = new ItemView(100000);
        itemView.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.AppointmentType);

        FindItemsResults<Item> items = _service.FindItems(WellKnownFolderName.Calendar, finalFilter, itemView);