SPWeb.GetSiteData - Méthode
Obtient les éléments de liste dans plusieurs listes, ce qui peuvent se trouver dans plusieurs sites Web dans la même collection de site Web.
Espace de noms : Microsoft.SharePoint
Assembly : Microsoft.SharePoint (dans Microsoft.SharePoint.dll)
Syntaxe
'Déclaration
Public Function GetSiteData ( _
query As SPSiteDataQuery _
) As DataTable
'Utilisation
Dim instance As SPWeb
Dim query As SPSiteDataQuery
Dim returnValue As DataTable
returnValue = instance.GetSiteData(query)
public DataTable GetSiteData(
SPSiteDataQuery query
)
Paramètres
query
Type : Microsoft.SharePoint.SPSiteDataQueryUne requête à exécuter, spécifiant les sites Web et les listes de participer, les champs à renvoyer, et les sections Where et OrderBy à appliquer.
Valeur renvoyée
Type : System.Data.DataTable
Le résultat de la requête.
Exceptions
Exception | Condition |
---|---|
ArgumentNullException | Le paramètre query est la référence null . |
Remarques
Chaque objet de DataRow dans la collection DataTable.Rows représente un élément unique qui satisfait aux exigences de la requête. Chaque objet de DataColumn dans la collection DataTable.Columns représente un champ qui est demandé dans les champs de requête et le nom de la colonne du champ est égale à la valeur de l'attribut Name pour ce champ. En outre, DataTable.Columns contient un DataColumn nommé ListId, qui identifie la liste qui contient chaque élément ; un DataColumn nommé WebId, qui identifie le site Web qui contient chaque élément ; et un DataColumn nommé ID, qui identifie chaque élément.
Exemples
L'exemple suivant est une application console qui interroge toutes les listes de tâches dans une collection de sites. La chaîne de requête sélectionne les tâches qui sont affectées à l'utilisateur en cours, classée par date d'échéance. Une fois que les résultats sont renvoyés, l'application imprime un rapport à la console.
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()
' Get IDs for all fields used in the query.
Dim assignedToId As String = SPBuiltInFieldId.AssignedTo.ToString("B")
Dim taskDueDateId As String = SPBuiltInFieldId.TaskDueDate.ToString("B")
Dim titleId As String = SPBuiltInFieldId.Title.ToString("B")
Dim taskStatusId As String = SPBuiltInFieldId.TaskStatus.ToString("B")
Dim percentCompleteId As String = SPBuiltInFieldId.PercentComplete.ToString("B")
' Define the data selection.
Dim where As String = "<Where><Eq>"
where += "<FieldRef ID='" + assignedToId + "' />"
where += "<Value Type='Integer'><UserID/></Value>"
where += "</Eq></Where>"
' Define the sort order.
Dim orderBy As String = "<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.
Dim results As DataTable = web.GetSiteData(query)
' Print the results.
Console.WriteLine("{0, -10} {1, -30} {2, -30} {3}", "Date Due", "Task", "Status", "% Complete")
Dim row As DataRow
For Each row In results.Rows
' Extract column values from the data table.
Dim dueDate As String = CType(row(taskDueDateId), String)
Dim task As String = CType(row(titleId), String)
Dim status As String = CType(row(taskStatusId), String)
Dim percentComplete As String = CType(row(percentCompleteId), String)
' Convert the due date to a short date.
Dim dt As DateTime
Dim hasDate As Boolean = DateTime.TryParse(dueDate, dt)
If hasDate Then
dueDate = dt.ToShortDateString()
Else
dueDate = String.Empty
End If
' Convert the PercentComplete field value to a percentage.
Dim pct As Decimal
Dim hasValue As Boolean = Decimal.TryParse(percentComplete, pct)
If hasValue Then
percentComplete = pct.ToString("P0")
Else
percentComplete = "0 %"
End If
' Print a line.
Console.WriteLine("{0, -10} {1, -30} {2, -30} {3, 10}", dueDate, task, status, percentComplete)
Next
End Using
End Using
Console.ReadLine()
End Sub
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();
// 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();
}
}
}