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
浙公网安备 33010602011771号