16

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

我正在尝试使用 FindItemType 上的 Restriction 属性来指定 NotEqualTo 限制,其中 calenderRecurrenceId 的常量为空。这导致我的请求超时。到目前为止,我根本无法使用 FindItemType 加载重复,并且当我发现在重复系列中发生的事件时需要使用后续的 GetItemType 调用。

这是我开始的代码。该代码需要与 Exchange 2007 和 Exchange 2010 一起使用。

    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 服务。

4

4 回答 4

4

也许我误解了你,在这种情况下,我向你道歉。

您不使用 CalendarView - 如果您想要的只是 Master Recurring Calendar 项目,则使用普通的 IndexedPageItemView。

您可以使用 CalendarView 将重复周期扩展到单个项目。然而,与 CalendarView 的妥协是除了开始和结束日期之外不允许任何限制。没有任何。

于 2011-04-24T20:56:34.697 回答
1

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

https://msdn.microsoft.com/en-us/library/cc842017.aspx

// https://msdn.microsoft.com/en-us/library/cc842017.aspx
ExtendedPropertyDefinition apptType = new ExtendedPropertyDefinition(
    DefaultExtendedPropertySet.Appointment,
    0x00008216, //PidLidAppointmentRecur
    MapiPropertyType.Binary);

var restriction = new SearchFilter.Exists(apptType);
var iView = new ItemView(10);
var found = folder.FindItems(restriction, iView);

今天,当我重新访问一些在云中与 Office365 EWS 一起工作的旧代码时,我刚刚确认了这一点。

于 2016-11-11T20:31:29.723 回答
0

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

参考:查找主定期约会

于 2013-10-11T03:19:18.413 回答
-1

您可以创建自定义搜索过滤器。如果您从特定的 startdate 或 isRecurring 属性进行搜索,您有最简单的方法......(SearchItems 返回经常性的主人)

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);
于 2012-09-18T09:47:06.697 回答