2010-08-21 83 views
15

我正在使用CalendarItemType视图来检索日历项目。我关心的唯一项目是我创建的项目,我知道它们都是每周重复项目。我可以获得每个单独的事件,并从其中任何一个重复发生的主要项目,但我想将搜索范围缩小到仅符合我的模式的项目。如何使用Exchange Web服务检索重复事件主机?

我已经尝试在FindItemType上使用Restriction属性来为calenderRecurrenceId指定一个空常量的NotEqualTo限制。这导致我的请求超时。到目前为止,我一直无法使用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服务。

+0

当我学习EWS时,我使用EWSEditor的代码作为参考。 – Avilo 2011-03-16 21:36:17

回答

4

也许我误解了你,在这种情况下,我表示歉意。

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

您使用CalendarView将重复次数展开为单个项目。然而,与CalendarView的妥协是除开始和结束日期外允许的任何限制。没有。

+0

小心添加代码示例或包含参考?我能够正常工作,但只能通过过滤响应。我使用别人的代码作为出发点,这就是为什么我开始使用CalendarItemView(这听起来合理,因为我正在寻找日历项目),但我想尝试按照自己的方式进行操作。 – tvanfosson 2011-04-25 12:03:28

+1

我想,但我们的代码坦率地说是一团糟。我们从一开始就用一个线程干扰了50个项目(还有一些复杂/避免了我不喜欢的竞争条件)。它执行FindItem(idOnly),然后执行getItems。然后我们发现的确如此,在正常的IndexedPageView中,我们只获得了主项目。请允许我推荐THE HOLY GRAIL - 它有点过时(2007年的web服务),但它全面,清晰,并有很多例子...... – MJB 2011-04-25 16:48:00

+0

这是一本名为Inside Microsoft Exchange Server 2007 Web Services的书。它讨论了很多怪异的EWS角落案例。每个开发团队都应该有一个副本。 InsideMicrosoft®Exchange Server 2007 Web Services 作者:David Sterling;本·西班牙; Michael Mainer;马克泰勒; Huw Upshall ---------------------------------------------- ---------------------------------- 出版商:Microsoft Press Pub日期:2007年11月28日 打印ISBN-10:0-7356-2392-9 打印ISBN-13:978-0-7356-2392-7 – MJB 2011-04-25 16:50:27

-1

您可以创建自定义的searchfilters。如果从具体的开始日期或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); 
+0

IsRecurring对于主办方拥有的主人将是虚假的。请参阅http://msdn.microsoft.com/en-us/library/office/bb204271(v=exchg.150).aspx – Antony 2014-02-07 22:05:04

0

只找到你需要财产RecurrenceStart财产。由于EWS有限制,因此不可能在限制中使用所有属性。这一个按预期工作。

参考:Find master recurring appointments

0

可以使用复发PidLid与ExtendedPropertyDefinition搜索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工作时。

相关问题