2010-06-17 38 views
2

我一直在閱讀這個MSDN文章「事件」列表顯示項目: http://msdn.microsoft.com/en-us/library/aa981241.aspxSharePoint內容查詢Web部件:從被設置爲發生或在一個月內再次發生

試圖編輯內容查詢Web部件只顯示事件列表中的事件,這些事件發生在30天內或30天內再次發生。處理不再發生的事件是直截了當的,因爲我可以通過修改此共享Web部件配置來比較[開始日期]到[今天] +30,但對於重新模擬事件,似乎[開始日期]和[結束日期]描述了再發生事件發生的時期,我不知道該怎麼做才能確定即將到來的事件再次發生。 cqwp只需要三個過濾項目,所以我不能處理重複發生的和單個發生的項目,而不會覆蓋查詢。

我想我需要使用reoccurrance領域是其中之一: MSDN微軟-COM/EN-US /庫/ microsoft.sharepoint.spfieldrecurrence_members.aspx 但他們都不似乎是適當的。

你如何應對 「本月的第四天」 reocurrance MSDN微軟-COM/EN-US /庫/ microsoft.sharepoint.weekofmonth.aspx

基本上,你怎麼重寫查詢過濾reocurring和單發事件只顯示一週內發生的事件?

我已經添加以下代碼到CQWP .webpart文件:

<Where> 
<Or> 
<And> 
    <Neq> 
    <FieldRef Name="FRecurrence"/> 
    <Value Type="Recurrance">1</Value> 
    </Neq> 
    <And> 
    <Lt> 
     <FieldRef Name="EventDate" Type="DateTime"/> 
     <Value Type="DateTime"><Today OffsetDays="30"/></Value> 
    </Lt> 
    <Gt> 
    <FieldRef Name="EventDate" Type="DateTime"/> 
    <Value Type="DateTime"><Today /></Value> 
    </Gt> 
    </And> 
</And> 
<DataRangesOverlap> 
    <FieldRef Name="EventDate" /> 
    <FieldRef Name="EndDate" /> 
    <FieldRef Name="RecirrenceId" /> 
    <Value Type="DateTime"><Month /></Value> 
</DataRangesOverlap> 
</Or> 
</Where> 

,但我的網頁將返回:「無法添加選定的Web部件(或多個)文件格式無效。嘗試導入Web部件文件(.WebPart)。「

回答

1

SharePoint重複事件是棘手。這篇文章是理解週期性事件

Understanding the SharePoint calendar and how to export it to iCal format

的,我不認爲你將能夠做到這一點的CEWP但你可以使用類似拿到復發混亂的最好資源

SPList list = oSPWeb.GetList(listGuid); 
    SPQuery query = new SPQuery(); 
    query.ExpandRecurrence = true; 
    query.CalendarDate = new DateTime(2010, 6, 17); 

    query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Week /></Value></DateRangesOverlap></Where>"; 
    SPListItemCollection listItems = list.GetItems(query); 
    foreach (SPListItem items in listItems) 
    { 
     // items["EventDate"].ToString() 
    } 

然後,您將獲得本週發生的經常性和非經常性事件。

但要注意,這是設計成由日曆視圖中使用,所以如果你這樣做,例如,

query.CalendarDate = new DateTime(2010, 6, 17); 
query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Month /></Value></DateRangesOverlap></Where>"; 

(注意月份設定),那麼你會得到應該出現在這個月的所有事件日曆視圖 - 即2010年5月31日至2010年7月4日。

+0

感謝您的回覆,瑞恩。 我使用了DateRangesOverLap標識符。但我認爲我的編輯更接近我想成爲的地方。 有沒有什麼辦法可以取代的範圍如<今日:今日OffsetDays =「30」/>? – Jack 2010-06-17 19:11:04

+0

我不認爲你可以通過CQWP做到這一點 - 你不能設置query.ExpandRecurrances。我認爲你將不得不編碼一個Web部分。 – Ryan 2010-06-18 10:50:42

+0

回覆:<今天的格式應該是但我認爲這不會起作用。ExpandRecurrances旨在支持需​​要每日/每週和每月視圖的日曆視圖 - 不是任意的10天視圖。你必須得到所有的代碼猴子;) – Ryan 2010-06-18 10:52:44