我正在尝试使用内容查询 Web 部件在 Sharepoint 2010 中创建“新增功能”页面。此页面的目标是显示过去 14 天内上传的所有文档。诀窍是这些文档可以属于在任意数量的列表定义中定义的任意数量的列表。这些是基于自定义内容类型的自定义列表定义。我们确实有一个基本内容类型,我们的每个自定义内容类型都继承自该内容类型。它们也是同一个内容类型组的一部分。我已经确定不可能使用 SP UI 来设置 CQWP 从多个列表类型返回项目,因为所需的查询字段之一是列表类型。所以 - 我正在尝试使用 CAML 来定义这个 CQWP,这就是我遇到问题的地方。我的最终目标是在站点定义(onet.xml 文件)中定义 CAML,但我也没有从 SP UI 上传 .webpart 文件的运气。我找到了几篇文章来解释如何做到这一点,但无法让建议的解决方案发挥作用。这个MSDN 文章告诉我应该可以使用 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>]]>
这不会破坏页面,但 web 部件在页面上给了我不太有用的错误(无法显示此 Web 部件)
我不是 100% 确定我在那次尝试中使用了适当的 GUID。我通过查看 Visual Studio 中的服务器资源管理器得到它(在列表和库 >> 文档库 >> 我的列表类型下。(我从 Id 属性获得了 GUID)
我应该提一下,我对 Sharepoint 开发还很陌生。我希望 Sharepoint 所做的看似如此核心的事情会比这容易得多。
有人可以指出我做错了什么吗?也许我以错误的方式处理整个事情?我感谢任何人可以给我的任何帮助!