方法: サーバー エクスプローラーにカスタム SharePoint ノードを追加する
サーバー エクスプローラーの [SharePoint 接続] ノードにはカスタム ノードを追加できます。 既定ではサーバー エクスプローラーに表示されない SharePoint サイトのコンポーネントを別途表示する必要がある場合に便利な方法です。 詳細については、「サーバー エクスプローラーの [SharePoint 接続] ノードの拡張」を参照してください。
カスタム ノードを追加するには、まず、新しいノードを定義するクラスを作成します。 次に、そのノードを既存のノードの子として追加する拡張機能を作成します。
新しいノードを定義するには
クラス ライブラリ プロジェクトを作成します。
次のアセンブリへの参照を追加します。
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
System.Drawing
IExplorerNodeTypeProvider インターフェイスを実装するクラスを作成します。
クラスに次の属性を追加します。
System.ComponentModel.Composition.ExportAttribute. この属性によって、Visual Studio で IExplorerNodeTypeProvider の実装を検出し、読み込むことができます。 この属性のコンストラクターには IExplorerNodeTypeProvider 型を渡します。
ExplorerNodeTypeAttribute. ノードを定義する際は、新しいノードの文字列識別子をこの属性によって指定します。 ノードの識別子が重複しないよう、「<会社名>.<ノード名>」という形式を使用することをお勧めします。
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; } }
既存のノードの子として新しいノードを追加するには
ノード定義と同じプロジェクトで、IExplorerNodeTypeExtension インターフェイスを実装するクラスを作成します。
クラスに System.ComponentModel.Composition.ExportAttribute 属性を追加します。 この属性によって、Visual Studio で IExplorerNodeTypeExtension の実装を検出し、読み込むことができます。 この属性のコンストラクターに IExplorerNodeTypeExtension 型を渡します。
クラスに ExplorerNodeTypeAttribute 属性を追加します。 ノードの拡張機能では、拡張するノードの型の文字列識別子をこの属性によって指定します。
Visual Studio に用意されている組み込みのノード型を指定するには、この属性のコンストラクターに次のいずれかの列挙値を渡します。
ExplorerNodeTypes: これらの値を使用して、サーバー エクスプローラーのサイト接続ノード (サイトの URL を表示するノード)、サイト ノード、またはその他のすべての親ノードを指定します。
ExtensionNodeTypes: これらの値を使用して、リスト、フィールド、コンテンツの種類を表すノードなど、SharePoint サイトの個々のコンポーネントを表す組み込みのノードの 1 つを指定します。
Initialize メソッドの実装で、IExplorerNodeType パラメーターの NodeChildrenRequested イベントを処理します。
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 接続] ノードの拡張