Получить все списки SPL для семейства веб-сайтов.
-
09-12-2019 - |
Вопрос
Я чувствую, что очень близок к этому.
Я знаю, как получить корневую коллекцию сайтов:
Как получить корневое семейство сайтов из SPContext.Current?
я возился с SPSiteDataQuery
, но, похоже, он предназначен для получения элементов списка, а не информации о родительском списке.
Мне нужно получить все SPList
для всего Сайта.Мне нужно получить имя, идентификатор и родительский веб-сайт, чтобы пользователь мог выбрать список, и я мог бы получить к нему прямой доступ в будущем с помощью SPList:Guid
и ParentWeb:Guid
Кажется, легко сделать это рекурсивно, перебирая SPContext.Current.Web.Site.WebApplication.Sites
и получение AllWebs
как показано здесь:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistcollection.aspx
Это лучший способ сделать это?Кажется, это совершенно неэффективно.
Решение
Не существует встроенного способа получить все списки в семействе веб-сайтов.
Ваш метод циклического обхода AllWebs и получения коллекции списков для каждого из них — единственный способ, но он неэффективен, поэтому вы, вероятно, захотите создать некоторый кеш или поддерживать свой собственный список и обновлять его с помощью Получатель событий каждый раз при создании/удалении списка или при удалении сайта.
Но для того, чтобы ваш пользовательский интерфейс представлял пользователям список всех списков, ваше семейство сайтов должно быть очень маленьким, и в этом случае вы можете просто выполнить цикл.
Другие советы
Посмотрите здесь:SPSiteDataQuery против.Рекурсивная производительность SPWeb.Lists
Я считаю, что ваш вопрос очень похож на этот.