Sdílet prostřednictvím


Postupy: Rozšíření uzlu služby SharePoint v průzkumníku serveru

Můžete rozšířit uzly pod uzlem Připojení služby SharePoint v Průzkumníku serveru.To je užitečné v případě, kdy chcete přidat nové podřízené uzly, položky nabídky zástupců nebo vlastnosti do existujícího uzlu.Další informace naleznete v tématu Rozšíření uzlu připojení služby SharePoint v průzkumníku serveru.

Chcete-li rozšířit uzel služby SharePoint v Průzkumníku serveru

  1. Vytvořte projekt knihovny tříd.

  2. Přidejte odkazy do následujících sestavení:

    • Microsoft.VisualStudio.SharePoint

    • Microsoft.VisualStudio.SharePoint.Explorer.Extensions

    • System.ComponentModel.Composition

  3. Vytvořte třídu, která implementuje rozhraní IExplorerNodeTypeExtension.

  4. Třídě přidejte atribut ExportAttribute.Tento atribut umožňuje Visual Studiu zjišťovat a načítat vaši implementaci IExplorerNodeTypeExtension.Předejte typ IExplorerNodeTypeExtension do konstruktoru atributu.

  5. Třídě přidejte atribut ExplorerNodeTypeAttribute.Tento atribut určuje řetězec identifikátoru pro typ uzlu, který chcete rozšířit.

    Chcete-li určit typy vestavěných uzlů poskytované Visual Studiem, předejte jednu z následujících výčtových hodnot konstruktoru atributů:

    • ExplorerNodeTypes: Používají tyto hodnoty pro určení uzlů webových připojení (uzly, které zobrazují adresy URL), uzly stránek nebo všechny ostatní nadřazené uzly v Průzkumníku serveru.

    • ExtensionNodeTypes: Pomocí těchto hodnot určete jeden z vestavěných uzlů, který představuje jednotlivou součást na webu služby SharePoint, jako je například uzel, který představuje seznam, pole nebo typ obsahu.

  6. Vaše implementace metody IExplorerNodeTypeExtension.Initialize užívá členy parametru nodeType pro přidání funkcí do uzlu.Tento parametr je objekt IExplorerNodeType, který poskytuje přístup k událostem definovaným v rozhraní IExplorerNodeEvents.Například lze zpracovávat následující události:

Příklad

Následující příklad kódu ukazuje, jak vytvořit dva různé typy rozšíření uzlu:

  • Rozšíření, které přidá položku kontextové nabídky do uzlů serveru SharePoint.Když kliknete na položku nabídky, zobrazí se název uzlu, na který bylo kliknuto.

  • Rozšíření, které přidá vlastní vlastnost s názvem ContosoExampleProperty do každého uzlu, který představuje pole s názvem Body.

Imports System.ComponentModel
Imports System.ComponentModel.Composition
Imports System.Windows.Forms
Imports Microsoft.VisualStudio.SharePoint
Imports Microsoft.VisualStudio.SharePoint.Explorer
Imports Microsoft.VisualStudio.SharePoint.Explorer.Extensions

Namespace Contoso.ServerExplorerExtension
    <Export(GetType(IExplorerNodeTypeExtension))> _
    <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
    Friend Class SiteNodeExtensionWithContextMenu
        Implements IExplorerNodeTypeExtension

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

        Private Sub NodeMenuItemsRequested(ByVal Sender As Object, ByVal e As ExplorerNodeMenuItemsRequestedEventArgs)
            Dim menuItem = e.MenuItems.Add("Display Message")
            AddHandler menuItem.Click, AddressOf MenuItemClick
        End Sub 

        Private Sub MenuItemClick(ByVal Sender As Object, ByVal e As MenuItemEventArgs)
            Dim node As IExplorerNode = CType(e.Owner, IExplorerNode)
            MessageBox.Show(String.Format("Clicked the menu item for the '{0}' node.", node.Text))
        End Sub 
    End Class

    <Export(GetType(IExplorerNodeTypeExtension))> _
    <ExplorerNodeType(ExtensionNodeTypes.FieldNode)> _
    Friend Class FieldNodeExtensionWithProperty
        Implements IExplorerNodeTypeExtension

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

        Private Sub NodePropertiesRequested(ByVal Sender As Object, ByVal e As ExplorerNodePropertiesRequestedEventArgs)
            Dim propertyObject As ExampleProperty = Nothing 

            ' Only add the property to "Body" fields. 
            If e.Node.Text = "Body" Then 
                ' If the properties object already exists for this node, get it from the node's annotations. 
                If False = e.Node.Annotations.TryGetValue(propertyObject) Then 
                    ' Otherwise, create a new properties object and add it to the annotations.
                    propertyObject = New ExampleProperty(e.Node)
                    e.Node.Annotations.Add(propertyObject)
                End If
                e.PropertySources.Add(propertyObject)
            End If 
        End Sub 
    End Class 

    Friend Class ExampleProperty

        Private node As IExplorerNode
        Private Const propertyId As String = "Contoso.CustomActionTestProperty" 
        Private Const propertyDefaultValue As String = "This is a test value." 

        Friend Sub New(ByVal node As IExplorerNode)
            Me.node = node
        End Sub 

        ' Gets or sets a simple string property. 
        <DisplayName("ContosoExampleProperty")> _
        <DescriptionAttribute("This is an example property for field nodes.")> _
        <DefaultValue(propertyDefaultValue)> _
        Public Property TestProperty As String 
            Get 
                Dim propertyValue As String = Nothing 

                ' Get the current property value if it already exists; otherwise, return a default value. 
                If False = node.Annotations.TryGetValue(propertyId, propertyValue) Then
                    propertyValue = propertyDefaultValue
                End If 
                Return propertyValue
            End Get 
            Set(ByVal value As String)
                If value <> propertyDefaultValue Then 
                    ' Store the property value in the Annotations property of the node.  
                    ' Data in the Annotations property does not persist when Visual Studio exits.
                    node.Annotations(propertyId) = value
                Else 
                    ' Do not save the default value.
                    node.Annotations.Values.Remove(propertyId)
                End If 
            End Set 
        End Property 
    End Class 
End Namespace
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Windows.Forms;
using Microsoft.VisualStudio.SharePoint;
using Microsoft.VisualStudio.SharePoint.Explorer;
using Microsoft.VisualStudio.SharePoint.Explorer.Extensions;

namespace Contoso.ServerExplorerExtension
{
    [Export(typeof(IExplorerNodeTypeExtension))]
    [ExplorerNodeType(ExplorerNodeTypes.SiteNode)]
    internal class SiteNodeExtensionWithContextMenu : IExplorerNodeTypeExtension
    {
        public void Initialize(IExplorerNodeType nodeType)
        {
            nodeType.NodeMenuItemsRequested += nodeType_NodeMenuItemsRequested;
        }

        void nodeType_NodeMenuItemsRequested(object sender, ExplorerNodeMenuItemsRequestedEventArgs e)
        {
            IMenuItem menuItem = e.MenuItems.Add("Display Message");
            menuItem.Click += menuItem_Click;
        }

        void menuItem_Click(object sender, MenuItemEventArgs e)
        {
            IExplorerNode node = (IExplorerNode)e.Owner;
            MessageBox.Show(string.Format("Clicked the menu item for the '{0}' node.", node.Text));
        }
    }

    [Export(typeof(IExplorerNodeTypeExtension))]
    [ExplorerNodeType(ExtensionNodeTypes.FieldNode)]
    internal class FieldNodeExtensionWithProperty : IExplorerNodeTypeExtension
    {
        public void Initialize(IExplorerNodeType nodeType)
        {
            nodeType.NodePropertiesRequested += nodeType_NodePropertiesRequested;
        }

        void nodeType_NodePropertiesRequested(object sender, ExplorerNodePropertiesRequestedEventArgs e)
        {
            // Only add the property to "Body" fields.
            if (e.Node.Text == "Body")
            {
                ExampleProperty propertyObject;

                // If the properties object already exists for this node, get it from the node's annotations. 
                if (!e.Node.Annotations.TryGetValue(out propertyObject))
                {
                    // Otherwise, create a new properties object and add it to the annotations.
                    propertyObject = new ExampleProperty(e.Node);
                    e.Node.Annotations.Add(propertyObject);
                }

                e.PropertySources.Add(propertyObject);
            }
        }
    }

    internal class ExampleProperty
    {
        private IExplorerNode node;
        private const string propertyId = "Contoso.ExampleProperty";
        private const string propertyDefaultValue = "This is an example property.";

        internal ExampleProperty(IExplorerNode node)
        {
            this.node = node;
        }

        // Gets or sets a simple string property. 
        [DisplayName("ContosoExampleProperty")]
        [DescriptionAttribute("This is an example property for field nodes.")]
        [DefaultValue(propertyDefaultValue)]
        public string TestProperty
        {
            get
            {
                string propertyValue;

                // Get the current property value if it already exists; otherwise, return a default value. 
                if (!node.Annotations.TryGetValue(propertyId, out propertyValue))
                {
                    propertyValue = propertyDefaultValue;
                }
                return propertyValue;
            }
            set
            {
                if (value != propertyDefaultValue)
                {
                    // Store the property value in the Annotations property of the node.  
                    // Data in the Annotations property does not persist when Visual Studio exits.
                    node.Annotations[propertyId] = value;
                }
                else
                {
                    // Do not save the default value.
                    node.Annotations.Remove(propertyId);
                }
            }
        }
    }

}

Toto rozšíření přidá vlastnost upravitelného řetězce do uzlů.Můžete také vytvořit vlastní vlastnosti, které zobrazí jen data pro čtení ze serveru SharePoint.Příklad, jak to provést naleznete v části Návod: Rozšíření průzkumníka serveru pro zobrazení částí webu.

Probíhá kompilace kódu

Tento příklad vyžaduje odkazy na následující sestavení:

  • Microsoft.VisualStudio.SharePoint

  • Microsoft.VisualStudio.SharePoint.Explorer.Extensions

  • System.ComponentModel.Composition

  • System.Windows.Forms

Nasazování rozšíření

Chcete-li nasadit rozšíření Průzkumníka serveru vytvořte Visual Studio balíček rozšíření (VSIX) pro sestavení a všechny další soubory, které chcete distribuovat s rozšířením.Další informace naleznete v tématu Nasazování rozšíření pro nástroje služby SharePoint v aplikaci Visual Studio.

Viz také

Úkoly

Návod: Rozšíření průzkumníka serveru pro zobrazení částí webu

Koncepty

Postupy: Přidání vlastního uzlu služby SharePoint do průzkumníka serveru

Přidružení vlastních dat k rozšíření nástrojů služby SharePoint

Další zdroje

Rozšíření uzlu připojení služby SharePoint v průzkumníku serveru