Пользовательский навигационный провайдер в sharepoint - как сгенерировать элементы навигации из списка? - PullRequest
1 голос
/ 04 ноября 2011

спасибо, что прочитали мой вопрос.

Следующая ситуация:
-Список sharepoint, основанный на пользовательском типе контента. Тип содержимого - это не более чем папка с некоторыми дополнительными свойствами (например, url, targetpage). -Типы содержимого папки и элементы представляют структуру меню. Например:

Главная | www.home.com | home.aspx
---> Поддом | www.subhome.com | subhome.aspx
Импрессум | www.impressum.com | impressionum.aspx

Эта структура не имеет ограничений по глубине и количеству элементов / папок. Единственное ограничение заключается в том, что внутри папки каждое имя должно быть уникальным.

Из-за производительности мне нужно получать все элементы списка одновременно, а не для каждой папки. Мне это удалось:

            SPQuery qry = new SPQuery();
            qry.ViewAttributes = "Scope='RecursiveAll'";

После этого я перевожу SPListItems в объект с именем NavigationEntry. Этот объект содержит SiteMapNode и некоторые другие свойства, такие как путь, имя элемента и количество уровней (например, Home / Subhome = level2, Impressum = level1).

Теперь я помещаю все эти элементы в словарь с ключом path + itemname (потому что он уникален и дает подсказку, где находится элемент). После этого я получаю доступ к этому словарю с помощью linq и беру уровень предметов за уровень, пока не достигну конца (на уровне нет предметов). Теперь самое сложное. Я должен "преобразовать" эту странную структуру в структуру навигации для Sharpoint. Потому что я новичок в sharepoint, это иногда немного сбивает с толку.

В данный момент я прохожу уровни и создаю SiteMapNodes с SiteMapNodeCollections, перехожу на следующий уровень, проверяю, есть ли уже родительский элемент, помещаю в него дочерний элемент и так далее. Это работает, но очень сложно, грязно и хрупко.

Есть ли какой-нибудь "простой" или более структурированный способ решения этой проблемы? Я не ищу уже закодированное решение, но намекаю в правильном направлении, как решить эту проблему. Спасибо! :)

1 Ответ

0 голосов
/ 06 ноября 2011

Если вам нужно только дерево навигации, я могу порекомендовать JSTree

Однажды я использовал его для многоуровневого делегата Quichnav.В то время как я создал интерфейс управления для добавления элементов, вы можете просто создать XML или Json в событиях изменения списка.Или, чтобы быть более навороченным, делайте запрос при каждом расширении узла.

Надеюсь, это поможет

Lars

...