设为首页 收藏本站
查看: 877|回复: 0

[经验分享] 在sharepoint中 使用SPSiteDataQuery来进行跨列表查询

[复制链接]

尚未签到

发表于 2015-9-24 11:54:01 | 显示全部楼层 |阅读模式
  SPSiteDataQuery对象呢? 功能比较强大, sharepoint 里面还有个SPQuery对象,一个是基于列表(list)里面来查询,一个可以跨列表来查询!
  比如,比如说! 我们现在要查询 站点下 任务列表里面 任务状态为“未完成”的! 这样我就可以知道哪些小子工作不是很卖力了哦.. (呵呵),
  如果用SPQuery对象呢? 就必须知道任务List,那么站点下面还有子站点呢? 子站点的任务List呢? 还要每个去找找!  像这样,我们就可以直接使用SPSiteDataQuery对象,可以查询出站点下所有状态为“未完成”的任务id,记住,他是可以跨列表的哦!
  由于我每次使用SPSiteDataQuery呢?每次都要去学习SPSiteDataQuery对象,每次都要去google (or baidu) . 现在闲麻烦了,特此记录下来了!下面列出了参考的资料链接,当然关于SPSiteDataQuery的用户,参数说明,也是在链接里面收集下来的!
  
private void SiteDataQueryTest()
{
using (SPWeb web = new SPSite("http://dg-mlwang/").OpenWeb())
{
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists ServerTemplate=\"107\" />";
//query.Lists = "<Lists BaseType=\"0\" />";
//query.Lists = "<Lists Hidden = \"true\" />";
//默认只是当前web哦, 不包括子站点
query.Webs = "<Webs Scope='SiteCollection' />";
query.Query =
"<Where><Eq><FieldRef Name=\"Status\"/>" +
"<Value Type=\"Text\">未完成</Value></Eq></Where>";
//query.ViewFields = "<FieldRef Name=\"Title\" />";
DataTable items = web.GetSiteData(query);
if (items.Rows.Count > 0)
{
for (int i = 0; i < items.Rows.Count; i++)
{
string listID = items.Rows[0] + "";
SPList list = web.Lists[new Guid(listID)];
Response.Write("Title:" + list.Title + "<br />");
}
}
GridView1.DataSource = items;
GridView1.DataBind();
//修改上传新文档显示 New 标示符 的天数
//web.Site.WebApplication.DaysToShowNewIndicator = 1;
}
}  query.webs:

  此元素的属性只有一个:Scope。能赋予它的值有3个吧,尽管MSDN上说只有2个…..
  ① "<Webs Scope='SiteCollection' />",包含当前网站所在的网站集(Site)下所有网站(Web)以及子网站(Web)
  ② "<Webs Scope='Recursive' />",包含当前网站(Web)以及其下的所有子网站(Web)
  ③ 缺省,仅仅包含当前网站(Web)  
  query.lists:

  此元素将定义你在文档库(Document Libraries)或者列表(Lists)里的搜索范围。
属性有4个:BaseType、ServerTemplate、Hidden、MaxListLimit
此外,子元素有两个:List、WithIndex。使用子元素可以将搜索条件限制在比较小的范围之内。
下面是关于属性的介绍。
  ① BaseType (例:"<Lists BaseType='1'/>")
  必须要注意的是这个属性的默认值为"<Lists BaseType='0'/>",也就是说缺省或者该属性设置出错时会查询文档库以外的所有列表。
  ② ServerTemplate (例: "<Lists ServerTemplate='850'/>")搜索指定类型的列表(850为页面库列表类型)。这个属性的值出错时会以默认值进行查询。
  ③ Hidden (例:"<Lists ServerTemplate='850' Hidden='TRUE'/>")
设定能否搜索隐藏列表。默认是搜索所有非隐藏的列表。
  ④ MaxListLimit(例:"<Lists BaseType='1' MaxListsLimit='500'/>")
定义搜索的列表的总数,当超过这个数字时,SPSiteDataQuery会抛出一个SPException的例外。这个属性的默认值为1000。当把此属性设置为0时,那么搜索的列表数目将不会受到限制。
  query.ViewFields:
  此元素定义返回哪些Fields(列表的列)也就是说定义了作为搜索结果的DataTable将包含哪些列(Column)。比如:
<ViewFields>
  <FieldRef Name="Title" Nullable="TRUE" />
  </ViewFields>
  ① Name (例:<FieldRef Name="Title" />)
  ② Nullable (例:<FieldRef Name="Title" Nullable="TRUE" />)。
  Nullable属性为可选项。我们知道在MOSS里并不是所有的列表都包含了相同的列。比如SPSiteDataQuery在查询一个列表时,发现ViewFields里指定的某个列在列表里并不存在,那么这个列表将被忽略。而当指定了" Nullable "为"TRUE"时则可以避免这种情况,不管有没有这个列,该类表都会被查询,只是在返回的DataTable里该列将呈现空白。  query.Query:
  而当指定了这里就是使用CAML语句了,可以用U2U工具直接生成CAML语句,复制过来即可!前面设置那么多,这里才是关键,因为这里设置检索数据的依据,上面代码中检索 任务状态为“未完成”的列表和列表项
  query.RowLimit
  设置返回结果数,query.RowLimit = 10; 设置只返回10行数据
  
  BaseType   可填下列值

范围备注
0Generic list
1Document library
3Discussion forum
4Vote or Survey
5Issues list
  
  ServerTemplate 可填下列值

  如何确定ServerTemplate的值。
  1. 在 WSS3.0 的 SDK 的 Lists 属性主题里,你可以找到可用列表的一系列类型。
  2. 查找feature文件下相应List的模板文件,查看Type属性的值。
例如通过下面的文件,就可以查看Announcements list的ServerTemplate为104:
(C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\AnnouncementsList\ListTemplates\Announcements.xml)  3  参考: http://egrimmett.wordpress.com/2008/04/01/servertemplate-numbers/
  




100
Generic list

101
Document library

102
Survey

103
Links list

104
Announcements list

105
Contacts list

106
Events list

107
Tasks list

108
Discussion board

109
Picture library

110
Data sources

111
Site template gallery

112
User Information list

113
Web Part gallery

114
List template gallery

115
XML Form library

116
Master pages gallery

117
No-Code Workflows

118
Custom Workflow Process

119
Wiki Page library

120
Custom grid for a list

130
Data Connection library

140
Workflow History

150
Gantt Tasks list

200
Meeting Series list

201
Meeting Agenda list

202
Meeting Attendees list

204
Meeting Decisions list

207
Meeting Objectives list

210
Meeting text box

211
Meeting Things To Bring list

212
Meeting Workspace Pages list

300
Portal Sites list

301
Blog Posts list

302
Blog Comments list

303
Blog Categories list

850
Page Library

1100
Issue tracking

1200
Administrator tasks list

2002
Personal document library

2003
Private document library
  
  英文资料:http://blog.thekid.me.uk/archive/2007/02/27/spsitedataquery-samples-for-wss-v3.aspx
  中文参考:http://www.cnblogs.com/Kenr/archive/2009/06/02/1494260.html
  关于更多 SPSiteDataQuery 介绍请查阅MSDN :http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spsitedataquery.aspx
  


Technorati 标签: moss,SPSiteDataQuery,ServerTemplate,BaseType

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118181-1-1.html 上篇帖子: 独立安装Sharepoint Foundation 2010 下篇帖子: 为SharePoint 配置RBS(Remote Blob Storage) 特性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表