我想获取sharePoint网站中特定列表的所有可见列(隐藏== false),我试图查看SharePointWebService.Lists.GetList(listName)
,但找不到任何有用的内容,还检查了提供的方法列出WebService,也没什么新内容,
请建议。
答案 0 :(得分:5)
您可以使用列表Web服务的GetListAndView方法获取列表和视图的模式。
从文档中,如果将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
否则您的查询始终不返回任何值。关于指定命名空间的事情......以下是a good reference。
答案 1 :(得分:1)
GetList()方法返回一个CAML
片段,其中包含列表的字段(列)定义。您可能想尝试XPath expression:
XmlNode list = yourListService.GetList("yourListName");
XmlNodeList visibleColumns
= list.SelectNodes("Fields/Field[not(@Hidden) or @Hidden='FALSE']");
答案 2 :(得分:1)
我使用了上面的代码,但经过长时间的搜索后,我找到了从sharepoint列表中获取所有或自定义列的解决方案。该代码在..上共享。
答案 3 :(得分:0)
解决方案非常简单。使用GetList()
或类似功能是错误的方法。
而是使用GetListContentTypesAsync()
获取Content ID,然后使用ContentType
获取特定的GetListContentTypeAsync()
,它会返回包含sharepoint列表中所有可见列的XML:
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());