使用Web Service获取SharePoint中的所有文件夹和子文件夹

时间:2012-06-20 13:29:06

标签: web-services sharepoint treeview directory

我正在开发一个Web应用程序,它需要获取SharePoint上的文件夹和子文件夹,并放在表示层次结构的TreeView上。 我的应用程序没有在与SharePoint相同的服务器上运行,因此我认为最好的方法是通过Web服务。

因此,我将SiteData.asmx的Web引用添加到我的项目中,并找到以下代码:

 Private Sub GetSiteData()
    Dim RootFolder As String = "http://mySharepointServer/site/doc_site"
    Dim DirWSSP As String = "http://mySharePointServer/_vti_bin/SiteData.asmx"


    'Definitions of TreeView
    Dim tree As TreeView
    Dim raiz As TreeNode
    Dim no As TreeNode

    tree = Page.FindControl("trvFolder")
    raiz = New TreeNode(RootFolder)
    tree.Nodes.Clear()
    tree.Nodes.Add(raiz)

    ' Definitions of web service
    Dim service As New SP_SiteData.SiteData

    service.Credentials = New System.Net.NetworkCredential("userID", "password", "domain")


    Dim enArray() As SP_SiteData._sFPUrl

    service.EnumerateFolder(RootFolder, enArray)

    Dim en As SP_SiteData._sFPUrl
    For Each en In enArray
        If en.IsFolder Then
            no = New TreeNode(en.Url)
            raiz.ChildNodes.Add(no)
        End If
    Next

End Sub

我从msdn上的论坛复制了这段代码,但是没有用,service.EnumerateFolder总是返回一个空数组,也就是说,enArray总是没有,我得到一个错误:对象引用未设置为对象的实例。

此代码有效吗? 还有另一种方法吗? 我是Web服务和Web应用程序的新手。 OBS:我正在使用Visual Studio 2010和SharePoint 2010

2 个答案:

答案 0 :(得分:1)

我使用网络服务Lists.asmx找到了解决方案。

问题是我在web开发方面非常新手,我对Sharepoint一无所知,所以我不知道如何使用Web服务。

问题是我提供了错误的网址。网址必须如下:

http://mysharepointsite/site/subsite_or_list/_vti_bin/Lists.asmx

我正在使用

http://mysharepointsite/_vti_bin/Lists.asmx

不同之处在于我在子网站上调用了网络服务lists.asmx

我不知道的另一件事是,我所谓的文件夹实际上是sharepoint中的列表,因此im方法getlistitems()必须将列表Name作为参数。

无论如何,如果有任何人遇到与我关注此链接相同的问题:

http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/99f3e9d0-6ecf-4b1d-8b68-d108f36aaacc

代码来自msd: http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems(v=office.12)

抱歉英语不好......

谢谢大家

答案 1 :(得分:1)

ListItems文件夹和文档,从webservice你可以告诉不同的“ows_ContentType”属性。在对象模型中,它们具有IsFolder属性。

IEnumerable<XElement> result = from child in root.Descendants(xns + "row")
    where child.Attribute("ows_ContentType").Value == "Folder"
    select child;

此LINQ查询可用于Web方法结果,仅返回文件夹类型。即使您不理解LINQ调用,也很容易看到如何将其更改为“Document”。

*相关说明“GetFolderCollection”的Web服务正在谈论Sharepoint文件夹,它意味着网站目录文件夹。