SPSiteDataQuery - Classe
Représente une requête qui peut être effectuée sur plusieurs listes sur plusieurs sites Web dans la même collection de sites Web.
Hiérarchie d’héritage
System.Object
Microsoft.SharePoint.SPSiteDataQuery
Espace de noms : Microsoft.SharePoint
Assembly : Microsoft.SharePoint (dans Microsoft.SharePoint.dll)
Syntaxe
'Déclaration
Public NotInheritable Class SPSiteDataQuery
'Utilisation
Dim instance As SPSiteDataQuery
public sealed class SPSiteDataQuery
Remarques
Vous pouvez utiliser une instance de cette classe pour récupérer des données à partir de listes sélectionnées ou dans toutes les listes dans la collection de sites actuelle. Spécifiez la portée de la requête en définissant la propriété Webs . Spécifier les listes pour participer à la requête en définissant la propriété Lists et les champs à renvoyer en définissant la propriété ViewFields . Sélection de données de contrôle et de commande en définissant la propriété Query .
Pour exécuter la requête, passez l'objet SPSiteDataQuery à la méthode GetSiteData(SPSiteDataQuery) , qui renvoie un objet DataTable contenant des lignes de données qui représentent le résultat de la requête. Chaque objet de DataRow dans la collection DataTable.Rows représente un élément unique qui répond à la requête. Chaque objet de DataColumn dans la collection DataTable.Columns représente un champ qui est demandé dans la propriété ViewFields , et le nom de colonne est égale à la valeur de l'attribut Name pour ce champ. En outre, la table de données contient une colonne nommée WebId, qui identifie le site Web qui contient chaque élément, une colonne nommée ListId, qui identifie la liste qui contient chaque élément et une colonne nommée ID, qui identifie chaque élément.
Exemples
L'exemple suivant est un Web Part qui interroge toutes les listes créées avec les Contacts liste n'importe où dans la collection de sites, il récupère le prénom et le nom de chaque contact et affiche des informations dans un GridView de contrôle.
Notez que si vous compilez l'exemple de code, vous pouvez déployer le composant WebPart suffit de copier l'assembly compilé dans le répertoire bin de l'application Web. Si vous choisissez cette méthode de déploiement, veillez à ce que votre projet inclut une référence à Microsoft.SharePoint.Security.dll. Ajoutez ensuite le composant WebPart à la liste SafeControls dans le fichier web.config et élever le niveau de confiance de l'application Web à WSS_Medium. Pour plus d'informations, consultez Deploying Web Parts in Windows SharePoint Services et Securing Web Parts in Windows SharePoint Services.
Avertissement
La valeur d'énumération pour Contacts est de 105.
Imports System
Imports System.Data
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports Microsoft.SharePoint
Public Class ContactViewer
Inherits WebPart
Private grid As GridView
Protected Overrides Sub CreateChildControls()
MyBase.CreateChildControls()
' Add an instance of the grid control.
Me.grid = New GridView()
Controls.Add(Me.grid)
End Sub
Protected Overrides Sub RenderContents(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim web As SPWeb = SPContext.Current.Web
Dim query As SPSiteDataQuery = New SPSiteDataQuery()
' Ask for all lists created from the contacts template.
query.Lists = "<Lists ServerTemplate='105' />"
' Get the Title (Last Name) and FirstName fields.
query.ViewFields = "<FieldRef Name='Title' />" + _
"<FieldRef Name='FirstName' Nullable='TRUE' Type='Text'/>"
' Note that setting the Nullable attribute to TRUE
' causes an empty value to be returned for lists that
' do not include the FirstName column. The default is
' to skip a list that does not include the column.
' Set the sort order.
query.Query = "<OrderBy>" + _
"<FieldRef Name='Title' />" + _
"</OrderBy>"
' Query all Web sites in this site collection.
query.Webs = "<Webs Scope='SiteCollection' />"
Dim dt As DataTable = web.GetSiteData(query)
Dim dv As DataView = New DataView(dt)
' Set up the field bindings.
Dim boundField As BoundField = New BoundField()
boundField.HeaderText = "Last Name"
boundField.DataField = "Title"
Me.grid.Columns.Add(boundField)
boundField = New BoundField()
boundField.HeaderText = "First Name"
boundField.DataField = "FirstName"
Me.grid.Columns.Add(boundField)
Me.grid.AutoGenerateColumns = False
Me.grid.DataSource = dv
Me.grid.DataBind()
Me.grid.AllowSorting = True
Me.grid.HeaderStyle.Font.Bold = True
Me.grid.RenderControl(writer)
End Sub
End Class
using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
namespace SampleWebParts
{
public class ContactViewer : WebPart
{
private GridView grid;
protected override void CreateChildControls()
{
base.CreateChildControls();
// Add an instance of the grid control.
this.grid = new GridView();
this.Controls.Add(this.grid);
}
protected override void RenderContents(HtmlTextWriter writer)
{
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
//Ask for all lists created from the contacts template.
query.Lists = "<Lists ServerTemplate=\"105\" />";
// Get the Title (Last Name) and FirstName fields.
query.ViewFields = "<FieldRef Name=\"Title\" />" +
"<FieldRef Name=\"FirstName\" Nullable=\"TRUE\" Type=\"Text\"/>";
// Note that setting the Nullable attribute to TRUE
// causes an empty value to be returned for lists that
// do not include the FirstName column. The default is
// to skip a list that does not include the column.
// Set the sort order.
query.Query = "<OrderBy>" +
"<FieldRef Name=\"Title\" />" +
"</OrderBy>";
// Query all Web sites in this site collection.
query.Webs = "<Webs Scope=\"SiteCollection\" />";
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
// Set up the field bindings.
BoundField boundField = new BoundField();
boundField.HeaderText = "Last Name";
boundField.DataField = "Title";
this.grid.Columns.Add(boundField);
boundField = new BoundField();
boundField.HeaderText = "First Name";
boundField.DataField = "FirstName";
this.grid.Columns.Add(boundField);
this.grid.AutoGenerateColumns = false;
this.grid.DataSource = dv;
this.grid.DataBind();
this.grid.AllowSorting = true;
this.grid.HeaderStyle.Font.Bold = true;
this.grid.RenderControl(writer);
}
}
}
Cohérence de thread
Tous les membres statique (Partagé dans Visual Basic)s publics de ce type sont thread-safe. Cela n’est pas garanti pour les membres d’instance.