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

Для коннектора 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. Пожалуйста, предложите минимально необходимое разрешение для чтения всех сайтов, всех дочерних сайтов, всех папок и файлов метаданных.

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

2 ответа

Решение

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

Обычные семейства сайтов имеют такой путь 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, которые находятся по другому пути.

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

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

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

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

Другие вопросы по тегам