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

3
我正在开发一个网络应用程序,需要获取位于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总是为Nothing,并且我会得到一个错误:Object Reference not set to an instance of an object。
这段代码有效吗? 还有其他方法可以做到这一点吗? 我对Web服务和Web应用程序非常新手。 注意:我正在使用Visual Studio 2010和SharePoint 2010。
2个回答

1

我通过使用Web服务Lists.asmx找到了解决方案。

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

问题是我提供的URL错误。URL必须像这样:

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

我正在使用

http://mysharepointsite/_vti_bin/Lists.asmx

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

我不知道的另一件事是,我所称呼的文件夹实际上是 SharePoint 中的列表,因此在我的方法 getlistitems() 中,必须将列表名称作为参数。

如果有人遇到与我类似的问题,可以参考此链接以获得更多帮助:

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

以下是来自微软官方文档的代码:

http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems(v=office.12)

抱歉我的英语不太好...

感谢大家


1

从 Web 服务中列出文件夹和文档,您可以通过 "ows_ContentType" 属性来区分它们。在对象模型中,它们有一个 IsFolder 属性。

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

这个LINQ查询可以用于网络方法结果上,仅返回文件夹类型。即使您不理解LINQ调用,也很容易看到如何将其更改为适用于“文档”。

*相关说明:“GetFolderCollection”的Web服务是指Sharepoint文件夹,它意味着网站目录文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接