我们需要更新网站的全局和当前导航设置。 以下是我们的代码
var publishingWeb = PublishingWeb.GetPublishingWeb(this.CC, subWeb);
// WebNavigationSettings
var webNavigationSettings = new WebNavigationSettings(this.CC, subWeb);
webNavigationSettings.GlobalNavigation.Source = StandardNavigationSource.PortalProvider;
webNavigationSettings.CurrentNavigation.Source = StandardNavigationSource.PortalProvider;
// CSOM don't have: publishingWeb.Navigation.GlobalIncludeSubSites.
subWeb.AllProperties["__GlobalIncludeSubSites"] = "True"; //TODO: Verify why it is not working.
subWeb.AllProperties["__GlobalIncludePages"] = "True"; //TODO: Verify why it is not working.
subWeb.Update();
webNavigationSettings.Update(tSession);
CC.Load(subWeb, WEB_INCLUDES);
// Apply the load
CC.ExecuteQuery();
由于我们使用CSOM,我们没有
publishingWeb.Navigation.GlobalIncludeSubSites
。 所以我们尝试使用AllProperties设置GlobalIncludeSubSites和GlobalIncludePages。
但这些属性没有设定。 有没有办法解决这个问题。 我完成了文章http://discoveringsharepoint.wordpress.com/2013/03/19/programmatically-set-navigation-settings-in-sharepoint-2013/ 但它使用命名空间:Microsoft.SharePoint.Publishing.Navigation
但我们的命名空间是:Microsoft.SharePoint.Client.Publishing.Navigation 正如我们从客户端服务器对象模型做的那样。 有什么方法可以解决这个问题吗? 感谢
答案 0 :(得分:4)
在SharePoint 2013中,CSOM API中引入了新的Microsoft.SharePoint.Client.Publishing和Microsoft.SharePoint.Client.Publishing.Navigation命名空间。但遗憾的是不支持使用WebNavigationSettings class修改导航设置,因为属性是以只读公开的。
您可以为此目的使用以下方法。 ClientPortalNavigation.cs代表SSOM PortalNavigation Class的CSOM对应方。
以下示例演示了如何利用该类并更新导航设置:
using (var ctx = new ClientContext(webUri))
{
var navigation = new ClientPortalNavigation(ctx.Web);
navigation.CurrentIncludePages = true;
navigation.GlobalIncludePages = false;
navigation.SaveChanges();
}
ClientPortalNavigation.cs与SharePoint 2010/2013兼容 CSOM API。