спасибо, что прочитали мой вопрос.
Следующая ситуация:
-Список 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, перехожу на следующий уровень, проверяю, есть ли уже родительский элемент, помещаю в него дочерний элемент и так далее. Это работает, но очень сложно, грязно и хрупко.
Есть ли какой-нибудь "простой" или более структурированный способ решения этой проблемы? Я не ищу уже закодированное решение, но намекаю в правильном направлении, как решить эту проблему. Спасибо! :)