Cómo: Extender un nodo de SharePoint en el Explorador de servidores
Puede ampliar los nodos situados bajo el nodo Conexiones de SharePoint en el Explorador de servidores.Esto es útil cuando se desea agregar nuevos nodos secundarios, elementos de menú contextual o propiedades a un nodo existente.Para obtener más información, vea Extender el nodo Conexiones de SharePoint en el Explorador de servidores.
Para extender un nodo de SharePoint en el Explorador de servidores
Cree un proyecto de biblioteca de clases
Agregue referencias a los siguientes ensamblados:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
Cree una clase que implemente la interfaz IExplorerNodeTypeExtension.
Agregue el atributo System.ComponentModel.Composition.ExportAttribute a la clase.Este atributo permite que Visual Studio detecte y cargue la implementación de IExplorerNodeTypeExtension.Pase el tipo IExplorerNodeTypeExtension al constructor del atributo.
Agregue el atributo ExplorerNodeTypeAttribute a la clase.Este atributo especifica el identificador de cadena del tipo de nodo que desea extender.
Para especificar tipos de nodos integrados proporcionados por Visual Studio, pase uno de los valores de la enumeración siguiente al constructor del atributo:
ExplorerNodeTypes: use estos valores para especificar los nodos de conexión del sitio (los nodos en los que aparece la dirección URL del sitio), los nodos de sitio o todos los otros nodos primarios del Explorador de servidores.
ExtensionNodeTypes: utilice estos valores para especificar uno de los nodos integrados que representa un componente individual de un sitio de SharePoint, como un nodo que representa una lista, campo o tipo de contenido.
En la implementación del método IExplorerNodeTypeExtension.Initialize, use los miembros del parámetro nodeType para agregar características al nodo.Este parámetro es un objeto IExplorerNodeType que proporciona acceso a los eventos definidos en la interfaz IExplorerNodeEvents.Por ejemplo, puede controlar los eventos siguientes:
IExplorerNodeEvents.NodeChildrenRequested: controle este evento para agregar los nuevos nodos secundarios al nodo.Para obtener más información, vea Cómo: Agregar un nodo de SharePoint personalizado al Explorador de servidores.
IExplorerNodeEvents.NodeMenuItemsRequested: controle este evento para agregar un elemento de menú contextual personalizado al nodo.
IExplorerNodeEvents.NodePropertiesRequested: controle este evento para agregar propiedades personalizadas al nodo.Las propiedades aparecen en la ventana Propiedades cuando el nodo está seleccionado.
Ejemplo
En el siguiente ejemplo de código se muestra cómo crear dos tipos diferentes de extensiones de nodo:
Una extensión que agrega un elemento de menú contextual a los nodos de sitio de SharePoint.Al hacer clic en el elemento de menú, se muestra el nombre del nodo en el que se hizo clic.
Una extensión que agrega una propiedad personalizada denominada ContosoExampleProperty a cada nodo que representa un campo denominado 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);
}
}
}
}
}
Esta extensión agrega una propiedad de cadena modificable a los nodos.También puede crear propiedades personalizadas que muestran los datos de solo lectura del servidor de SharePoint.Para obtener un ejemplo de cómo hacerlo, vea Tutorial: Extender el Explorador de servidores para mostrar elementos web.
Compilar el código
Para este ejemplo se requieren referencias a los siguientes ensamblados:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.SharePoint.Explorer.Extensions
System.ComponentModel.Composition
System.Windows.Forms
Implementar la extensión
Para implementar la extensión del Explorador de servidores, cree un paquete de extensión (VSIX) de Visual Studio para el ensamblado y el resto de archivos que desee distribuir con la extensión.Para obtener más información, vea Extensiones de implementación para las Herramientas de SharePoint en Visual Studio.
Vea también
Tareas
Tutorial: Extender el Explorador de servidores para mostrar elementos web
Conceptos
Cómo: Agregar un nodo de SharePoint personalizado al Explorador de servidores
Asociar datos personalizados con extensiones de herramientas de SharePoint
Otros recursos
Extender el nodo Conexiones de SharePoint en el Explorador de servidores