запрос всей точки разделения семейства сайтов - PullRequest
1 голос
/ 21 января 2010

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

Объем этого запроса - sitecollection, так что это означает, что он будет просматривать весь список в sitecollection ... и если мой 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 ...?

1 Ответ

2 голосов
/ 04 февраля 2010

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

        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, чтобы вы могли запустить его в консольном приложении для тестирования, но вы можете заменить операторы использования на что-то вроде SPWeb web = SPContext.Current.Web;, когда поместите это в веб-часть.

Несколько других вещей, которые стоит рассмотреть:

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