次の方法で共有


方法: サーバー エクスプローラーにカスタム SharePoint ノードを追加する

サーバー エクスプローラー[SharePoint 接続] ノードにはカスタム ノードを追加できます。 既定ではサーバー エクスプローラーに表示されない SharePoint サイトのコンポーネントを別途表示する必要がある場合に便利な方法です。 詳細については、「サーバー エクスプローラーの [SharePoint 接続] ノードの拡張」を参照してください。

カスタム ノードを追加するには、まず、新しいノードを定義するクラスを作成します。 次に、そのノードを既存のノードの子として追加する拡張機能を作成します。

新しいノードを定義するには

  1. クラス ライブラリ プロジェクトを作成します。

  2. 次のアセンブリへの参照を追加します。

    • Microsoft.VisualStudio.SharePoint

    • Microsoft.VisualStudio.SharePoint.Explorer.Extensions

    • System.ComponentModel.Composition

    • System.Drawing

  3. IExplorerNodeTypeProvider インターフェイスを実装するクラスを作成します。

  4. クラスに次の属性を追加します。

  5. IExplorerNodeTypeProvider.InitializeType メソッドの実装では、typeDefinition パラメーターのメンバーを使用して、新しいノードの動作を構成します。 このパラメーターは、IExplorerNodeEvents インターフェイスに定義されているイベントにアクセスできるようにする IExplorerNodeTypeDefinition オブジェクトです。

    新しいノードを定義する方法を次のコード例に示します。 この例は、プロジェクトに CustomChildNodeIcon という名前のアイコンが埋め込みリソースとして含まれていることを前提としています。

    <Export(GetType(IExplorerNodeTypeProvider))> _
    <ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)> _
    Friend Class ExampleNodeTypeProvider
        Implements IExplorerNodeTypeProvider
        Friend Const NodeTypeId As String = "Contoso.ServerExplorerNodeExample"
    
        Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _
            Implements IExplorerNodeTypeProvider.InitializeType
            typeDefinition.DefaultIcon = _
                My.Resources.CustomChildNodeIcon.ToBitmap()
            typeDefinition.IsAlwaysLeaf = True
        End Sub
    End Class
    
    [Export(typeof(IExplorerNodeTypeProvider))]
    [ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)]
    internal class ExampleNodeTypeProvider : IExplorerNodeTypeProvider
    {
        internal const string NodeTypeId = "Contoso.ServerExplorerNodeExample";
    
        public void InitializeType(IExplorerNodeTypeDefinition typeDefinition)
        {
            typeDefinition.DefaultIcon =
                Properties.Resources.CustomChildNodeIcon.ToBitmap();
            typeDefinition.IsAlwaysLeaf = true;
        }
    }
    

既存のノードの子として新しいノードを追加するには

  1. ノード定義と同じプロジェクトで、IExplorerNodeTypeExtension インターフェイスを実装するクラスを作成します。

  2. クラスに System.ComponentModel.Composition.ExportAttribute 属性を追加します。 この属性によって、Visual Studio で IExplorerNodeTypeExtension の実装を検出し、読み込むことができます。 この属性のコンストラクターに IExplorerNodeTypeExtension 型を渡します。

  3. クラスに ExplorerNodeTypeAttribute 属性を追加します。 ノードの拡張機能では、拡張するノードの型の文字列識別子をこの属性によって指定します。

    Visual Studio に用意されている組み込みのノード型を指定するには、この属性のコンストラクターに次のいずれかの列挙値を渡します。

    • ExplorerNodeTypes: これらの値を使用して、サーバー エクスプローラーのサイト接続ノード (サイトの URL を表示するノード)、サイト ノード、またはその他のすべての親ノードを指定します。

    • ExtensionNodeTypes: これらの値を使用して、リスト、フィールド、コンテンツの種類を表すノードなど、SharePoint サイトの個々のコンポーネントを表す組み込みのノードの 1 つを指定します。

  4. Initialize メソッドの実装で、IExplorerNodeType パラメーターの NodeChildrenRequested イベントを処理します。

  5. NodeChildrenRequested イベント ハンドラーで、イベント引数パラメーターで公開されている Node オブジェクトの子ノード コレクションに新しいノードを追加します。

    次のコード例は、サーバー エクスプローラーで SharePoint サイト ノードの子として新しいノードを追加する方法を示します。

    <Export(GetType(IExplorerNodeTypeExtension))> _
    <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
    Friend Class SiteNodeExtension
        Implements IExplorerNodeTypeExtension
    
        Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _
            Implements IExplorerNodeTypeExtension.Initialize
            AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested
        End Sub
    
        Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs)
            e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId, _
                "Custom Node", Nothing)
        End Sub
    End Class
    
    [Export(typeof(IExplorerNodeTypeExtension))]
    [ExplorerNodeType(ExplorerNodeTypes.SiteNode)]
    internal class SiteNodeExtension : IExplorerNodeTypeExtension
    {
        public void Initialize(IExplorerNodeType nodeType)
        {
            nodeType.NodeChildrenRequested += NodeChildrenRequested;
        }
    
        private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e)
        {
            e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId,
                "Custom Node", null);
        }
    }
    

コード例全体

次のコード例は、単純なノードを定義し、サーバー エクスプローラーで SharePoint サイト ノードの子として追加する方法を示す完成したコードです。

Imports System.ComponentModel.Composition
Imports Microsoft.VisualStudio.SharePoint
Imports Microsoft.VisualStudio.SharePoint.Explorer

Namespace Contoso.ServerExplorerExtension

    <Export(GetType(IExplorerNodeTypeProvider))> _
    <ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)> _
    Friend Class ExampleNodeTypeProvider
        Implements IExplorerNodeTypeProvider
        Friend Const NodeTypeId As String = "Contoso.ServerExplorerNodeExample"

        Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _
            Implements IExplorerNodeTypeProvider.InitializeType
            typeDefinition.DefaultIcon = _
                My.Resources.CustomChildNodeIcon.ToBitmap()
            typeDefinition.IsAlwaysLeaf = True
        End Sub
    End Class

    <Export(GetType(IExplorerNodeTypeExtension))> _
    <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
    Friend Class SiteNodeExtension
        Implements IExplorerNodeTypeExtension

        Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _
            Implements IExplorerNodeTypeExtension.Initialize
            AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested
        End Sub

        Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs)
            e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId, _
                "Custom Node", Nothing)
        End Sub
    End Class
End Namespace
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.SharePoint;
using Microsoft.VisualStudio.SharePoint.Explorer;

namespace Contoso.ServerExplorerExtension
{
    [Export(typeof(IExplorerNodeTypeProvider))]
    [ExplorerNodeType(ExampleNodeTypeProvider.NodeTypeId)]
    internal class ExampleNodeTypeProvider : IExplorerNodeTypeProvider
    {
        internal const string NodeTypeId = "Contoso.ServerExplorerNodeExample";

        public void InitializeType(IExplorerNodeTypeDefinition typeDefinition)
        {
            typeDefinition.DefaultIcon =
                Properties.Resources.CustomChildNodeIcon.ToBitmap();
            typeDefinition.IsAlwaysLeaf = true;
        }
    }

    [Export(typeof(IExplorerNodeTypeExtension))]
    [ExplorerNodeType(ExplorerNodeTypes.SiteNode)]
    internal class SiteNodeExtension : IExplorerNodeTypeExtension
    {
        public void Initialize(IExplorerNodeType nodeType)
        {
            nodeType.NodeChildrenRequested += NodeChildrenRequested;
        }

        private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e)
        {
            e.Node.ChildNodes.Add(ExampleNodeTypeProvider.NodeTypeId,
                "Custom Node", null);
        }
    }
}

コードのコンパイル

この例は、プロジェクトに CustomChildNodeIcon という名前のアイコンが埋め込みリソースとして含まれていることを前提としています。 また、次のアセンブリへの参照を必要とします。

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

  • System.Drawing

拡張機能の配置

サーバー エクスプローラーの拡張機能を配置するには、同梱する必要のあるアセンブリや各種ファイルの Visual Studio Extension (VSIX) パッケージを作成します。 詳細については、「Visual Studio での SharePoint ツールの拡張機能の配置」を参照してください。

参照

概念

サーバー エクスプローラーの [SharePoint 接続] ノードの拡張

その他の技術情報

方法: サーバー エクスプローラーの SharePoint ノードを拡張する

チュートリアル: サーバー エクスプローラーを拡張して Web パーツを表示する