【问题标题】:Sharepoint Content Query Web Part: Show items from "events" list that are set to occur or reoccur within a monthSharepoint 内容查询 Web 部件:显示“事件”列表中设置为在一个月内发生或再次发生的项目
【发布时间】:2011-03-05 00:54:18
【问题描述】:

我一直在阅读这篇 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)。”

【问题讨论】:

    标签: sharepoint web-parts caml recurring


    【解决方案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 日。

    【讨论】:

    • 感谢您的回复,瑞恩。我使用了您的 DateRangesOverLap 标识符。但我认为我的编辑更接近我想要的位置。有没有办法用 之类的范围替换
    • 我认为您无法通过 CQWP 实现这一点 - 您无法设置 query.ExpandRecurrances。我认为您将不得不编写一个 Web 部件。
    • re: 但我不认为这会起作用。 ExpandRecurrances 旨在支持需​​要每日/每周和每月视图的日历视图 - 而不是任意的 10 天视图。你将不得不得到所有的代码猴子;)
    • 我已将我的网站切换到 drupal,因为日历在 drupal 中创建视图更自然。此外,可以使用文件框架模块和 ​​webdev 很好地配置文件系统,以完成 sharepoint 可以做的事情。 Drupal 只是允许以 sharepoint 不允许的方式轻松扩展。
    • 有没有办法从 ContentByQueryWebPart 继承并修改而不是替换查询,以便将 ExpandRecurrence 设置为 true?我只想为添加了这一更改的事件创建一个 CQWP,但是我在 Web 上找到的所有示例都创建了对特定列表或内容类型的新查询,我仍然希望这可以通过标准 Web 部件属性进行配置。
    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多