Навигация по метаданным в библиотеке документов, удаление папок из TreeView

Кто-нибудь знает, как добавить только один пользовательский MetadataNavigationHierarchy? В моем случае я хотел бы удалить Folders из 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 тема, которую я хочу отобразить.

После запуска кода «Выбранные поля иерархии» — это Тема и Папки. Если я удалю Папки вручную в графическом интерфейсе, все будет работать так, как должно.

Сначала я пытался использовать mdnSettings.ClearConfiguredHierarchies(); для удаления Папок. Это устанавливает правильные поля в «Настройки библиотеки -> Настройки навигации по метаданным», но не отображает навигацию по метаданным при просмотре библиотеки документов. Если я нажму «ОК» в разделе «Настройки навигации по метаданным», Папки будут добавлены автоматически, а в библиотеке документов отобразятся и Тема, и Папки. . И опять же, если я удалю Папки, то нажму "ОК", и все будет работать так, как я хочу.

Визуальное представление Папок, которые я хотел бы удалить программно. Не нужны папки здесь


person Grevling    schedule 22.10.2014    source источник


Ответы (1)


Параметры навигации по метаданным содержит FolderHierarchy иерархию для этой цели, атрибут HideFoldersNode определяет, следует ли удалить или добавить поле иерархии папок:

<FolderHierarchy HideFoldersNode=\"True\" />

Но по какой-то причине (!) nofollow">Класс MetadataNavigationSettings не предоставляет это свойство, оно объявлено как внутреннее свойство.

Как добавить/удалить поле иерархии папок с помощью SharePoint OM

Следующий метод демонстрирует, как обойти это ограничение и позволяет установить свойство HideFoldersNode класс MetadataNavigationSettings:

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);
}
person Vadim Gremyachev    schedule 22.10.2014
comment
Отлично, рад, что это помогло вам :) - person Vadim Gremyachev; 23.10.2014