2009-04-06 1 views
3

私はかなり簡単なことをしようとしていますが、SharePoint APIでは不可能な仕事のようです。複雑なSharepointオブジェクトを処理するために、独自のオブジェクトモデルを作成する必要がありますか?

マイSharePointのデータ構造は次のようである:

-folder
---サブフォルダ
--------項目
--------項目B
--------項目C
--------項目D

あなたが期待する階層的にフォルダとサブフォルダにアクセスすることはできませんいくつかの奇妙な理由のために!リストを反復処理すると、階層構造を無視してすべての項目が返されます(リスト内のすべてが返されます)。さらに、コード内の構造を管理するためにアイテムがFolderかどうかを知ることはできません。

今私はSharePointオブジェクトモデルをより意味のあるものにするためにカスタムオブジェクトを作成しており、期待した階層構造のデータをグループ化しています。

public class Folder 
{ 
    public Folder Parent {get; set;} 
    public Folder Root {get; set;} 
    public IList<Item> Items {get; set;} 
} 

は誰でも似たような行っているか、どのようにSharePointでこの制限を管理しました:次のように私のSharePointアイテムをマッピングするために私が計画していますか?

私のカスタムオブジェクトモデルへのマッピングを開始した場合、何か教訓と注意が必要ですか?

EDIT:

私の最終的な解決策はlist.RootFolder.SubFoldersから始まるフォルダをループすぎでした。

var query = from SPList list in Utils.GetList(webRelativeUrl, listName) 
       from SPFolder folder in list.RootFolder.SubFolders 
       where folder.Name.ToLower() != "forms" 
       select new Folder //Custom Object 
       { 
        Name = folder.Name, 
        Children = (from SPFolder subFolder in folder.SubFolders //Further looping of sub folders          
           select new Folder 
           { 
            Name = subFolder.Name, 
            Items = (from SPFile file in subFolder.Files 
               select new Item 
               { 
               //Mapping code omitted 
               }           ).ToList() 
           } 
             {) 
       } 

    return query.ToList(); 

答えて

1

具体的な目的として、リストからSPList.RootFolderを取得してそこから作業すると、各フォルダのサブフォルダとアイテムを再帰的に走査するのは間違っていますか?

(*)ここではパフォーマンスの側面を無視して...

+0

このチップありがとう。私は最終的に私が欲しかったのと同じようにこのルートに行きました。私は使用したサンプルコードを表示するために投稿を編集しました。どうもありがとう –

5

いいえ、SPQueryクラスを使用して、1つのフォルダから項目をフェッチします。このarticleについて説明します。

0

私が行ったことは、アイテムの親が現在トラバースしていたリストであったかどうかをチェックしてそこから作業することでした。 SPQueryクラスも良い方法です。運が良かった!

1

いいえ、あなたは本当にSharePointオブジェクトモデルを難読化するために、独自のオブジェクトを作成しないでください。基本的に、SharePoint OMはオブジェクトの格納方法を反映しています。私。リストはファイルシステムのようなフォルダではなく、単一のデータベーステーブルに格納されます。

(かなり苦しい経験に基づいて)進む最善の方法は、あなたの歯を磨いて、SharePointが行うことと同じです。

この場合、ファイルシステムと同じ方法でフォルダを使用しないでください。リストアイテム/ファイルにメタデータを「タグ付け」してグループ化されたビューを使用する方が、フォルダ構造を使用するよりもユーザーに表示する方が簡単です。

多くの場合、フォルダ構造(ディスク上)はメタデータのサロゲートとして使用されます(例:BusinessGroups /マーケティングフォルダに入れる代わりにBusinessGroupのための「マーケティング」値でそれをタグ付けすることによって、ファイルの暗黙的なメタデータを与えグラム。)

SharePointのは、あなたが提案する方法で、「戦い」には大きすぎると扱いにくいです。流れに行こう。

0

オブジェクトモデルを変更する必要があると感じる場合は、Larsの回答(正しい答えです)に追加するには、拡張メソッドで問題を解決してください。私はいくつかの成功にそれをしてきました

関連する問題