Вопрос

Я чувствую, что очень близок к этому.

Я знаю, как получить корневую коллекцию сайтов:

Как получить корневое семейство сайтов из 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

Я считаю, что ваш вопрос очень похож на этот.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top