다음을 통해 공유


방법: 서버 탐색기에 사용자 지정 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 사이트의 개별 구성 요소를 나타내는 기본 제공 노드, 즉 목록, 필드 또는 콘텐츠 형식을 나타내는 노드 중 하나를 지정하려면 이러한 값을 사용합니다.

  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

확장 배포

서버 탐색기 확장을 배포하려면 어셈블리 및 확장과 함께 배포할 다른 모든 파일에 대한 VSIX(Visual Studio Extension) 패키지를 만듭니다. 자세한 내용은 Visual Studio에서 SharePoint 도구에 대한 확장 배포를 참조하십시오.

참고 항목

작업

연습: 서버 탐색기를 확장하여 웹 파트 표시

기타 리소스

서버 탐색기에서 SharePoint 연결 노드 확장

방법: 서버 탐색기에서 SharePoint 노드 확장