2010-08-21 85 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工作時。

相關問題