2010-07-07 5 views

Répondre

5

Vous pouvez utiliser SPSiteDataQuery pour interroger toutes les listes de tous les sites Web d'une collection. Vous pouvez effectuer une requête pour un type spécifique de liste en transmettant une valeur ServerTemplate à la propriété SPSiteDataQuery.Lists. L'ID ServerTemplate pour les tâches est 107. L'interrogation de tous les sites Web est effectuée en transmettant la valeur "SiteCollection" à la propriété SPSiteDataQuery.Webs. SPSiteDataQuery renvoie un DataTable avec des informations très limitées (uniquement les ID de liste et d'élément). Vous devez donc spécifier tous les champs supplémentaires de la propriété SPSiteDataQuery.ViewFields.

Le code suivant (adapté de l'échantillon de documentation de la classe) renverra toutes les tâches en cours, afin de leur date de départ décroissant:

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); 
Questions connexes