我们有一个包含多个团队网站的网站集。每个团队站点都有一个任务列表。
我们希望在根网站上的所有团队网站中显示一个聚合的任务列表。这样做的最佳方式是什么?
答案 0 :(得分:5)
您可以使用SPSiteDataQuery查询集合中所有网页的所有列表。您可以通过将ServerTemplate值传递给SPSiteDataQuery.Lists属性来查询特定类型的列表。任务的ServerTemplate ID为107.通过将“SiteCollection”值传递给SPSiteDataQuery.Webs属性来完成查询所有Web。
SPSiteDataQuery返回的DataTable信息非常有限(我认为只有列表和项ID),因此您必须在SPSiteDataQuery.ViewFields属性中指定所有额外字段。
以下代码(改编自类文档示例)将返回正在进行的所有任务,按其开始日期降序排序:
SPWeb web = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
//Ask for all lists created from the tasks template.
query.Lists = "<Lists ServerTemplate=\"107\" />";
// Get the Title field.
query.ViewFields = "<FieldRef Name=\"Title\" />" ;
// Set the criteria and sort order.
query.Query = "<Where>" +
"<Eq>" +
"<FieldRef Name='Status'>" +
"<Value Type='Choice'>In Progress</Value>" +
"</Eq>" +
"</Where>" +
"<OrderBy>" +
"<FieldRef Name=\"StartDate\" Ascending='False'/>" +
"</OrderBy>";
// Query all Web sites in this site collection.
query.Webs = "<Webs Scope=\"SiteCollection\" />";
DataTable dt = web.GetSiteData(query);