Получите имена видимых столбцов списка SharePoint через веб-сервис, используя C # - PullRequest
5 голосов
/ 22 ноября 2010

Я хочу получить все видимые столбцы (Hidden == false) для определенного списка на сайте sharePoint, я попытался просмотреть SharePointWebService.Lists.GetList(listName), но не смог найти ничего полезного, также проверил методы, предоставляемые веб-сервисом Lists. а также ничего нового,

Пожалуйста, совет.

Ответы [ 4 ]

5 голосов
/ 22 ноября 2010

Вы можете использовать метод GetListAndView веб-службы Lists для получения схем для списка и представления.

Из документации, если вы оставите параметр viewName пустым, будет возвращено представление по умолчанию. Затем вы можете прочитать узел <ViewFields></ViewFields> для списка полей.

* Редактировать *

Оказывается, использование XPath для запроса возвращенного XML оказалось сложнее, чем я думал ... вот что я придумал:

XmlNode result = webService.GetListAndView("My Pictures", string.Empty);

XmlNamespaceManager nsmgr = new XmlNamespaceManager(result.OwnerDocument.NameTable);
nsmgr.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/");

string xpathQuery = "sp:View/sp:ViewFields/sp:FieldRef";
XmlNodeList nodes = result.SelectNodes(xpathQuery, nsmgr);

for (int i = 0; i < nodes.Count; i++)
{
    Console.WriteLine(nodes[i].Attributes["Name"].Value);
}

Похоже, у вас должен быть XmlNamespaceManager, иначе ваш запрос всегда не возвращает значений. Кое-что об указании пространства имен ... Вот хорошая ссылка .

1 голос
/ 22 марта 2011

Я использовал приведенный выше код, но после длительного поиска я нашел решение, чтобы получить все или пользовательские столбцы из списка sharepoint. Код для этого доступен на ..

Пользовательские столбцы или ВСЕ столбцы

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

Метод GetList () возвращает фрагмент CAML, который включает определения полей (столбцов) списка.Возможно, вы захотите попробовать выражение XPath :

XmlNode list = yourListService.GetList("yourListName");
XmlNodeList visibleColumns
    = list.SelectNodes("Fields/Field[not(@Hidden) or @Hidden='FALSE']");
0 голосов
/ 04 октября 2013

Решение довольно простое. Использование GetList() или аналогичных функций - неправильный путь.

Вместо этого используйте GetListContentTypesAsync(), чтобы получить Content ID, а затем получите конкретный ContentType, используя GetListContentTypeAsync(), он возвращает XML, который включает все видимые столбцы в списке sharepoint:

var Contents = await soapListClient.GetListContentTypesAsync(list.Title, "0x01"); // 0x01 is kind of a root element for sharepoint.
String ContentID = Contents.Body.GetListContentTypesResult.Descendants().FirstOrDefault().Attribute("ID").Value.ToString();
var ContentType = await soapListClient.GetListContentTypeAsync(list.Title, ContentID);
XElement xmll = XElement.Parse(ContentType.Body.GetListContentTypeResult.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...