博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
依然莫名其妙的内容查询Web部件(Content Query Web Part)
阅读量:6995 次
发布时间:2019-06-27

本文共 1114 字,大约阅读时间需要 3 分钟。

内容查询Web部件(Content Query Web Part,或简称CQWP)自从在2007引入SharePoint(企业版)以来,受到了无数人的关注。一方面因为其跨网站、跨列表查询的能力、样式订制扩展的能力,另一方面也因为各种各样的Bug。

其中最“臭名昭著”的一个Bug,就是在查询的列表超过10个的时候,可能无法返回完整的结果,这个是由于其核心的SPSiteDataQuery的Bug造成的(微软已经确定声明这个Bug,详见:)

最近的一个项目是用到了2010,在类似需求的场景中,使用了另外一个API - CrossListQuery,这个同样是CQWP的核心查询,是对SPSiteDataQuery的一个封装,利用了对象缓存的功能,可以在服务器端缓存查询结果,以此来提高查询性能,这三者的关系基本上可以用下图来表示:

因为担心上面提到的那个Bug,我还专门用SPSiteDataQuery测试了一下,当超过10个文档库并且有不同字段设置的时候,可以查询到完整结果。

于是很Happy的就用了,然后上线了,然后客户开始迁移数据,当迁移到10万+文档的时候,客户过来找我,说首页的“最新更新”内容都不见了……

于是在解决这个问题的过程中,我陆陆续续发现了如下莫名其妙的现象:

1、同样的查询条件,RowLimit限制为5,返回0个结果;RowLimit为24,返回2个结果;RowLimit为30,返回5个结果;RowLimit为50,返回50个结果……

2、同样的查询条件,使用修改时间排序的时候,不返回任何结果;使用我自己定义的一个字段排序的时候,正常;使用ID排序的时候,正常……

3、同样的查询条件和排序条件,使用系统账户的时候,一切正常;使用另一个完全控制权限(通过Web应用程序策略设置)的账号,不返回任何结果……

通过上述现象的观察,基本上确定了不是我们自己的代码造成的问题,为了进一步验证这一点,我直接使用了CQWP,现象同上。

上述经验表明,CQWP是个大坑(网上搜CQWP + Bug,可以找到各种各样诡异的现象),尤其在大数据量的时候,慎用。

 

btw,最后我们的解决办法,就是无论页面上需要显示多少个结果(首页是5个),都强制后台查询的RowLimit为50,然后在前台扔掉后45个……

btw2,SharePoint 2013中引入了CQWP的一个替代品,Content Search Web Part,这个是基于搜索的,也很有意思,有机会专门分享一下这个东西。

转载于:https://www.cnblogs.com/erucy/archive/2013/04/04/2999170.html

你可能感兴趣的文章
51Nod1130斯特林近似
查看>>
dede 调用原图的路径
查看>>
浅析设计模式(四)——建造者模式
查看>>
LeetCode——N-Queens
查看>>
JS中的正则表达式
查看>>
Mysql数据库的基本概念
查看>>
Linux中main是如何执行的
查看>>
Linux,在不使用U盘的情况下使用wubi.exe程序在Win7上安装ubuntu-14.04.3版系统
查看>>
SQLite简单教程
查看>>
网站推广必备的16个营销工具
查看>>
解决sublime text3运行PyQt5代码不能显示窗口的问题
查看>>
csss属性选择器
查看>>
java基础 布局管理器
查看>>
Assetbundle资源单一打包,以及加载方法
查看>>
unity启动第三方软件
查看>>
什么才是程序员的核心竞争力?
查看>>
DOS命令批量重命名文件配合Excel 操作备忘
查看>>
使用Three.js里的各种光源
查看>>
flask cookie
查看>>
04-对象的单体模式
查看>>