Compartilhar via


SPWeb.GetSiteData method

Obtém os itens da lista em várias listas, que podem estar localizadas em vários sites no mesmo conjunto de site.

Namespace:  Microsoft.SharePoint
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)

Syntax

'Declaração
Public Function GetSiteData ( _
    query As SPSiteDataQuery _
) As DataTable
'Uso
Dim instance As SPWeb
Dim query As SPSiteDataQuery
Dim returnValue As DataTable

returnValue = instance.GetSiteData(query)
public DataTable GetSiteData(
    SPSiteDataQuery query
)

Parâmetros

  • query
    Type: Microsoft.SharePoint.SPSiteDataQuery

    Uma consulta para executar, especificando quais sites e listas de participar, quais campos para retornar, e as seções de Where e OrderBy para aplicar.

Valor retornado

Type: System.Data.DataTable
O resultado da consulta.

Exceptions

Exception Condition
ArgumentNullException

O parâmetro query é a referência de null .

Comentários

Cada objeto de DataRow da coleção DataTable.Rows representa um único item que satisfaz os requisitos da consulta. Cada objeto de DataColumn na coleção DataTable.Columns representa um campo que é solicitado em campos de consulta e o nome da coluna do campo é igual ao valor do atributo Name para esse campo. Além disso, DataTable.Columns contém um DataColumn chamado ListId, que identifica a lista que contém cada item; DataColumn chamado WebId, que identifica o site que contém cada item; e um DataColumn chamado ID, que identifica cada item.

Examples

O exemplo a seguir é um aplicativo de console que consulta todas as listas de tarefas em um conjunto de sites. A seqüência de caracteres de consulta seleciona tarefas atribuídas ao usuário atual, ordenado por data de vencimento. Depois que os resultados são retornados, o aplicativo imprime um relatório para o 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();
      }
   }
}

Ver também

Referência

SPWeb class

SPWeb members

Microsoft.SharePoint namespace