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[i][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 可填下列值
值 | 范围 | 备注 |
0 | Generic list | |
1 | Document library | |
3 | Discussion forum | |
4 | Vote or Survey | |
5 | Issues 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