我正在尝试使用内容查询Web部件来创建Sharepoint 2010中的"What's New"页面。这个页面的目的是显示在过去14天内上传的所有文档。诀窍在于,这些文档可以属于任意数量的列表,这些列表定义在任意数量的列表定义中。这些是基于自定义内容类型的自定义列表定义。我们确实有一个基内容类型,每个自定义内容类型都继承它。它们也是同一内容类型组的一部分。我已经确定,不可能使用SP UI来设置CQWP以从多个列表类型返回项,因为所需的查询字段之一是列表类型。所以-我试图使用CAML来定义这个CQWP,这就是我遇到麻烦的地方。我的最终目标是在站点定义(onet.xml文件)中定义CAML,但我也没有从SP UI上传。webpart文件的任何运气。我已经找到了几篇解释如何做到这一点的文章,但还没有能够得到建议的解决方案。这篇MSDN文章告诉我,使用listoverride元素应该是可能的。这是文章告诉我怎么做的:
<![CDATA[
<Lists BaseType="0">
</Lists> ]]>
由于我正在寻找文档库,我将使用基础类型1而不是0。
我一直无法确定从net.xml文件中实际看起来像什么语法,所以我想我会开始尝试将其作为。webpart文件上传。
listoverride元素是这样的:
<property name="ListsOverride" type="string">
<![CDATA[<Lists BaseType="1"></Lists>]]>
</property>
然而,只要我在CAML中上传一个.webpart文件并将该webpart添加到页面中,我就会在Sharepoint中破坏该页面。这是我得到的:
'/'应用程序中的服务器错误。试图使用一个已不存在的对象。
对这个错误的研究指向了处理SPContext.Current.Web等对象的代码,但我在这里甚至没有任何代码。看起来CQWP里面好像有个bug。或者-我没有正确格式化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>]]>
这不会破坏页面,但Web部件在页面上给我的错误不太有用(无法显示此Web部件)
我不能100%确定我在那次尝试中使用了适当的GUID。我在Visual Studio的服务器资源管理器(列表和库下>>文档库>>我的列表类型)中找到了它。(我从Id属性中获得GUID)
我应该提到我对Sharepoint开发相当陌生。我本希望Sharepoint的核心功能能比这简单得多。
有人能指出我做错了什么吗?也许我整件事都做错了?我感谢任何人能给我的任何帮助!我发现问题出在SharePoint填充的所有"extra"字段上。
在我的例子中,我首先在页面上配置内容查询web部件,然后将其导出以获得xml。然后,将XML放入网站定义的onet.xml文件中。这最初工作得很好,但当我试图配置基本类型时,它的行为不像预期的那样。
如果我删除所有额外的字段,只使用我实际需要配置的几个字段,那么它就开始工作了。实际上,我甚至不需要使用ListsOverride元素,因为有一个BaseType属性可以很好地工作。看来我拉进来的另一个属性是导致我的问题的真正原因。
这是我在onet.xml中使用的web部件定义:
<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>