Tutorial: Llamar al modelo de objetos de cliente de SharePoint en una extensión del Explorador de servidores
En este tutorial se muestra cómo llamar al modelo de objetos de cliente de SharePoint desde una extensión del nodo Conexiones de SharePoint en el Explorador de servidores.Para obtener más información sobre cómo utilizar el modelo de objetos de cliente de SharePoint, vea Llamar a los modelos de objetos de SharePoint.
En este tutorial se muestran las siguientes tareas:
Crear una extensión Visual Studio que extiende el nodo Conexiones de SharePoint del Explorador de servidores de las maneras siguientes:
La extensión agrega un nodo Galería de elementos web bajo cada nodo de sitio de SharePoint en Explorador de servidores.Este nuevo nodo contiene nodos secundarios que representan cada elemento web en la galería de elementos web del sitio.
La extensión define un nuevo tipo de nodo que representa una instancia del elemento web.Este nuevo tipo de nodo es la base de los nodos secundarios bajo el nuevo nodo Galería de elementos web.El nuevo tipo de nodo elemento web muestra información en la ventana Propiedades sobre el elemento web que representa el nodo.
Compilar un paquete de extensión de Visual Studio (VSIX) para implementar la extensión.
Depurar y probar la extensión.
[!NOTA]
La extensión que se crea en este tutorial se parece a la extensión que se crea en Tutorial: Extender el Explorador de servidores para mostrar elementos web.Que el tutorial utiliza el modelo de objetos de servidor de SharePoint, pero este tutorial realiza las mismas tareas con el modelo de objetos de cliente.
Requisitos previos
Necesitará los componentes siguientes en el equipo de desarrollo para completar este tutorial:
Ediciones compatibles de Windows, SharePoint, y Visual Studio.Para obtener más información, vea Requisitos para desarrollar soluciones de SharePoint.
Visual Studio SDK.En este tutorial se utiliza la plantilla Proyecto VSIX del SDK para crear un paquete VSIX para implementar la extensión.Para obtener más información, vea Extender la Herramientas de SharePoint en Visual Studio.
El conocimiento de los siguientes conceptos es útil, aunque no necesario, para completar el tutorial.
Utilizar el modelo de objetos de cliente de SharePoint.Para obtener más información, vea Modelo de objetos de cliente administrado.
Elementos web en SharePoint.Para obtener más información, vea Información general sobre elementos web.
Crear los proyectos
Para completar este tutorial, debe crear dos proyectos:
Un proyecto VSIX para crear el paquete VSIX para implementar la extensión Explorador de servidores .
Un proyecto de biblioteca de clases que implemente la extensión Explorador de servidores .
Comience el tutorial creando ambos proyectos.
Para crear el proyecto VSIX
Inicie Visual Studio.
En la barra de menú, elija Archivo, Nuevo, Proyecto.
En el cuadro de diálogo Nuevo proyecto , expanda los nodos Visual c# o Visual Basic y, a continuación Extensibilidad.
[!NOTA]
El nodo Extensibilidad solo está disponible si instala Visual Studio SDK.Para obtener más información, vea la sección Requisitos previos, anteriormente en este tema.
En la parte superior del cuadro de diálogo, elija .NET Framework 4,5 en la lista de versiones de .NET Framework.
Las extensiones de herramientas de SharePoint requieren características de esta versión de .NET Framework.
Elija la plantilla Proyecto VSIX .
En el cuadro Nombre , WebPartNodeescrito, y elija el botón Aceptar .
Visual Studio agrega el proyecto NodoElementoWeb al Explorador de soluciones.
Para crear la extensión de proyecto
En Explorador de soluciones, abra el menú contextual para el nodo de la solución, elija Agregary, a continuación Nuevo proyecto.
[!NOTA]
En los proyectos de Visual Basic, el nodo de la solución aparece en el Explorador de soluciones solo cuando se activa la casilla Mostrar solución siempre en General, Projects and Solutions, Options Dialog Box.
En el cuadro de diálogo Nuevo proyecto , expanda los nodos Visual c# o Visual Basic y, a continuación Windows.
En la parte superior del cuadro de diálogo, elija .NET Framework 4,5 en la lista de versiones de .NET Framework.
En la lista de plantillas de proyecto, elija Biblioteca de clases.
En el cuadro Nombre , entre en WebPartNodeExtension, y elija el botón Aceptar .
Visual Studio agrega el proyecto ExtensiónNodoElementoWeb a la solución y abre el archivo de código predeterminado Class1.
Elimine el archivo de código Class1 del proyecto.
Configurar el proyecto de extensión
Antes de escribir el código para crear la extensión, debe agregar los archivos de código y las referencias de ensamblado al proyecto, y debe actualizar el espacio de nombres predeterminado.
Para configurar el proyecto
En el proyecto WebPartNodeExtension , agregue dos archivos de código que se llama SiteNodeExtension y WebPartNodeTypeProvider.
Abrir el menú contextual del proyecto extensiónnodoelementoweb y, a continuación Agregar referencia.
En el cuadro de diálogo Administrador de referencia – WebPartNodeExtension , elija el nodo Framework , y seleccione las casillas de los ensamblados System.ComponentModel.Composition y System.Windows.Forms.
Elija el nodo Extensiones , active la casilla para cada uno de los siguientes ensamblados, y después elija el botón Aceptar :
Microsoft.SharePoint.Client
Microsoft.SharePoint.Client.Runtime
Microsoft.VisualStudio.SharePoint
Abrir el menú contextual para el proyecto WebPartNodeExtension y, a continuación Propiedades.
Se abrirá el Diseñador de proyectos.
Elija la ficha Aplicación .
En el cuadro Espacio de nombres predeterminado (C#) o el cuadro Espacio de nombres de la raíz (Visual Basic), escriba en ServerExplorer.SharePointConnections.WebPartNode.
Crear iconos para los nuevos nodos
Cree dos iconos para la extensión Explorador de servidores : un icono para el nuevo nodo Galería de elementos web y otro icono para cada nodo secundario del elemento web bajo el nodo Galería de elementos web .Más adelante en este tutorial, escribirá código que asocie estos iconos a los nodos.
Para crear iconos para los nodos
En Diseñador de proyectos para el proyecto extensiónnodoelementoweb, elija la ficha RECURSOS .
Elija el vínculo De que el proyecto no contiene un archivo de recursos predeterminado. Haga clic aquí para crear uno.
Visual Studio crea un archivo de recursos y lo abre en el diseñador.
En la parte superior del diseñador, elija la flecha en el comando de menú Agregar recurso , y elija Agregar nuevo icono.
Escriba en WebPartsNode para el nuevo icono, y elija el botón Agregar .
El nuevo icono se abre en el Editor de imágenes.
Modifique la versión 16x16 del icono para que tenga un diseño que pueda fácilmente reconocer.
Abrir el menú contextual para la versión 32x32 del icono y, a continuación Eliminar tipo de imagen.
Repita los pasos 3 a 7 para agregar un segundo icono a los recursos del proyecto, y llame a este icono WebPart.
En Explorador de soluciones, en la carpeta RECURSOS para el proyecto WebPartNodeExtension , elija WebPartsNode.ico.
En la ventana Propiedades , abra la lista Acción de compilación y, a continuación Recurso incrustado.
Repita los últimos dos pasos con ElementoWeb.ico.
Agregar el nodo Galería de elementos web al Explorador de servidores
Cree una clase que agregue el nuevo nodo Galería de elementos web a cada nodo del sitio de SharePoint.Para agregarlo, la clase implementa la interfaz IExplorerNodeTypeExtension.Implemente esta interfaz para extender el comportamiento de un nodo existente en el Explorador de servidores, como agregar un nuevo nodo secundario a un nodo.
Para agregar el nodo Galería de elementos web al Explorador de servidores
Pegue el código siguiente en el archivo de código SiteNodeExtension para el proyecto WebPartNodeExtension .
[!NOTA]
Después de agregar este código, el proyecto tendrá algunos errores de compilación.Estos errores desaparecerán al agregar código en pasos posteriores.
Imports System.Collections.Generic Imports System.ComponentModel.Composition Imports Microsoft.SharePoint.Client Imports Microsoft.VisualStudio.SharePoint Imports Microsoft.VisualStudio.SharePoint.Explorer Namespace ServerExplorer.SharePointConnections.WebPartNode ' Export attribute: Enables Visual Studio to discover and load this extension. ' ExplorerNodeType attribute: Indicates that this class extends SharePoint site nodes in Server Explorer. ' SiteNodeExtension class: Represents an extension of SharePoint site nodes in Server Explorer. <Export(GetType(IExplorerNodeTypeExtension))> _ <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _ Friend Class SiteNodeExtension Implements IExplorerNodeTypeExtension Private siteUrl As System.Uri = Nothing Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _ Implements IExplorerNodeTypeExtension.Initialize ' The NodeChildrenRequested event is raised when the user expands the ' SharePoint site node in Server Explorer. AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested End Sub ' Creates the new Web Part Gallery node with the specified icon. Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs) ' Get the site URL so that it can be used later to access the site ' by using the SharePoint client object model. siteUrl = e.Node.Context.SiteUrl ' The CreateWebPartNodes argument is a delegate that Visual Studio calls ' to create the child nodes under the Web Part Gallery node. e.Node.ChildNodes.AddFolder("Web Part Gallery", My.Resources.WebPartsNode.ToBitmap(), _ AddressOf CreateWebPartNodes) End Sub ' Creates individual Web Part nodes under the new Web Part Gallery node. Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode) ' Use the SharePoint client object model to get items from the Web Part gallery. Dim Context As ClientContext = New ClientContext(siteUrl.AbsoluteUri) Dim WebPartsGallery As List = Context.Web.GetCatalog(CType(ListTemplateType.WebPartCatalog, Integer)) Dim WebParts As ListItemCollection = WebPartsGallery.GetItems(New CamlQuery()) ' Request the FieldValuesAsText property values with the Web Part items. Context.Load(WebParts, Function(listItems) listItems.Include(Function(i) i.FieldValuesAsText)) Context.ExecuteQuery() If WebParts IsNot Nothing Then For Each WebPart As ListItem In WebParts ' Create a new annotation object to store the current Web Part item with the new node. Dim Annotations = New Dictionary(Of Object, Object)() Annotations.Add(GetType(ListItem), WebPart) ' Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _ WebPart.FieldValuesAsText.FieldValues("Title"), Annotations) Next End If End Sub End Class End Namespace
using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; using Microsoft.VisualStudio.SharePoint; using Microsoft.VisualStudio.SharePoint.Explorer; namespace ServerExplorer.SharePointConnections.WebPartNode { // Enables Visual Studio to discover and load this extension. [Export(typeof(IExplorerNodeTypeExtension))] // Indicates that this class extends SharePoint site nodes in Server Explorer. [ExplorerNodeType(ExplorerNodeTypes.SiteNode)] // Represents an extension of SharePoint site nodes in Server Explorer. internal class SiteNodeExtension : IExplorerNodeTypeExtension { private System.Uri siteUrl = null; public void Initialize(IExplorerNodeType nodeType) { // The NodeChildrenRequested event is raised when the user expands the // SharePoint site node in Server Explorer. nodeType.NodeChildrenRequested += NodeChildrenRequested; } // Creates the new Web Part Gallery node with the specified icon. private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e) { // Get the site URL so that it can be used later to access the site // by using the SharePoint client object model. siteUrl = e.Node.Context.SiteUrl; // The CreateWebPartNodes argument is a delegate that Visual Studio calls // to create the child nodes under the Web Part Gallery node. e.Node.ChildNodes.AddFolder("Web Part Gallery", Properties.Resources.WebPartsNode.ToBitmap(), CreateWebPartNodes); } // Creates individual Web Part nodes under the new Web Part Gallery node. private void CreateWebPartNodes(IExplorerNode parentNode) { // Use the SharePoint client object model to get items from the Web Part gallery. ClientContext context = new ClientContext(siteUrl.AbsoluteUri); List webPartsGallery = context.Web.GetCatalog((int)ListTemplateType.WebPartCatalog); ListItemCollection webParts = webPartsGallery.GetItems(new CamlQuery()); // Request the FieldValuesAsText property values with the Web Part items. context.Load(webParts, listItems => listItems.Include(i => i.FieldValuesAsText)); context.ExecuteQuery(); if (webParts != null) { foreach (ListItem webPart in webParts) { // Create a new annotation object to store the current Web Part item with the new node. var annotations = new Dictionary<object, object>() { { typeof(ListItem), webPart } }; // Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, webPart.FieldValuesAsText.FieldValues["Title"], annotations); } } } } }
Definir un tipo de nodo que represente un elemento web
Cree una clase que defina un nuevo tipo de nodo que represente un elemento web.Visual Studio utiliza este nuevo tipo de nodo para mostrar los nodos secundarios del nodo Galería de elementos web .Cada uno de estos nodos secundarios representa un elemento web único en el sitio de SharePoint.
Para definir el nuevo tipo de nodo, la clase implementa la interfaz IExplorerNodeTypeProvider.Implemente esta interfaz para definir un nuevo tipo de nodo en el Explorador de servidores todas las veces que desee.
Para definir el tipo de nodo Elemento web
Pegue el código siguiente en el archivo de código WebPartNodeTypeProvider para el proyecto WebPartNodeExtension .
Imports System Imports System.Collections.Generic Imports System.Windows.Forms Imports System.ComponentModel.Composition Imports Microsoft.SharePoint.Client Imports Microsoft.VisualStudio.SharePoint Imports Microsoft.VisualStudio.SharePoint.Explorer Namespace ServerExplorer.SharePointConnections.WebPartNode ' Export attribute: Enables Visual Studio to discover and load this extension. ' ExplorerNodeType attribute: Specifies the ID for this new node type. ' WebPartNodeTypeProvider class: Defines a new node type that represents a Web Part on a SharePoint site. <Export(GetType(IExplorerNodeTypeProvider))> _ <ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)> _ Friend Class WebPartNodeTypeProvider Implements IExplorerNodeTypeProvider Friend Const WebPartNodeTypeId As String = "Contoso.WebPart" Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _ Implements IExplorerNodeTypeProvider.InitializeType typeDefinition.DefaultIcon = My.Resources.WebPart.ToBitmap() typeDefinition.IsAlwaysLeaf = True AddHandler typeDefinition.NodePropertiesRequested, AddressOf NodePropertiesRequested AddHandler typeDefinition.NodeMenuItemsRequested, AddressOf NodeMenuItemsRequested End Sub ' Retrieves properties that are displayed in the Properties window when ' a Web Part node is selected. Private Sub NodePropertiesRequested(ByVal Sender As Object, _ ByVal e As ExplorerNodePropertiesRequestedEventArgs) Dim webPart = e.Node.Annotations.GetValue(Of ListItem)() Dim propertySource = e.Node.Context.CreatePropertySourceObject( _ webPart.FieldValuesAsText.FieldValues) e.PropertySources.Add(propertySource) End Sub Private Sub NodeMenuItemsRequested(ByVal Sender As Object, _ ByVal e As ExplorerNodeMenuItemsRequestedEventArgs) Dim WebPartNodeMenuItem As IMenuItem = e.MenuItems.Add("Display Message") AddHandler WebPartNodeMenuItem.Click, AddressOf MenuItemClick End Sub Private Sub MenuItemClick(ByVal Sender As Object, ByVal e As MenuItemEventArgs) Dim ParentNode As IExplorerNode = TryCast(e.Owner, IExplorerNode) If ParentNode IsNot Nothing Then Dim webPart = ParentNode.Annotations.GetValue(Of ListItem)() MessageBox.Show("You clicked the context menu for the following Web part: " & _ webPart.FieldValuesAsText.FieldValues("Title") + ".", "Web Part Menu Command") End If End Sub End Class End Namespace
using System; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; using Microsoft.VisualStudio.SharePoint; using Microsoft.VisualStudio.SharePoint.Explorer; namespace ServerExplorer.SharePointConnections.WebPartNode { // Enables Visual Studio to discover and load this extension. [Export(typeof(IExplorerNodeTypeProvider))] // Specifies the ID for this new node type. [ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)] // Defines a new node type that represents a Web Part on a SharePoint site. internal class WebPartNodeTypeProvider : IExplorerNodeTypeProvider { internal const string WebPartNodeTypeId = "Contoso.WebPart"; public void InitializeType(IExplorerNodeTypeDefinition typeDefinition) { typeDefinition.DefaultIcon = Properties.Resources.WebPart.ToBitmap(); typeDefinition.IsAlwaysLeaf = true; typeDefinition.NodePropertiesRequested += NodePropertiesRequested; typeDefinition.NodeMenuItemsRequested += NodeMenuItemsRequested; } // Retrieves properties that are displayed in the Properties window when // a Web Part node is selected. private void NodePropertiesRequested(object sender, ExplorerNodePropertiesRequestedEventArgs e) { var webPart = e.Node.Annotations.GetValue<ListItem>(); object propertySource = e.Node.Context.CreatePropertySourceObject( webPart.FieldValuesAsText.FieldValues); e.PropertySources.Add(propertySource); } private void NodeMenuItemsRequested( object sender, ExplorerNodeMenuItemsRequestedEventArgs e) { e.MenuItems.Add("Display Message").Click += MenuItemClick; } private void MenuItemClick(object sender, MenuItemEventArgs e) { IExplorerNode parentNode = e.Owner as IExplorerNode; if (parentNode != null) { var webPart = parentNode.Annotations.GetValue<ListItem>(); MessageBox.Show("You clicked the context menu for the following Web part: " + webPart.FieldValuesAsText.FieldValues["Title"] + ".", "Web Part Menu Command"); } } } }
Punto de control
En este punto del tutorial, todo el código del nodo Galería de elementos web está en el proyecto.Compile el proyecto WebPartNodeExtension para asegurarse de que se compila sin errores.
Para compilar el proyecto
- En Explorador de soluciones, abra el menú contextual para el proyecto WebPartNodeExtension y, a continuación Generar.
Crear un paquete VSIX para implementar la extensión
Para implementar la extensión, utilice el proyecto VSIX en la solución para crear un paquete VSIX.Primero, configure el paquete VSIX modificando el archivo source.extension.vsixmanifest incluido en el proyecto.A continuación cree el paquete VSIX compilando la solución.
Para configurar el paquete VSIX
En Explorador de soluciones, en el proyecto WebPartNode , abra el archivo source.extension.vsixmanifest en el editor de manifiestos.
El archivo source.extension.vsixmanifest es la base del archivo extension.vsixmanifest que todos los paquetes VSIX requieren.Para obtener más información sobre este archivo, vea Referencia de esquema de extensión VSIX.
En el cuadro Nombre de producto , entre en Nodo galería de elementos web para el Explorador de servidores.
En el cuadro Autor , entre en Contoso.
En el cuadro Descripción , entre en Agrega un nodo galería de elementos web personalizado al nodo conexiones de SharePoint en el Explorador de servidores.
En la pestaña Activos de editor, elija el botón Nuevo .
En el cuadro de diálogo Agregar nuevo activo , en la lista Tipo , elija Microsoft.VisualStudio.MefComponent.
[!NOTA]
Este valor corresponde al elemento MefComponent del archivo extension.vsixmanifest.Este elemento especifica el nombre de un ensamblado de extensión en el paquete VSIX.Para obtener más información, vea MEFComponent Element.
En la lista Origen , elija Un proyecto de la solución actual.
En la lista Proyecto , elija WebPartNodeExtension, y elija el botón Aceptar .
En la barra de menú, elija Generar, Compilar solución, y asegúrese de que la solución se compila sin errores.
Asegúrese de que la carpeta de salida de la compilación del proyecto nodoelementoweb ahora contiene el archivo nodoelementoweb.vsix.
De forma predeterminada, la carpeta de resultado de compilación es ..\bin\Debug, que se encuentra bajo la carpeta que contiene el archivo de proyecto.
Probar la extensión
Ya puede probar el nuevo nodo Galería de elementos web en el Explorador de servidores.Primero, empiece a depurar el proyecto de extensión en una instancia experimental de Visual Studio.Después utilice el nuevo nodo Elementos web en la instancia experimental de Visual Studio.
Para comenzar a depurar la extensión
Reinicie Visual Studio con credenciales administrativas, y vuelva a abrir la solución WebPartNode .
En el proyecto extensiónnodoelementoweb, abra el archivo de código SiteNodeExtension , y después agregue un punto de interrupción a las primeras líneas de código en los métodos NodeChildrenRequested y CreateWebPartNodes .
Elija la tecla F5 para iniciar la depuración.
Visual Studio instala la extensión en %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Web Part Gallery Node Extension for Server Explorer\1.0 and starts an experimental instance of Visual Studio.Probará el elemento de proyecto en esta instancia de Visual Studio.
Para probar la extensión
En la instancia experimental de Visual Studio, en la barra de menú, elija Ver, Explorador de servidores.
Compruebe que el sitio de SharePoint que desea utilizar para probar aparece bajo el nodo Conexiones de SharePoint en el Explorador de servidores.Si no aparece, siga estos pasos:
Abrir el menú contextual para Conexiones de SharePointy, a continuación Agregar conexión.
En el cuadro de diálogo Agregar conexión a SharePoint , escriba la dirección URL para el sitio de SharePoint al que desea conectarse, y elija el botón Aceptar .
Para especificar el sitio de SharePoint en el equipo de desarrollo, tipo https://localhost.
Expanda el nodo de conexión del sitio (que muestra la dirección URL del sitio) y, a continuación expanda un nodo de sitio secundario (por ejemplo, Sitio del equipo).
Compruebe que el código de la otra instancia de Visual Studio se detiene en el punto de interrupción que estableció anteriormente en el método NodeChildrenRequested , y elija la tecla F5 para continuar y depurar el proyecto.
En la instancia experimental de Visual Studio, expanda el nodo Galería de elementos web , que aparece bajo el nodo del sitio de nivel superior.
Compruebe que el código de la otra instancia de Visual Studio se detiene en el punto de interrupción que estableció anteriormente en el método CreateWebPartNodes , y elija la tecla F5 para continuar y depurar el proyecto.
En la instancia experimental de Visual Studio, compruebe que todos los elementos web del sitio conectado aparecen bajo el nodo Galería de elementos web en el Explorador de servidores.
Abrir el menú contextual para un elemento web y, a continuación Propiedades.
En la ventana Propiedades , compruebe que aparecen los detalles sobre el elemento web.
En Explorador de servidores, abra el menú contextual para el mismo elemento web y, a continuación Mensaje de la pantalla.
En el cuadro de mensaje que aparece, elija el botón Aceptar .
Desinstalar la extensión de Visual Studio
Después de probar la extensión, desinstalela de Visual Studio.
Para desinstalar la extensión
En la instancia experimental de Visual Studio, en la barra de menú, elija Herramientas, Extensiones y actualizaciones.
El cuadro de diálogo Extensiones y actualizaciones abra.
En la lista de extensiones, elija Nodo galería de elementos web para el Explorador de servidores, y elija el botón Desinstalar .
En el cuadro de diálogo que aparece, elija el botón Sí .
Elija el botón Reiniciar ahora para completar la desinstalación.
También se desinstala el elemento de proyecto.
Cierre ambas instancias de Visual Studio (la instancia experimental y la instancia de Visual Studio en la que la solución nodoelementoweb está abierto).
Vea también
Tareas
Tutorial: Extender el Explorador de servidores para mostrar elementos web
Crear un icono u otra imagen (Editor de imágenes para iconos)
Referencia
Editor de imágenes para iconos
Conceptos
Llamar a los modelos de objetos de SharePoint
Otros recursos
Extender el nodo Conexiones de SharePoint en el Explorador de servidores