Получение определенного идентификатора документа из sharepoint с помощью веб-сервисов в c # - PullRequest
2 голосов
/ 12 ноября 2010

У меня есть внешний сайт sharepoint, на котором мне нужно обновить метаданные большого набора файлов.Наилучший способ сделать это - использовать веб-сервис Lists и метод Lists.UpdateListItems.Однако для этого метода требуется идентификатор документа на сервере, информации у меня нет.У меня есть путь к файлу / имя файла документа.

Каков наилучший способ получения идентификатора документа, используя его имя / путь?

1 Ответ

1 голос
/ 13 ноября 2010

Если вам нужно использовать веб-службу, вам, вероятно, придется использовать SPQueries (CAML), чтобы получить нужные элементы.

Веб-служба Lists.asmx (расположена под http://sitecollection/_vti_bin/Lists.asmx) имеет функцию с именем GetListItem , которая принимает запрос в качестве параметра.

Я действительно не знаю внутреннюю работу вашего списка, но что-то вроде этого запроса должно делать это:

XmlDocument camlDocument = new XmlDocument();
XmlNode queryNode = camlDocument.CreateElement("Query");
queryNode.InnerXml = "<Where>"
+ "<Eq><FieldRef Name='FileName' /><Value Type='Text'>{Your Filename Here}</Value></Eq>"
+ "</Where>";

XmlNode viewFieldsNode = camlDocument.CreateElement("ViewFields");
viewFieldsNode.InnerXml = "<FieldRef Name='ID' />";

XmlNode queryOptionsNode = camlDocument.CreateElement("QueryOptions");

resultNode = _sharepointSite.ListsWS.GetListItems(listName, viewName,
queryNode, viewFieldsNode, rowLimit, queryOptionsNode, webID);

Объекты _sharepointSite и ListWS являются объектами веб-службы (они должны генерироваться автоматически для вас при добавлении веб-ссылки).

listName - это имя вашего списка всемейство сайтов

viewName - это имя представления, к которому вы хотите запросить (убедитесь, что у вас есть представление, отображающее все элементы, если вы хотите выполнить запрос по всему. Обычно я полагаюсь на скрытые представления, чтобы убедиться, чтопользователи не меняют их)

RowLimit - просто целое число.

У вас не должно возникнуть проблем с поиском идентификатора сети, с которой вы работаете, с помощью веб-службы.

XML, который вы получите обратно, не так прост и требует особого внимания.Дополнительная информация

Обратите внимание, что если вы имеете дело с вложенными папками, вам нужно добавить следующий код:

XmlNode queryOptionsNode = camlDocument.CreateElement("QueryOptions");
queryOptionsNode.InnerXml = "<ViewAttributes Scope=\"Recursive\" />";

Дополнительная информация о том, что я объяснил здесь .

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