Поиск документа по его имени с использованием SharePoint Lists.asmx GetListItems - PullRequest
2 голосов
/ 27 мая 2011

Вот мой код:

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, "");

Но он возвращает все документы, любая идея, что я здесь не так делаю?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 27 мая 2011

В настоящее время ваш запрос относится к элементам, у которых значение имени меньше momo.text, а не равно ему.Поэтому измените Lt на Eq.

3 голосов
/ 28 мая 2011

Поля FileRef содержат относящийся к серверу URL-адрес документа, что-то вроде этого "/Subsite/Lists/ListName/DocumentName".Если вы указываете только имя файла (например, mono.txt), не должны работать ни Lt, ни Eq.

Чтобы устранить проблему, вы можете попробовать:

  1. ИспользоватьEq с относительным сервером URL вместо имени файла.
sb.AppendLine(@"<Where><Eq>");  
sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/SubSite/Lists/Documents/momo.txt</Value>");  
sb.AppendLine(@"</Eq></Where>");
  1. Или вы можете использовать оператор <Contains> (в CAML нет оператора <<code>EndsWith>).
sb.AppendLine(@"<Where><Contains>");  
sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/momo.txt</Value>");  
sb.AppendLine(@"</Contains></Where>");

Затем зацикливание возвращаемых результатов и удаление элементов, которые не заканчиваются на «/mono.txt».

Кроме того, если вам важно имя документа без расширения,вы могли бы вы BaseName вместо FileRef поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...