有谁知道如何只添加一个自定义MetadataNavigationHierarchy
?
在我的情况下,我想从TreeView中删除文件夹,因此我的自定义MetadataNavigationHierarchy
是唯一显示的文件。
我目前正在开发一个控制台应用程序,该应用程序在包含现有文件夹和文件的现有SharePoint 2013文档库上设置元数据导航。
一切正常,但我想从导航中删除文件夹。
工作代码我用来添加自定义值 Tema :
MetadataNavigationSettings mdnSettings = MetadataNavigationSettings.GetMetadataNavigationSettings(list);
if (taxonomyField != null)
{
MetadataNavigationHierarchy hierarchyToAdd = new MetadataNavigationHierarchy(taxonomyField);
if (null == mdnSettings.FindConfiguredHierarchy(taxonomyField.TermSetId))
{
mdnSettings.AddConfiguredHierarchy(hierarchyToAdd);
}
}
else
{
Helper.WriteError("Could not find Tema taxonomy field");
}
MetadataNavigationSettings.SetMetadataNavigationSettings(list, mdnSettings, true);
list.RootFolder.Update();
taxonomyField
是我要展示的TermSet
Tema 。
代码运行后,“选定的层次结构字段”为 Tema 和文件夹。如果我在GUI中手动删除文件夹,一切都会像预期的那样工作。
我首先尝试使用mdnSettings.ClearConfiguredHierarchies();
,删除文件夹。这会在“库设置 - >元数据导航设置”中设置正确的字段,但在查看文档库时不显示元数据导航。如果我在“元数据导航设置”中点击“确定”,则会自动添加文件夹,并且文档库中会显示 Tema 和文件夹 。再说一次,如果我删除文件夹,然后点击“确定”,一切都按照我的意愿运行。
文件夹的可视化表示,我想以编程方式删除它。
答案 0 :(得分:3)
MetadataNavigationSettings包含FolderHierarchy
层次结构,属性HideFoldersNode
定义是删除还是添加文件夹层次结构字段:
<FolderHierarchy HideFoldersNode=\"True\" />
但由于某种原因(!)MetadataNavigationSettings class没有公开该属性,它被声明为内部属性。
以下方法演示如何绕过此限制,并允许设置MetadataNavigationSettings class的HideFoldersNode
属性:
public class MetadataNavigationSettingsHelper
{
public static void SetHideFoldersNode(MetadataNavigationSettings settings,bool value)
{
var t = settings.GetType();
t.InvokeMember("HideFoldersNode", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.SetProperty | BindingFlags.Instance, null, settings, new object[] { value });
}
}
示例强>
以下示例演示了如何将分类法字段添加到导航层次结构和删除 Folder
字段:
private static void AddTaxonomyFieldToHierarchy(SPList list, TaxonomyField taxonomyField)
{
MetadataNavigationSettings mdnSettings = MetadataNavigationSettings.GetMetadataNavigationSettings(list);
MetadataNavigationSettingsHelper.SetHideFoldersNode(mdnSettings,true); //remove Folder
MetadataNavigationHierarchy hierarchyToAdd = new MetadataNavigationHierarchy(taxonomyField);
if (null == mdnSettings.FindConfiguredHierarchy(taxonomyField.Id))
{
mdnSettings.AddConfiguredHierarchy(hierarchyToAdd);
}
MetadataNavigationSettings.SetMetadataNavigationSettings(list, mdnSettings, true);
}