2

我一直在阅读这篇 msdn 帖子:http: //msdn.microsoft.com/en-us/library/aa981241.aspx

尝试编辑内容查询 Web 部件以仅显示事件列表中在 30 天内发生或在 30 天内再次发生的项目。处理不再发生的事件很简单,因为我可以将 [开始日期] 与 [今天]+30 与修改此共享 Web 部件配置进行比较,但对于重复发生的事件,似乎 [开始日期] 和 [结束日期] 描述重复事件发生的时间段,我不知道该怎么做才能确定事件最快即将再次发生。cqwp 只需要三个过滤器项,因此我无法在不覆盖查询的情况下同时处理重复项和单次出现项。

我认为我需要用于重复出现的字段是其中之一:msdn-microsoft-com/en-us/library/microsoft.sharepoint.spfieldrecurrence_members.aspx 但它们似乎都不合适。

您如何处理“每月的第四天”重复 msdn-microsoft-com/en-us/library/microsoft.sharepoint.weekofmonth.aspx

基本上,您如何覆盖查询以过滤重复发生的事件和单次发生的事件以仅显示一周内发生的事件?

我已将以下代码添加到 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)。”

4

1 回答 1

1

SharePoint 重复事件很棘手。这篇文章是了解重复事件混乱的唯一最佳资源

了解 SharePoint 日历以及如何将其导出为 iCal 格式

我认为您无法在 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 日。

于 2010-06-17T16:22:59.610 回答