如何让内容查询Web部件显示来自多种类型列表的项目?

时间:2011-08-03 13:28:09

标签: sharepoint sharepoint-2010 cqwp

我正在尝试使用内容查询Web部件在Sharepoint 2010中创建“新功能”页面。此页面的目标是显示过去14天内上传的所有文档。诀窍是这些文档可以属于任意数量的列表定义中定义的任意数量的列表。这些是基于自定义内容类型的自定义列表定义。我们确实有一个基本内容类型,我们的每个自定义内容类型都继承自该类型。它们也是同一内容类型组的一部分。我已确定无法使用SP UI设置CQWP以从多个列表类型返回项目,因为其中一个必需的查询字段是列表类型。所以 - 我试图用CAML来定义这个CQWP,这就是我遇到麻烦的地方。我的最终目标是在站点定义(onet.xml文件)中定义CAML,但我也没有从SP UI上传.webpart文件的运气。我找到了几篇文章解释了如何做到这一点,但未能得到建议的解决方案。这个MSDN article告诉我应该可以使用ListsOverride元素。这就是文章告诉我这样做的方式:

<![CDATA[
          <Lists BaseType="0">
          </Lists> ]]>

由于我正在寻找文档库,我会使用基本类型1而不是0。

我无法确定onet.xml文件中实际外观的语法,所以我想我开始尝试将其作为.webpart文件上传。

这就是ListsOverride元素的样子:

<property name="ListsOverride" type="string">
    <![CDATA[<Lists BaseType="1"></Lists>]]>
</property>

但是 - 只要我在CAML中上传一个.webpart文件并将webpart添加到页面,我就会在Sharepoint中打破该页面。这就是我得到的:

'/'应用程序中的服务器错误。 试图使用已不复存在的物体。

对该错误的研究将我指向处理SPContext.Current.Web等对象的代码,但我在这里根本没有任何代码。它几乎看起来像CQWP有一个错误。或者 - 我要么没有正确格式化CAML,要么我需要更改CAML中不同元素的内容?

我正在运行带有所有最新补丁的Sharepoint 2010 SP1。 (我相信)

我尝试了其他几种格式,但没有运气。

我试图摆脱这样的嵌入式CDATA标签:

<property name="ListsOverride" type="string">
    <Lists BaseType="1"></Lists>
</property>

但是Sharepoint不允许我上传.webpart文件。 (无效的.webpart文件)

带有嵌入式CDATA标签的格式似乎是允许我上传文件的唯一方式。

我已经尝试过(只是为了缩小我的问题)来指定这样的特定列表:

    <property name="ListsOverride" type="string">
<![CDATA[<Lists><List Id="{5a2f79bb-cc82-4171-88ac-65f20e7b5fa8}" /></Lists>]]>

这不会破坏页面但是webpart在页面上给我的错误不足(无法显示此Web部件)

我不是100%确定我在该尝试中使用了适当的GUID。我通过查看Visual Studio中的服务器资源管理器(在列表和库&gt;&gt;文档库&gt;&gt;我的列表类型)中得到它。(我从Id属性获取了GUID)

我应该提到我在Sharepoint开发方面相当新。我本以为希望Sharepoint所做的事情看起来比这更容易。

有人可以指出我做错了什么吗?也许我会以错误的方式处理整件事?我感谢任何人都能给我的任何帮助!

1 个答案:

答案 0 :(得分:2)

我发现问题是SharePoint填充的所有“额外”字段。

就我而言,我首先在页面上配置内容查询Web部件,然后将其导出以获取xml。然后,我将XML放在我的网站定义的onet.xml文件中。这最初工作得很好,但是当我尝试配置基类型时,它的行为并不像预期的那样。

如果我删除了所有其他字段并且只使用了我实际需要配置的几个字段,那么它就开始工作了。事实上,我甚至不需要使用ListsOverride元素,因为有一个BaseType属性可以正常工作。看来我所吸引的其他一个属性确实是我的问题的原因。

这是我在onet.xml中使用的webpart定义:

<AllUsersWebPart WebPartZoneID="WebPartZone" WebPartOrder="1">
      <![CDATA[                
    <webParts>
      <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
        <metaData>
          <type name="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
          <importErrorMessage>Cannot import this Web Part.</importErrorMessage>
        </metaData>
        <data>
          <properties>
            <property name="Title" type="string">Recently Updated Documents</property>
          <property name="ChromeType" type="chrometype">TitleOnly</property>
          <property name="ChromeState" type="chromestate">Normal</property>
              <property name="WebUrl" type="string">~site</property>
          <property name="BaseType" type="string">1</property>
              <property name="ContentTypeBeginsWithId" type="string">0x0101008B0856395DCD40F99C9B42B6BF92BDDB</property>
          <property name="FilterField1" type="string">{28cf69c5-fa48-462a-b5cd-27b6f9d2bd5f}</property>
          <property name="FilterType1" type="string">DateTime</property>
          <property name="FilterOperator1" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+FilterFieldQueryOperator, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">Geq</property>
          <property name="FilterDisplayValue1" type="string">-14</property>
          <property name="FilterValue1" type="string">-14</property>
          <property name="SortBy" type="string">{8c06beca-0777-48f7-91c7-6da68bc07b69}</property>
          <property name="SortByFieldType" type="string">DateTime</property>
          <property name="SortByDirection" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+SortDirection, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">Desc</property>
          <property name="ItemXslLink" type="string">~sitecollection/Style Library/DealerPortal/ItemStyle.xsl</property>
          <property name="CommonViewFields" type="string">Name,Text;Created,DateTime;Modified,DateTime;Body,Note;DocumentIconImageUrl;OnClickForWebRendering</property>
        </properties>
      </data>
      </webPart>
      </webParts>             
      ]]>      

    </AllUsersWebPart>