3

SharePoint上にあるフォルダーとサブフォルダーを取得し、階層を表すTreeViewに配置する必要があるWebアプリケーションを開発しています。私のアプリケーションは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:VisualStudio2010とSharePoint2010を使用しています

4

2 に答える 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

違いはlists.asmx、サブサイトでWebサービスを呼び出すことです。

私が知らなかったもう1つのことは、フォルダーと呼んでいたのは実際にはSharePoint内のリストであるため、imメソッドgetlistitems()はリスト名をパラメーターとして配置する必要があるということです。

とにかくさらなる助けのために、誰かが私がこのリンクをたどったのと同じ問題を抱えているなら:

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

悪い英語でごめんなさい....

みんなありがとう

于 2012-06-22T12:26:41.467 に答える
1

ListItemsはFoldersとDocumentsの両方であり、Webサービスから「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呼び出しを理解していなくても、これを「ドキュメント」で機能するように変更する方法は非常に簡単にわかります。

*関連する注意事項「GetFolderCollection」のWebサービスは、Sharepointフォルダーについて話します。これは、Webサイトのディレクトリフォルダーを意味します。

于 2012-07-16T16:01:20.070 に答える