SPSiteDataQuery

by Piotrosz 17. May 2010
SPSiteDataQuery pozwala na odpytywanie wielu list w obrębie SPSite (czyli kolekcji witryn). Mogą to być wszystkie listy określonego typu (wtedy trzeba podać ID danego typu listy) lub listy o podanych Guidach.
Zapytanie takie w przeciwieństwie do SPQuery zwraca DataTable, a nie SPListItemCollection. Zwracana DataTable ma dodatkowe kolumny o nazwach "WebID" - guid witryny i "ListID" - guid listy.
Przykład:
using System;
using Microsoft.SharePoint;
using System.Data;

namespace SPSiteDataQueryTest
{
    class Program
    {
        static void Main()
        {
            SPSiteDataQuery q = new SPSiteDataQuery();

            q.Lists = "<Lists>" +
                        "<List ID='{03195192-B3EB-4BD0-BD6E-B9A11DAE896E}' />" +
                        "<List ID='{DA6BBEC6-6478-4887-BF35-A27015B27626}' />" +
                       "</Lists>";

            q.Query = "<Where>" +
                        "<Contains>" +
                        "<FieldRef Name='Body'/>" +
                        "<Value Type='Text'>Ala ma kota</Value>" +
                        "</Contains>" +
                      "</Where>";

            q.ViewFields = "<FieldRef Name='Title'/>" +
                            "<FieldRef Name='Body'/>";

            q.RowLimit = 10;
            q.Webs = "<Webs Scope=\"SiteCollection\" />";

            using (SPSite site = new SPSite("http://test"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    DataTable dt = web.GetSiteData(q);

                    foreach (DataRow row in dt.Rows)
                    {
                        Console.WriteLine("WebId: {0}", row["WebID"]);
                        Console.WriteLine("ListID: {0}", row["ListID"]);
                        Console.WriteLine("Title: {0}", row["Title"]);
                        Console.WriteLine("Body: {0}", row["Body"]);
                        Console.WriteLine();
 
                    }
                }
            }
        }
    }
}
Wynik:

Tutaj jest bardzo dobry przykład takiego zapytania.

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen