2

对于 SharePoint Online 连接器,我们使用以下步骤来获取所有网站:

步骤 1:使用以下权限 xml 在 SharePoint 实例上创建加载项

<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. 以上端点返回 all sites, sub sites along with user’s personal site(One drive),而我们sites and sub sites 只需要 all 。
  2. 请建议读取所有站点、所有子站点、所有文件夹和文件元数据所需的最低权限

我们参考了以下链接:

4

3 回答 3

3

Joel Dsouza 的方法供您参考。

1.第一个ajax是获取Root Site Title和Relative 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 获取所有站点和子站点

于 2018-08-01T02:51:33.727 回答
2

您应该在端点中添加一个路径过滤器。

普通网站集的路径类似于https://tenant.sharepoint.com,而个人(一个驱动器)网站集的路径类似于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 网站集。

于 2018-08-01T04:48:26.393 回答
0
https://yoursharepointsite.com/_api/search/query?querytext='(contentclass:STS_Site) (contentclass:STS_Web)'&trimduplicates=false&rowlimit=5000&selectproperties='Title,Url,Path,ParentLink'"

上面的 rest url 应该为您提供用户有权访问的所有站点和子站点。您可能需要修剪重复项。

于 2019-02-01T16:35:52.373 回答