запрос общего доступа ко всему семейству сайтов

У меня есть веб-часть, которая представляет собой 2-3 дочерних сайта на сайте верхнего уровня. Мне нужно запросить список, который находится в верхнем семействе сайтов и один на том же уровне, я думаю, это возможно через SPSiteDataquery ... У меня есть некоторая путаница, связанная с этим, могу ли я написать один запрос, который может запрашивать оба этих списка ....

Объем этого запроса - сбор сайтов, это означает, что он будет просматривать весь список в коллекции сайтов ... и если мой запрос CAML одинаков для обоих этих списков ... он должен работать?

позвольте мне объяснить свой код:

SPSite mySite = SPControl.GetContextSite(Context);
                SPWeb myWeb = SPControl.GetContextWeb(Context);
                SPSiteDataQuery qry = new SPSiteDataQuery();
                qry.Lists = "<Lists BaseType='0' />";

                qry.Query = "<Where><Contains><FieldRef Name='Country'/><Value Type='Text'>" + strcount + "</Value></Contains></Where>";

                qry.ViewFields = "<FieldRef Name='Capital' Nullable='TRUE'/><FieldRef Name='Currency' Nullable='TRUE'/>";

                qry.Webs = "<Webs Scope='SiteCollection' />";

                DataTable dt = myWeb.GetSiteData(qry);

Теперь мне нужна валюта из списка, который находится на сайте верхнего уровня, и капитал из списка, который находится на том же уровне. Это возможно? или я неправильно понял SPSiteDataQuery ...?


person AB.    schedule 21.01.2010    source источник
comment
Какие столбцы в ваших двух списках? Одинаковы ли столбцы в двух списках?   -  person Kit Menke    schedule 21.01.2010


Ответы (1)


Вы на правильном пути, и можно получить результаты для списков на разных веб-сайтах. В следующем примере показано, как извлекать элементы из списков «Задачи» или «Задачи рабочего процесса» по умолчанию и как работать со списками задач, созданными на корневом уровне и внутри дочернего сайта.

        SPSiteDataQuery q = new SPSiteDataQuery();
        q.ViewFields = "<FieldRef Name='Title'/><FieldRef Name='Priority'/><FieldRef Name='Status'/>";
        q.Webs = "<Webs Scope='SiteCollection' />";
        q.Lists = "<Lists BaseType='0' />";
        q.Query = "<Where><Gt><FieldRef Name='ID' /><Value Type='Number'>0</Value></Gt></Where>";

        DataTable results = new DataTable();

        using (SPSite site = new SPSite("http://sharepoint"))
        {
            using (SPWeb web = site.OpenWeb("subsite"))
            {                    
                results = web.GetSiteData(q);
            }
        }

Я написал его с использованием жестко запрограммированного URL-адреса, чтобы вы могли запускать его внутри консольного приложения для тестирования, но вы можете заменить операторы using чем-то вроде SPWeb web = SPContext.Current.Web;, когда вы помещаете это в веб-часть.

Еще несколько вещей, на которые стоит обратить внимание:

  • Списки, которые вы запрашиваете, должны содержать все поля в элементе ViewFields.
  • Поля множественного поиска не работают с SPSiteDataQuery (поля поиска с одним значением допустимы)
  • Инструмент u2u CAML builder также полезен для тестирования запросов CAML. См. http://www.u2u.be/Res/Tools/CamlQueryBuilder.aspx
person Ari    schedule 04.02.2010