【问题标题】:Configure per-location view settings programmatically以编程方式配置每个位置的视图设置
【发布时间】:2016-06-15 14:09:11
【问题描述】:
我的 SharePoint 网站上有一项功能,可在激活该功能时将视图添加到列表中。
在 SharePoint 的列表设置菜单上,我们有一个链接显示“按位置显示设置”(或英文安装中的“按位置查看设置”)。当我激活我的功能时,我的所有视图都在“此位置可用视图”的右栏中。但是对于某些视图,我希望它们位于左栏中,“视图隐藏在此位置”。
我尝试将我关注的视图的参数“隐藏”设置为 true,但这导致我的视图完全从每个位置视图设置页面中消失。
是否可以管理在 C# 或 Powershell 中的特定位置显示/隐藏哪些视图?
【问题讨论】:
标签:
c#
powershell
sharepoint
sharepoint-2010
sharepoint-list
【解决方案1】:
此实例中的位置是指列表中的一个文件夹(如果不存在其他文件夹,则为根文件夹)。
要访问在特定文件夹中显示或隐藏哪些视图,请访问该文件夹的 client_MOSS_MetadataNavigationSettings 属性。
该属性将是一个包含 <ViewSettings> 元素的 XML 字符串,您将在其中看到 <View> 元素,用于任何已配置特殊每个位置设置的视图。如果视图设置为从该位置隐藏,<View> 节点的 Index 属性将是负数的字符串表示形式。
默认情况下,所有文件夹都会显示一个全新的视图,但<ViewSettings> 集合中不会有条目;如果你想隐藏它,你需要创建一个新的 XML 元素并将其插入到属性中。
这是 Powershell 中从根文件夹隐藏视图的示例:
$viewName = "Secret View"
$web = get-spweb http://example-site
$list = $web.Lists["Example List"]
$viewToHide = $list.Views | where-object { $_.Title -like $viewName }
$folder = $list.RootFolder
$settings = [xml]$folder.GetProperty("client_MOSS_MetadataNavigationSettings")
$view = $settings.MetadataNavigationSettings.ViewSettings.View | where-object { $_.ViewId -like $viewToHide.Id }
if($view -ne $null){
$view.Index = "-1"
}else{
$view = $settings.CreateElement("View")
$settings.MetadataNavigationSettings.ViewSettings.AppendChild($view)
$view.setAttribute("ViewId",$viewToHide.Id)
$view.setAttribute("CachedName",$viewToHide.Title)
$view.setAttribute("Index","-1")
$view.setAttribute("CachedUrl",$viewToHide.Url)
}
$folder.SetProperty("client_MOSS_MetadataNavigationSettings",$settings.OuterXml)
$folder.Update()