SPSiteDataQuery.Webs 属性
获取或设置指定哪些网站,以包含在查询中的内部 XML。指定在查询中的Webs标记Scope属性。默认情况下,查询考虑当前网站,即从其 Web 站点
命名空间: Microsoft.SharePoint
程序集: Microsoft.SharePoint(位于 Microsoft.SharePoint.dll 中)
语法
声明
Public Property Webs As String
Get
Set
用法
Dim instance As SPSiteDataQuery
Dim value As String
value = instance.Webs
instance.Webs = value
public string Webs { get; set; }
属性值
类型:System.String
包含指定要包括的网站的内部 XML 的字符串。
备注
Webs属性指定要包含在查询的网站。默认情况下,查询将视为只有从中调用GetSiteData方法的网站。
可以通过将Webs属性设置为包含Webs标记和Scope属性的字符串来扩大查询的范围。Scope属性的可能值包括Recursive和SiteCollection。
<Webs Scope="Recursive" />
<Webs Scope="SiteCollection" />
查询时Scope属性设置为Recursive,考虑当前网站和当前网站的所有子网站。
当Scope属性设置为SiteCollection时,查询将视为中与当前网站位于同一网站集中的所有网站。两个属性值,这是更包容。
示例
下面的示例是一个控制台应用程序检索信息的网站集中的每个文档库中的每个文件的大小。应用程序然后循环访问数据,并打印在库、 网站和网站集级别的总计。
Imports System
Imports System.Data
Imports Microsoft.SharePoint
Module ConsoleApp
Sub Main()
Using site As SPSite = New SPSite("https://localhost")
Using web As SPWeb = site.OpenWeb()
Dim query As SPSiteDataQuery = New SPSiteDataQuery()
' Query all Web sites in this site collection.
query.Webs = "<Webs Scope='SiteCollection'>"
' Ask for document libraries.
query.Lists = "<Lists BaseType='1' />"
' Get IDs for fields used in the query.
Dim fileSizeId As String = SPBuiltInFieldId.File_x0020_Size.ToString("B")
Dim fileSizeDisplayId As String = SPBuiltInFieldId.FileSizeDisplay.ToString("B")
' Select the records.
query.Query = "<Where><Gt>"
query.Query += "<FieldRef ID='" + fileSizeId + "' />"
query.Query += "<Value Type='Number'>0</Value>"
query.Query += "</Gt></Where>"
' Specify the view fields.
query.ViewFields = "<FieldRef Name='" + fileSizeDisplayId + "' />"
query.ViewFields += "<ProjectProperty Name='Title' />"
query.ViewFields += "<ListProperty Name='Title' />"
' Submit the query.
Dim results As DataTable = web.GetSiteData(query)
' Process the results.
Dim webTitle As String = String.Empty
Dim listTitle As String = String.Empty
Dim listTotal, webTotal, grandTotal As Long
For Each row As DataRow In results.Rows
Dim curWeb As String = CType(row("ProjectProperty.Title"), String)
Dim curList As String = CType(row("ListProperty.Title"), String)
If webTitle <> curWeb Then
listTotal = PrintSubTotal(listTotal, listTitle)
listTitle = String.Empty
webTotal = PrintSubTotal(webTotal, webTitle)
webTitle = curWeb
Console.WriteLine(vbCrLf + "Web site: {0}", webTitle)
End If
If listTitle <> curList Then
listTotal = PrintSubTotal(listTotal, listTitle)
listTitle = curList
End If
' Get the size of the current file.
Dim fileSize As Integer = Convert.ToInt32(row(fileSizeDisplayId))
' Add it to the totals.
listTotal += fileSize
webTotal += fileSize
grandTotal += fileSize
Next
listTotal = PrintSubTotal(listTotal, listTitle)
webTotal = PrintSubTotal(webTotal, webTitle)
Console.WriteLine(vbCrLf + "Grand total: {0}", grandTotal)
End Using
End Using
Console.ReadLine()
End Sub
Function PrintSubTotal(ByVal total As Long, ByVal name As String) As Long
If total <> 0 Then
Console.WriteLine(" Total file size for {0} is {1}.", name, total)
End If
Return 0
End Function
End Module
using System;
using System.Data;
using Microsoft.SharePoint;
namespace Test
{
class ConsoleApp
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
{
using (SPWeb web = site.OpenWeb())
{
SPSiteDataQuery query = new SPSiteDataQuery();
// Query all Web sites in this site collection.
query.Webs = "<Webs Scope=\"SiteCollection\">";
// Ask for document libraries.
query.Lists = "<Lists BaseType=\"1\" />";
// Get IDs for fields used in the query.
string fileSizeId = SPBuiltInFieldId.File_x0020_Size.ToString("B");
string fileSizeDisplayId = SPBuiltInFieldId.FileSizeDisplay.ToString("B");
// Select the records.
query.Query = "<Where><Gt>";
query.Query += "<FieldRef ID=\"" + fileSizeId + "\" />";
query.Query += "<Value Type=\"Number\">0</Value>";
query.Query += "</Gt></Where>";
// Specify the view fields.
query.ViewFields = "<FieldRef Name=\"" + fileSizeDisplayId + "\" />";
query.ViewFields += "<ProjectProperty Name=\"Title\" />";
query.ViewFields += "<ListProperty Name=\"Title\" />";
// Submit the query.
DataTable results = web.GetSiteData(query);
// Process the results.
string webTitle = string.Empty, listTitle = string.Empty;
long listTotal = 0, webTotal = 0, grandTotal = 0;
foreach (DataRow row in results.Rows)
{
string curWeb = row["ProjectProperty.Title"] as string;
string curList = row["ListProperty.Title"] as string;
if (webTitle != curWeb)
{
listTotal = PrintSubTotal(listTotal, listTitle);
listTitle = string.Empty;
webTotal = PrintSubTotal(webTotal, webTitle);
webTitle = curWeb;
Console.WriteLine("\nWeb site: {0}", webTitle);
}
if (listTitle != curList)
{
listTotal = PrintSubTotal(listTotal, listTitle);
listTitle = curList;
}
// Get the size of the current file.
int fileSize = Convert.ToInt32(row[fileSizeDisplayId]);
// Add it to the totals.
listTotal += fileSize;
webTotal += fileSize;
grandTotal += fileSize;
}
listTotal = PrintSubTotal(listTotal, listTitle);
webTotal = PrintSubTotal(webTotal, webTitle);
Console.WriteLine("\nGrand total: {0}", grandTotal);
}
}
Console.ReadLine();
}
private static long PrintSubTotal(long total, string name)
{
if (total != 0)
Console.WriteLine(" Total file size for {0} is {1}.", name, total);
return 0;
}
}
}