查询整个网站集sharepoint

时间:2010-01-21 13:48:53

标签: sharepoint caml

我有一个webpart,在顶级网站上有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 个答案:

答案 0 :(得分:2)

您处于正确的轨道上,可以检索不同网站中列表的结果。以下示例显示如何从默认的“任务”或“工作流任务”列表中检索项目,并使用在根级别和子站点内创建的任务列表。

        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编写的,因此您可以在控制台应用程序中运行它以进行测试,但是当您将此语句放入Web部件中时,可以使用类似SPWeb web = SPContext.Current.Web;的替换语句。

其他一些值得考虑的事情:

  • 您要查询的列表必须包含所有 ViewFields元素中的字段
  • 多查找字段与SPSiteDataQuery不兼容(单值查找字段正常)
  • u2u CAML构建器工具对于测试CAML查询也很有用。请参阅http://www.u2u.be/Res/Tools/CamlQueryBuilder.aspx