2

custom を 1 つだけ追加する方法を知っている人はいますMetadataNavigationHierarchyか? 私の場合、 TreeView からFoldersを削除したいので、私のカスタム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 テーマです。

コードの実行後、「選択された階層フィールド」はTemaFoldersです。GUI でフォルダーを手動で削除すると、すべてが想定どおりに機能します。

FoldersmdnSettings.ClearConfiguredHierarchies();を削除するために、最初に使用しようとしました。これにより、[ライブラリ設定 --> メタデータ ナビゲーション設定] で正しいフィールドが設定されますが、ドキュメント ライブラリを表示するときにメタデータ ナビゲーションが表示されません。「メタデータ ナビゲーション設定」で「OK」をクリックすると、フォルダが自動的に追加され、ドキュメント ライブラリにテーマとフォルダの両方が表示さますまた、 Foldersを削除すると、[OK] をクリックすると、すべてが思い通りに機能します。

プログラムで削除したい Foldersの視覚的表現。欲しくない

4

1 に答える 1

3

MetadataNavigationSettingsFolderHierarchyには、その目的のための階層が含まれています。属性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 に答える