我有一个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 ......?
答案 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;
的替换语句。
其他一些值得考虑的事情: