2

有谁知道如何只添加一个自定义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 。

代码运行后,“Selected Hierarchy Fields”为TemaFolders。如果我在 GUI 中手动删除文件夹,一切都会按预期进行。

我尝试先使用mdnSettings.ClearConfiguredHierarchies();删除Folders。这会在“库设置 --> 元数据导航设置”中设置正确的字段,但在查看文档库时不显示元数据导航。如果我在“元数据导航设置”上单击“确定”,则会自动添加文件夹,并且Tema文件夹都显示在文档库中。再一次,如果我删除Folders,然后单击“确定”,一切都按我的意愿工作。

Folders的可视化表示,我想以编程方式将其删除。 不要

4

1 回答 1

3

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

<FolderHierarchy HideFoldersNode=\"True\" />

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

如何使用 SharePoint OM 添加/删除文件夹层次结构字段

以下方法演示了如何绕过此限制并允许设置MetadataNavigationSettings 类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);
}
于 2014-10-22T14:48:29.217 回答