私の質問を読んでくれてありがとう。
次の状況:
-カスタムコンテンツタイプに基づくSharePointリスト。コンテンツタイプは、いくつかの追加のプロパティ(url、targetpageなど)を備えたフォルダーにすぎません。-フォルダのコンテンツタイプとアイテムは、メニュー構造を表します。例えば:
ホーム| www.home.com | home.aspx
--->サブホーム| www.subhome.com | subhome.aspx
Impressum | www.impressum.com | impressum.aspx
この構造には、深さや、含めることができるアイテム/フォルダーの数に制限はありません。唯一の制限は、フォルダ内ではすべての名前が一意である必要があるということです。
パフォーマンスのために、すべてのフォルダーではなく、リスト内のすべてのアイテムを一度にフェッチする必要があります。私はそれをこのように管理しました:
SPQuery qry = new SPQuery();
qry.ViewAttributes = "Scope='RecursiveAll'";
その後、SPListItemsをNavigationEntryというオブジェクトに変換します。このオブジェクトには、SiteMapNodeと、パス、アイテム名、レベルカウントなどの他のプロパティが含まれています(例:Home / Subhome = level2、Impressum = level1)。
ここで、このすべてのアイテムを、path + itemnameをキーとして辞書に配置します(これは一意であり、アイテムがどこにあるかについてのヒントを提供するためです)。その後、linqを使用してこの辞書にアクセスし、最後に到達するまでレベルごとにアイテムレベルを取得します(レベルで使用可能なアイテムはありません)。ここで注意が必要な部分があります。この奇妙な構造をsharpointのナビゲーション構造に「変換」する必要があります。私はSharePointを初めて使用するため、これは少し混乱することがあります。
現時点では、レベルを調べて、SiteMapNodeCollectionsを使用してSiteMapNodesを作成し、次のレベルに移動して、親アイテムが既に存在するかどうかを確認し、子をその中に入れます。それは機能しますが、非常に複雑で、汚く、壊れやすいものです。
この問題を解決するための「簡単な」またはより構造化された方法はありますか?私はすでにコード化された解決策を探していませんが、これを解決する方法についての正しい方向へのヒントを探しています。ありがとうございました!:)