【问题标题】:SharingCapability SharePoint Online Site Collection c#SharingCapability SharePoint Online 网站集 c#
【发布时间】:2018-07-10 05:37:18
【问题描述】:

我想在配置我的网站集后设置 SharingCapability 属性。我使用了 PnP 的文档,你可以在这里找到 (External Sharing APIs for SharePoint and OneDrive for Business (Core.ExternalSharing))

当我将属性设置为“ExternalUserAndGuestSharing”时,什么也没有发生。该网站集仍无法与外部共享。

这是我的代码:

        public static void SetSharingCapability(string fullWebUrl, ClientContext context)
    {
        Tenant tenant = new Tenant(context);
        SiteProperties siteProp = tenant.GetSitePropertiesByUrl(fullWebUrl, true);
        context.Load(siteProp);
        context.ExecuteQuery();

        siteProp.SharingCapability = SharingCapabilities.ExternalUserAndGuestSharing;
        siteProp.Update();
        context.ExecuteQuery();
    }

您对解决“问题”有什么建议吗?

【问题讨论】:

    标签: c# sharepoint sharepoint-online


    【解决方案1】:

    很可能在应用设置 (SharingCapability) 后,操作本身尚未完成,更新设置的原因尚未反映:

    siteProp.SharingCapability = SharingCapabilities.ExternalUserAndGuestSharing;
    siteProp.Update();
    context.ExecuteQuery();  //<- even though the query is submitted to the server there is no guarantee at this moment the update operation is completed
    

    为了确保更新操作完成,您可以考虑以下解决方案:

    public static void SetSharingCapability(string fullWebUrl, ClientContext context)
    {
            Tenant tenant = new Tenant(context);
            SiteProperties siteProp = tenant.GetSitePropertiesByUrl(fullWebUrl, true);
    
            siteProp.SharingCapability = SharingCapabilities.Disabled;
            siteProp.Update();
            context.ExecuteQuery();
    
            siteProp = tenant.GetSitePropertiesByUrl(fullWebUrl, true);
            context.Load(siteProp, p => p.Status);
            context.ExecuteQuery();
            while (siteProp.Status == "Updating")
            {
                Thread.Sleep(TimeSpan.FromSeconds(1));
                siteProp = tenant.GetSitePropertiesByUrl(fullWebUrl, true);
                context.Load(siteProp);
                context.ExecuteQuery();
            }
     }
    

    【讨论】:

    • 好的,这很有趣。你知道context.ExecuteQuery();上不能保证更新完成的原因吗?但是感谢您的支持和解决方案!
    • 似乎一些针对租户站点集合的“长时间运行”操作(例如这个)是基于队列的,这意味着调用方法 context.ExecuteQuery();旨在将此操作放入队列中
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 2019-09-27
    • 2014-06-29
    • 2016-08-29
    • 2020-05-25
    • 1970-01-01
    • 2017-01-30
    • 2021-02-03
    相关资源
    最近更新 更多