Sharepoint 2010:跨站点聚合任务

时间:2010-07-07 06:14:36

标签: sharepoint-2010

我们有一个包含多个团队网站的网站集。每个团队站点都有一个任务列表。

我们希望在根网站上的所有团队网站中显示一个聚合的任务列表。这样做的最佳方式是什么?

1 个答案:

答案 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);