2010-02-19 6 views
1

J'utilise du code comme celui-ci pour obtenir une liste de tous les documents d'un site avec SPSiteDataQuery, mais il retourne toutes sortes de documents qui n'ont pas été téléchargés par l'utilisateur. Quel est le meilleur moyen de filtrer la liste uniquement sur les documents qu'un utilisateur aurait téléchargés?Sharepoint - SPSiteDataQuery (recherche de la liste des documents)

Je soupçonne qu'il y a une requête que je peux utiliser mais je ne suis pas sûr de ce que FieldRef je devrais utiliser pour trouver seulement les documents téléchargés par l'utilisateur (non cachés ou fichiers de documents de type système).

voir *** ci-dessous dans la méthode

grâce

 protected DataTable GetListDataSPSiteDataQuery(string siteUrl, bool recursive, ref string error) { 
      DataTable results = null; 

      using (SPSite site = new SPSite(siteUrl)) { 
       SPWeb web = site.OpenWeb(); 
       SPSiteDataQuery query = new SPSiteDataQuery(); 

       //query.Webs = "<Webs Scope='SiteCollection' />"; //query all web sites in site collection 
       if (recursive) 
        query.Webs = "<Webs Scope='Recursive' />"; 


       query.Lists = "<Lists ServerTemplate='101' Hidden='FALSE' MaxListsLimit='0' />"; 
       //query.Lists = "<Lists BaseType='1' MaxListsLimit='0' />"; //document library only (0=generic list, 1=doc library,3=discussino forum,4-vote or survey,5=issues list) 

       // *** can i provide a query here to filter for the documents i am interested in? 
       query.Query = string.Empty; 

       //query.Query = "<Where>" + 
       //     "<Gt>" + 
       //      "<FieldRef Name='File_x0020' />" + 
       //      "<Value Type='Number'>0</Value>" + 
       //     "</Gt>" + 
       //    "</Where>"; 

       query.ViewFields = _viewFields; 


       results = web.GetSiteData(query); 
      } 
      return results; 
     } 

Répondre

1

Je ne suis pas sur le bureau en ce moment à tester, mais essayez d'ajouter les champs suivants au résultat (afin que vous puissiez voir si elles créent un motif filtrables)

  • ContentType (cherchez l'odieux ceux, comme _hidden)
  • CreatedBy (Auteur devrait être système SHAREPOINT \ pour les fichiers non-utilisateurs)

Je vais essayer d'obtenir un test va si cela ne fonctionne pas, mais je ne pense pas qu'il y ait un gros éléphant dans la pièce qui dit ONLY_USER_CREATED en plus de ces propriétés. Si les "toutes sortes de documents non téléchargés par l'utilisateur" sont SEULEMENT les fichiers/forms/folder (AllItems.aspx, EditItem.aspx, etc), il peut probablement être travaillé avec quelques tests Contient.

+0

aussi, vous pouvez simplement exclure compte du système de créé par le champ à l'aide (égal Non). et aussi, comme mentionné, utilisez 0x0101. utilisez n'importe quel identifiant de type de contenu, pour interroger uniquement des types spécifiques de documents, à l'exclusion des éléments système tels que les pages maîtres). CT Hierarchy peut être vu ici: http: //msdn.microsoft.com/en-us/library/ms452896.aspx –

0

Essayez:

query.Query = @"<Where> 
     <Eq> 
     <FieldRef Name='Author' /> 
     <Value Type='User'>Bob Smith</Value> 
     </Eq> 
    </Where>"; 
+0

Je suis désolé peut-être que je n'ai pas expliqué correctement. Je voudrais obtenir des documents sharepoint que tout utilisateur peut avoir téléchargé pas les tonnes de documents cachés et que sharepoint utilise. Merci – David

+0

Ensuite, ne pas downvote, si vous n'avez pas expliqué correctement. –

+0

Ouais quoi de neuf avec le downvote pour ne pas expliquer la question correctement? – zincorp

1

Feature comme CAML query builder vous aidera à créer des requêtes valides.

+0

L'outil vous permettra-t-il de tester les requêtes sur les sites? (Je comprends qu'il aidera à développer la requête qui sera bonne mais j'essaye de construire la requête pour retourner les documents à travers les emplacements et seulement les documents qui ont été téléchargés/modifiés par n'importe quel utilisateur réel (pas sharepoint) Merci – David

+0

Probablement il ne permettra pas de tester les requêtes sur les sites, mais je ne sais pas avec certitude et ce n'est pas important si vous voulez tester votre requête - si votre requête est correcte pour 1 liste, elle sera correcte pour toutes les listes de le type. –

+0

raison et ce qui est arrivé au sujet de la downvote ci-dessus. – David

Questions connexes