2011-05-27 1 views
2

Voici mon code:Rechercher un document par son nom à l'aide GetListItems SharePoint Lists.asmx

StringBuilder sb = new StringBuilder(); 
sb.AppendLine(@"<Where><Lt>"); 
sb.AppendLine(@"<FieldRef Name=""FileRef"" /><Value Type=""Text"">momo.txt</Value>"); 
sb.AppendLine(@"</Lt></Where>"); 

XmlDocument xmlDoc = new System.Xml.XmlDocument(); 

XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", ""); 
ndQuery.InnerXml = sb.ToString(); 

XmlNode resultsElement1 = listsProxy.GetListItems("Documents", "", ndQuery, 
                null, null, null, ""); 

Mais il retourne tous les documents une idée de ce que je fais mal ici?

Merci.

Répondre

3

Les champs FileRef contiennent l'URL relative au serveur, quelque chose comme "/Subsite/Lists/ListName/DocumentName". Si vous fournissez uniquement le nom de fichier (par exemple, mono.txt), ni Lt, ni Eq ne devrait fonctionner.

Pour résoudre le problème, vous pouvez essayer:

  1. Utilisez Eq avec l'URL du serveur par rapport au lieu du nom de fichier.
 
sb.AppendLine(@"<Where><Eq>"); 
sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/SubSite/Lists/Documents/momo.txt</Value>"); 
sb.AppendLine(@"</Eq></Where>"); 
  1. Ou vous pouvez utiliser l'opérateur <Contains> (CAML n'a pas < EndsWith> opérateur).
 
sb.AppendLine(@"<Where><Contains>"); 
sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/momo.txt</Value>"); 
sb.AppendLine(@"</Contains></Where>"); 

en boucle ensuite sur les résultats retournés, et supprimer des éléments qui ne se termine pas avec « /mono.txt ».

En outre, si vous vous souciez du nom de document sans extension, vous pouvez vous BaseName au lieu de FileRef champ.

4

Actuellement, votre requête porte sur des éléments dont la valeur du nom est inférieure à momo.text plutôt que d'être équivalente. Par conséquent, remplacez Lt par Eq.

Questions connexes