Поделиться через


Практическое руководство. Добавление в обозреватель сервера пользовательского узла SharePoint

В узел Подключения SharePoint в Обозревателе сервера можно добавлять пользовательские узлы.Это бывает удобно, если требуется отображать дополнительные компоненты SharePoint, которые не отображаются в Обозревателе сервера по умолчанию.Дополнительные сведения см. в разделе Расширение узла подключений SharePoint в обозревателе сервера.

Чтобы добавить пользовательский узел, сначала создайте класс, определяющий новый узел.Затем создайте расширение, которое добавляет этот узел в качестве дочернего для имеющегося узла.

Определение нового узла

  1. Создайте проект библиотеки классов.

  2. Добавьте ссылки на следующие сборки:

    • Microsoft.VisualStudio.SharePoint

    • Microsoft.VisualStudio.SharePoint.Explorer.Extensions

    • System.ComponentModel.Composition

    • System.Drawing

  3. Создайте класс, реализующий интерфейс IExplorerNodeTypeProvider.

  4. Добавьте следующие атрибуты к классу:

    • System.ComponentModel.Composition.ExportAttribute.Этот атрибут позволяет Visual Studio находить и загружать пользовательскую реализацию IExplorerNodeTypeProvider.Передайте конструктору этого атрибута тип IExplorerNodeTypeProvider;

    • ExplorerNodeTypeAttribute.В определении узла этот атрибут задает идентификатор строки для нового узла.Чтобы все узлы имели уникальные идентификаторы, рекомендуется использовать формат название_компании.имя_узла.

  5. В текущей реализации метода IExplorerNodeTypeProvider.InitializeType с помощью членов параметра typeDefinition настройте поведение нового узла.Этот параметр представляет собой объект IExplorerNodeTypeDefinition, который предоставляет доступ к событиям, определенным в интерфейсе IExplorerNodeEvents.

    В следующем примере кода демонстрируется определение нового узла.В этом пример предполагается, что проект содержит в качестве внедренного ресурса значок с именем 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 обработайте событие NodeChildrenRequested параметра IExplorerNodeType.

  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 (VSIX) для сборки и всех остальных файлов, которые предположительно будут распространяться вместе с расширением.Дополнительные сведения см. в разделе Разработка расширений для средств SharePoint в Visual Studio.

См. также

Задачи

Пошаговое руководство. Расширение обозревателя сервера, чтобы в нем отображались веб-части

Основные понятия

Практическое руководство. Расширение узла SharePoint в обозревателе сервера

Другие ресурсы

Расширение узла подключений SharePoint в обозревателе сервера