방법: 서버 탐색기에 사용자 지정 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. 노드 정의에서 이 특성은 새 노드의 문자열 식별자를 지정합니다. company name.node name 형식을 사용하여 모든 노드에 고유한 식별자를 지정하는 것이 좋습니다.
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 사이트의 개별 구성 요소를 나타내는 기본 제공 노드, 즉 목록, 필드 또는 콘텐츠 형식을 나타내는 노드 중 하나를 지정하려면 이러한 값을 사용합니다.
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
확장 배포
서버 탐색기 확장을 배포하려면 어셈블리 및 확장과 함께 배포할 다른 모든 파일에 대한 VSIX(Visual Studio Extension) 패키지를 만듭니다. 자세한 내용은 Visual Studio에서 SharePoint 도구에 대한 확장 배포를 참조하십시오.