代码之家  ›  专栏  ›  技术社区  ›  Rami Alshareef

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

  •  5
  • Rami Alshareef  · 技术社区  · 14 年前

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

    请指教。

    4 回复  |  直到 12 年前
        1
  •  5
  •   Kit Menke    14 年前

    你可以使用 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 .

        2
  •  1
  •   Frédéric Hamidi    14 年前

    GetList() 方法返回 CAML 包含列表的字段(列)定义的片段。你可能想试试 XPath expression :

    XmlNode list = yourListService.GetList("yourListName");
    XmlNodeList visibleColumns
        = list.SelectNodes("Fields/Field[not(@Hidden) or @Hidden='FALSE']");
    
        3
  •  1
  •   Pascal MARTIN    14 年前

    我使用了上面的代码,但是经过长时间的搜索,我找到了从sharepoint列表中获取所有列或自定义列的解决方案。其代码共享于。。

    Custom Columns or ALL Columns

        4
  •  0
  •   arulmr    11 年前

    解决办法很简单。使用 GetList() 或者类似的功能是错误的。

    而是使用 GetListContentTypesAsync() 获取内容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());