使用C#通过Web服务获取SharePoint列表可见列名称

时间:2010-11-22 13:05:40

标签: c# web-services sharepoint sharepoint-2007

我想获取sharePoint网站中特定列表的所有可见列(隐藏== false),我试图查看SharePointWebService.Lists.GetList(listName),但找不到任何有用的内容,还检查了提供的方法列出WebService,也没什么新内容,

请建议。

4 个答案:

答案 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列表中获取所有或自定义列的解决方案。该代码在..上共享。

Custom Columns or ALL Columns

答案 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());