Partager via


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.

Voir aussi

Référence

SPSiteDataQuery - Membres

Microsoft.SharePoint - Espace de noms