文档库上的元数据导航,从TreeView中删除“文件夹”

时间:2014-10-22 10:13:28

标签: c# sharepoint sharepoint-2013 sharepointdocumentlibrary

有谁知道如何只添加一个自定义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 文件夹 。再说一次,如果我删除文件夹,然后点击“确定”,一切都按照我的意愿运行。

文件夹的可视化表示,我想以编程方式删除它。 Do not want "Folders" here

1 个答案:

答案 0 :(得分:3)

为此目的,

MetadataNavigationSettings包含FolderHierarchy层次结构,属性HideFoldersNode定义是删除还是添加文件夹层次结构字段:

<FolderHierarchy HideFoldersNode=\"True\" />

但由于某种原因(!)MetadataNavigationSettings class没有公开该属性,它被声明为内部属性。

如何使用SharePoint OM

添加/删除文件夹层次结构字段

以下方法演示如何绕过此限制,并允许设置MetadataNavigationSettings classHideFoldersNode属性:

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);
}