SharePoint Получите все сайты и все дочерние сайты с помощью REST API SharePoint онлайн

Для коннектора SharePoint Online Мы использовали следующие шаги для получения всех сайтов:

Шаг 1. Создана надстройка в экземпляре SharePoint со следующим разрешением xml.

<AppPermissionRequests>
        <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl"/>
        <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Read"/>
</AppPermissionRequests>

Шаг 2. Используется ниже API для получения всех сайтов и дочерних сайтов.

https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site' &rowlimit=100

Проблема, с которой мы столкнулись -

  1. Вышеупомянутая конечная точка возвращает все sites, sub sites along with user’s personal site(One drive), а нам нужны только все sites and sub sites.
  2. Предложите минимально необходимое разрешение на чтение всего сайта, всех дочерних сайтов, всех папок и метаданных файлов

Мы ссылались на следующие ссылки:


person Darshan Patel    schedule 31.07.2018    source источник


Ответы (3)


Вы должны добавить фильтр пути в конечную точку.

Обычные семейства веб-сайтов имеют путь типа https://tenant.sharepoint.com, тогда как личные семейства веб-сайтов (One Drive) имеют путь типа https://tenant-my.sharepoint.com/personal/*.

Итак, измените свою конечную точку, как показано ниже:

https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site
Path:"https://<site_name>.sharepoint.com/*"'&rowlimit=500

Это вернет только семейства сайтов, начинающиеся с пути https://<site_name>.sharepoint.com, и исключит семейства сайтов One Drive, которые находятся на другом пути.

person Gautam Sheth    schedule 01.08.2018
comment
Спасибо, Гаутам <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl"/> Не могли бы вы поправить меня в части разрешений надстройки. Мне нужно установить только разрешение на чтение. пожалуйста, проверьте обновленный вопрос Спасибо - person Darshan Patel; 01.08.2018
comment
Если это только для целей отображения / поиска, тогда разрешения на чтение будет достаточно. Но если вам нужно больше обрабатывать его, вам потребуются более высокие разрешения. - person Gautam Sheth; 01.08.2018
comment
да, это только для / поиска. Я думаю, что следующих разрешений будет достаточно. <AppPermissionRequest Scope="http://sharepoint/search" Right="QueryAsUserIgnoreAppPrincipal"/> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Read"/> Пожалуйста, поправьте меня, если я ошибаюсь - person Darshan Patel; 01.08.2018

Путь от Джоэла Дсузы для справки.

1. Первый Ajax - получить заголовок корневого сайта и относительный URL.

$.ajax({
    url: _spPageContextInfo.siteAbsoluteUrl + "/_api/site/rootweb?$select=Title,ServerRelativeUrl",
    method: "GET",
    headers: {
        "Accept": "application/json; odata=verbose"
    },
    success: function(rootsite) {

    },
    error: function(rootsite) {},
    async: false
});

2. Второй AJAX - получить все дочерние сайты под корневым сайтом.

$.ajax({
    url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
    method: "GET",
    headers: {
        "Accept": "application/json; odata=verbose"
    },
    success: function(subsites) {
        $.each(subsites.d.results, function() {
            getSubSites(this.ServerRelativeUrl, this.Title);
        });

    },
    error: function(subsites) {},
    async: false
});

3. Это рекурсивная функция для просмотра дополнительных сайтов и поиска дополнительных сайтов.

function getSubSites(SubSiteUrl, SubSiteTitle) {
    console.log(SubSiteUrl);
    $.ajax({
        url: _spPageContextInfo.siteAbsoluteUrl + SubSiteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
        method: "GET",
        headers: {
            "Accept": "application/json; odata=verbose"
        },
        success: function(subsites) {

            $.each(subsites.d.results, function(index) {
                getSubSites(this.ServerRelativeUrl, this.Title);
            });
        },
        error: function(subsites) {},
        async: false
    });
}

Дополнительная информация: Получить все сайты и дополнительные сайты с помощью REST API

person LZ_MSFT    schedule 01.08.2018
comment
Я не хочу использовать для этого несколько API. По предложению @gautam я могу получить ожидаемый результат. Спасибо за ответ - person Darshan Patel; 01.08.2018

https://yoursharepointsite.com/_api/search/query?querytext='(contentclass:STS_Site) (contentclass:STS_Web)'&trimduplicates=false&rowlimit=5000&selectproperties='Title,Url,Path,ParentLink'"

Приведенный выше URL-адрес для отдыха должен предоставить вам все сайты и дочерние сайты, к которым у пользователя есть доступ. Возможно, вам придется обрезать дубликаты.

person Pradeep    schedule 01.02.2019