Sharepoint c # извлекает весь сайт и дочерний сайт

#c# #sharepoint

#c# #sharepoint

Вопрос:

Я пытаюсь получить весь сайт и дочерний сайт в sharepoint, но мне отказано в доступе.

Я читал об использовании свойства GetSubwebsForCurrentUser(), но получаю то же сообщение.

Мой код следующий

             foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications)
            {                    
                foreach (SPSite siteCollection in webApp.Sites)
                {
                    foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser())
                    {
                       dropDownSite.Items.Add(web.Url);
                    }


                }
            }
  

пожалуйста, мне нужна помощь! Спасибо!

Комментарии:

1. Откуда выполняется этот код? Веб-часть? Задание таймера? Что-то еще?

2. Просто предупреждаю, теперь есть сайт SharePoint stack exchange . Он в бета-версии, но вы должны опубликовать его там (или модератор мог бы перенести этот вопрос туда). Это поможет сайту получить больше возможностей 🙂

3. Вы ищете пользовательские списки сайтов на основе контекста? Если да, то делаете ли вы это просто для заполнения выпадающего списка? Если это так, я бы предложил portalsitemapprovider. Кроме того, ваш код оставит каждый из этих веб-сайтов в недоступном состоянии, что приведет к огромной утечке памяти при каждом запуске

Ответ №1:

Вероятно, вам потребуется вызвать SPSecurity.RunWithElevatedPrivileges(delegate())

При желании вы могли бы создать встроенный делегат, что-то вроде:

 SPSecurity.RunWithElevatedPrivileges(delegate() 
{
    foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications)
    {                    
        foreach (SPSite siteCollection in webApp.Sites)
        {
            foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser())
            {
                 dropDownSite.Items.Add(web.Url);
            }
        }
    }
});
  

Ответ №2:

Просто чтобы убедиться, выполняется ли этот код на сервере, на котором размещен портал Sharepoint? Какую версию Sharepoint вы используете?

Кроме того, имеет ли смысл использовать веб-сервисы, предоставляемые Sharepoint? http://msdn.microsoft.com/en-us/library/aa979690 (v=office.12).aspx

Если вы запускаете этот код на том же сервере, что и SP, то убедитесь, что ваши учетные данные имеют доступ к SP. Если вы вызываете это с веб-сайта, также убедитесь, что вы не работаете как «Анонимный».

В целом, я думаю, что использование веб-сервисов — это самый простой способ заставить его работать. Но убедитесь, что у вас есть отправляемые правильные разрешения и что у этого пользователя есть доступ (в конфигурациях SP) к этим данным.

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

Ответ №3:

Если вы используете SPSite.Появляется сообщение об отказе в доступе ко всем веб-сайтам! Это утверждение верно только до тех пор, пока текущий пользователь является администратором семейства сайтов

Таким образом, для всех пользователей эта функция получает все сайты и подсайты.

     public static IEnumerable<SPWeb> DescendantSites(this SPWeb input)
    {
        foreach (SPWeb web in input.GetSubwebsForCurrentUser())
        {
            yield return web;
            foreach (var subnode in web.DescendantSites())
                yield return subnode;
        }
    }