我有一个内容查询网络部分,在我们的Intranet主页上显示今天的3个事件。但是,当用户从周期性系列中删除事件时,SP会将该事件的标题更改为“已删除:[原始标题]”。我的内容查询Web部件仍然显示这些,我没有看到过滤它们的方法。
对于我的列表视图,我使用以下字段中的字段和公式来解决它。
= IF(ISNUMBER(FIND( “已删除”,标题)), “是”, “否”)
。
但是,在CQWP过滤器下拉列表中,我无法使用该字段。
如何防止这些已删除的事件在CQWP中显示?
更新:这是一个发布页面BTW。
答案 0 :(得分:1)
您之前尝试过DataFormWebPart(DFWP)吗?它基本上是最基本的数据绑定webparts,但奇怪的是最可定制的。
要试用它,请打开SharePoint设计器并创建一个虚拟的aspx页面来处理/玩游戏。然后打开数据源窗格并找到要使用的列表。然后单击该列表并选择“查看数据”。将相应的字段拖到aspx页面上。您现在有一个(非常)基本网格显示您的数据。
但很酷的是,所有布局都是xsl驱动的,所以完全可以自定义。您甚至可以通过切换到源视图并将xs,l剪切并粘贴到单独的xsl文件中来使xsl可重用。然后在移动内联xsl之后使用此文件而不是内联xsl,从
更改DFWP属性xsl(包含内联xsl)<xsl><!-- .... this is where the moved inline xsl used to be... --></xsl>
到
<xsllink>/server relative url to xsl file</xsllink>
唯一剩下的问题是DFWP的数据源现在绑定了一个列表。要进行汇总跨站点集合(如果您要说明要包含多个事件列表),则需要更改DFWP的SPDataSource的选择查询和数据源模式。如何解释here。
现在解决您的实际问题:(在我公然插入未经充分认可的DFWP之后:-D)DFWP的SPDataSource基本上使用SPQuery或SPSiteDataQuery(取决于数据源模式)来检索数据,你可以采取更多过滤方式。无论是在CAML查询中,还是仅使用以下内容过滤掉不需要的行:
<xsl:if test="not(contains(@Title, 'Deleted:'))">
<xsl:apply-templates />
</xsl:if>
答案 1 :(得分:1)
虽然您可以通过XSLT执行过滤器,但最好在CAML查询本身中执行此操作。 Microsoft的这篇文章How to: Customize the Content Query Web Part by using Custom Properties显示了如何构造(并且可以修改)CAML Where子句。祝你好运!