SPWeb.GetSiteData method
Gets the list items across multiple lists, which can be located in multiple websites in the same website collection.
Assembly: Microsoft.SharePoint (in Microsoft.SharePoint.dll)
Parameters
- query
- Type: Microsoft.SharePoint.SPSiteDataQuery
A query to perform, specifying which websites and lists participate, which fields to return, and the Where and OrderBy sections to apply.
| Exception | Condition |
|---|---|
| ArgumentNullException | The query parameter is null reference. |
Each DataRow object in the DataTable.Rows collection represents a single item that satisfies the requirements of the query. Each DataColumn object in the DataTable.Columns collection represents a field that is requested in the query fields, and the column name of the field equals the value of the Name attribute for that field. In addition, DataTable.Columns contains a DataColumn named ListId, which identifies the list that contains each item; a DataColumn named WebId, which identifies the website that contains each item; and a DataColumn named ID, which identifies each item.
The following example is a console application that queries all Tasks lists in a site collection. The query string selects tasks that are assigned to the current user, ordered by date due. After the results are returned, the application prints a report to the console.
using System; using System.Data; using Microsoft.SharePoint; namespace Test { class ConsoleApp { static void Main(string[] args) { using (SPSite site = new SPSite("http://localhost")) { using (SPWeb web = site.OpenWeb()) { SPSiteDataQuery query = new SPSiteDataQuery(); // Get IDs for all fields used in the query. string assignedToId = SPBuiltInFieldId.AssignedTo.ToString("B"); string taskDueDateId = SPBuiltInFieldId.TaskDueDate.ToString("B"); string titleId = SPBuiltInFieldId.Title.ToString("B"); string taskStatusId = SPBuiltInFieldId.TaskStatus.ToString("B"); string percentCompleteId = SPBuiltInFieldId.PercentComplete.ToString("B"); // Define the data selection. string where = "<Where><Eq>"; where += "<FieldRef ID='" + assignedToId + "' />"; where += "<Value Type='Integer'><UserID/></Value>"; where += "</Eq></Where>"; // Define the sort order. string orderBy = "<OrderBy>"; orderBy += "<FieldRef ID='" + taskDueDateId + "' />"; orderBy += "</OrderBy>"; // Set the query string. query.Query = where + orderBy; // Query task lists. query.Lists = "<Lists ServerTemplate='107'/>"; // Specify the view fields. query.ViewFields = "<FieldRef ID='" + titleId + "' />"; query.ViewFields += "<FieldRef ID='" + taskDueDateId + "' Nullable='TRUE' />"; query.ViewFields += "<FieldRef ID='" + taskStatusId + "' Nullable='TRUE' />"; query.ViewFields += "<FieldRef ID='" + percentCompleteId + "' Nullable='TRUE' />"; // Query all websites in this site collection. query.Webs = "<Webs Scope='SiteCollection'>"; // Run the query. DataTable results = web.GetSiteData(query); // Print the results. Console.WriteLine("{0, -10} {1, -30} {2, -30} {3}", "Date Due", "Task", "Status", "% Complete"); foreach (DataRow row in results.Rows) { // Extract column values from the data table. string dueDate = (string)row[taskDueDateId]; string task = (string)row[titleId]; string status = (string)row[taskStatusId]; string percentComplete = (string)row[percentCompleteId]; // Convert the due date to a short date string. DateTime dt; bool hasDate = DateTime.TryParse(dueDate, out dt); if (hasDate) dueDate = dt.ToShortDateString(); else dueDate = String.Empty; // Convert the PercentComplete field value to a percentage. decimal pct; bool hasValue = decimal.TryParse(percentComplete, out pct); if (hasValue) percentComplete = pct.ToString("P0"); else percentComplete = "0 %"; // Print a line. Console.WriteLine("{0, -10} {1, -30} {2, -30} {3, 10}", dueDate, task, status, percentComplete); } } } Console.ReadLine(); } } }