我正在开发一个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
答案 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作为参数。
无论如何,如果有任何人遇到与我关注此链接相同的问题:
代码来自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文件夹,它意味着网站目录文件夹。