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
Проблема, с которой мы сталкиваемся -
- Выше конечной точки возвращается все
sites, sub sites along with user’s personal site(One drive)
пока нам нужно всеsites and sub sites
только. - Пожалуйста, предложите минимально необходимое разрешение для чтения всех сайтов, всех дочерних сайтов, всех папок и файлов метаданных.
Мы ссылались на следующие ссылки:
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 дает вам все сайты и дочерние сайты, к которым у пользователя есть доступ. Возможно, вам придется обрезать дубликаты.