Partager via


Procédure pas à pas : extension de l'Explorateur de serveurs pour afficher des WebParts

Dans Visual Studio 2010, vous pouvez tirer parti du nœud Connexions SharePoint de l'Explorateur de serveurs pour examiner des composants sur les sites SharePoint. Cependant, les composants ne sont pas tous affichés par défaut dans l'Explorateur de serveurs. Au cours de cette procédure pas à pas, vous apprendrez à développer l'Explorateur de serveurs de manière à obtenir une vue de la galerie de composants WebPart sur chaque site SharePoint connecté.

Cette procédure pas à pas présente les tâches suivantes :

  • Création d'une extension Visual Studio offrant les capacités supplémentaires suivantes à l'Explorateur de serveurs :

    • Ajout d'un nouveau nœud Galerie de composants WebPart sous chaque nœud de site SharePoint dans l'Explorateur de serveurs. Ce nouveau nœud contient les nœuds enfants représentant chaque composant WebPart dans la galerie de composants WebPart sur le site.

    • Définition d'un nouveau type de nœud représentant une instance WebPart. Ce nouveau type de nœud constitue la base des nœuds enfants sous le nouveau nœud Galerie de composants WebPart. Le nouveau type de nœud WebPart affiche les informations relatives au composant WebPart qu'il représente dans la fenêtre Propriétés. Le type de nœud inclut également un élément de menu contextuel personnalisé très pratique pour commencer à réaliser d'autres tâches se rapportant au composant WebPart.

  • Création de deux commandes SharePoint personnalisées appelées par l'assembly d'extension. Les commandes SharePoint sont des méthodes susceptibles d'être appelées par les assemblys d'extension en vue d'utiliser des API dans le modèle objet serveur SharePoint. Dans cette procédure pas à pas, vous allez apprendre à créer des commandes utilisées pour extraire les informations WebPart du site SharePoint local sur l'ordinateur de développement. Pour plus d'informations, consultez Appel des modèles d'objet SharePoint.

  • Génération d'un package VSIX (Visual Studio Extension) pour déployer l'extension.

  • Débogage et test de l'extension.

Notes

Pour obtenir une autre version de cette procédure pas à pas qui utilise le modèle d'objet client SharePoint au lieu du modèle d'objet serveur, consultez Procédure pas à pas : appel du modèle d'objet client SharePoint à partir d'une extension de l'Explorateur de serveurs.

Composants requis

Vous avez besoin des composants suivants sur l'ordinateur de développement pour terminer cette procédure pas à pas :

Une connaissance des concepts suivants est utile, mais pas obligatoire, pour effectuer cette procédure pas à pas :

Création du projet

Pour exécuter cette procédure pas à pas, vous devez créer trois projets :

  • Un projet VSIX pour créer le package VSIX afin de déployer l'extension.

  • Un projet de bibliothèque de classes qui implémente l'extension. Ce projet doit cibler le .NET Framework 4.

  • Un projet de bibliothèque de classes qui définit les commandes SharePoint personnalisées. Ce projet doit cibler .NET Framework 3.5.

Démarrez la procédure pas à pas en créant les projets.

Pour créer le projet VSIX

  1. Démarrez Visual Studio.

  2. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  3. Dans la boîte de dialogue Nouveau projet, développez les nœuds Visual C# ou Visual Basic, puis sélectionnez le nœud Extensibilité.

    Notes

    Le nœud Extensibilité est disponible uniquement si vous installez le Kit de développement Visual Studio 2010 SDK. Pour plus d'informations, reportez-vous à la section traitant des conditions requises ci-dessus.

  4. Dans la zone de liste déroulante en haut de la boîte de dialogue, sélectionnez .NET Framework 4.

  5. Sélectionnez le modèle Projet VSIX.

  6. Dans la zone Nom, tapez WebPartNode.

  7. Cliquez sur OK.

    Visual Studio ajoute le projet WebPartNode à l'Explorateur de solutions.

Pour créer le projet d'extension

  1. Cliquez avec le bouton droit sur le nœud de la solution dans l'Explorateur de solutions, cliquez sur Ajouter, puis sur Nouveau projet.

    Notes

    Dans les projets Visual Basic, le nœud de la solution s'affiche dans l'Explorateur de solutions à condition d'avoir activé la case à cocher Toujours afficher la solution dans la Général, Projets et solutions, boîte de dialogue Options.

  2. Dans la boîte de dialogue Nouveau projet, développez le nœud Visual C# ou Visual Basic, puis cliquez sur Fenêtres.

  3. Dans la zone de liste déroulante en haut de la boîte de dialogue, sélectionnez .NET Framework 4.

  4. Sélectionnez le modèle de projet Bibliothèque de classes.

  5. Dans la zone de texte Nom, tapez WebPartNodeExtension.

  6. Cliquez sur OK.

    Visual Studio ajoute le projet WebPartNodeExtension à la solution et ouvre le fichier de code Class1 par défaut.

  7. Supprimez le fichier de code Class1 du projet.

Pour créer le projet de commandes SharePoint

  1. Cliquez avec le bouton droit sur le nœud de la solution dans l'Explorateur de solutions, cliquez sur Ajouter, puis sur Nouveau projet.

    Notes

    Dans les projets Visual Basic, le nœud de la solution s'affiche dans l'Explorateur de solutions à condition d'avoir activé la case à cocher Toujours afficher la solution dans la Général, Projets et solutions, boîte de dialogue Options.

  2. Dans la boîte de dialogue Nouveau projet, développez le nœud Visual C# ou Visual Basic, puis cliquez sur Fenêtres.

  3. Dans la zone de liste déroulante en haut de la boîte de dialogue, sélectionnez .NET Framework 3.5.

  4. Sélectionnez le modèle de projet Bibliothèque de classes.

  5. Dans la zone Nom, tapez WebPartCommands.

  6. Cliquez sur OK.

    Visual Studio ajoute le projet WebPartCommands à la solution et ouvre le fichier de code Class1 par défaut.

  7. Supprimez le fichier de code Class1 du projet.

Configuration des projets

Avant d'écrire le code pour créer l'extension, vous devez ajouter des fichiers de code et des références d'assembly, puis configurer les paramètres de projet.

Pour configurer le projet WebPartNodeExtension

  1. Dans le projet WebPartNodeExtension, ajoutez quatre fichiers de code portant les noms suivants :

    • SiteNodeExtension

    • WebPartNodeTypeProvider

    • WebPartNodeInfo

    • WebPartCommandIds

  2. Dans le menu Projet, cliquez sur Ajouter une référence.

  3. Sous l'onglet .NET, appuyez sur Ctrl et sélectionnez les assemblys suivants, puis cliquez sur OK.

    • Microsoft.VisualStudio.SharePoint

    • System.ComponentModel.Composition

    • System.Windows.Forms

  4. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet WebPartNodeExtension, puis sélectionnez Propriétés.

    Le Concepteur de projets s'ouvre.

  5. Cliquez sur l'onglet Application.

  6. Dans la zone Espace de noms par défaut (C#) ou Espace de noms racine (Visual Basic), tapez ServerExplorer.SharePointConnections.WebPartNode.

Pour configurer le projet WebPartCommands

  1. Dans le projet WebPartCommands, ajoutez un fichier de code appelé WebPartCommands.

  2. Dans l'Explorateur de solutions, sélectionnez le nœud de projet WebPartCommands.

  3. Dans le menu Projet, cliquez sur Ajouter un élément existant.

  4. Dans la boîte de dialogue Ajouter un élément existant, recherchez le dossier contenant les fichiers de code pour le projet WebPartNodeExtension.

  5. Sélectionnez les fichiers de code WebPartNodeInfo et WebPartCommandIds.

  6. Cliquez sur le menu déroulant au niveau du bouton Ajouter et sélectionnez Ajouter en tant que lien.

    Visual Studio ajoute les fichiers de code au projet WebPartCommands en tant que liens. Cela signifie que les fichiers de code font partie du projet WebPartNodeExtension, mais que le code des fichiers est également compilé dans le projet WebPartCommands.

  7. Dans le menu Projet, cliquez sur Ajouter une référence.

  8. Sous l'onglet .NET, appuyez sur Ctrl et sélectionnez les assemblys suivants, puis cliquez sur OK.

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

  9. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet WebPartCommands, puis sélectionnez Propriétés.

    Le Concepteur de projets s'ouvre.

  10. Cliquez sur l'onglet Application.

  11. Dans la zone Espace de noms par défaut (C#) ou Espace de noms racine (Visual Basic), tapez ServerExplorer.SharePointConnections.WebPartNode.

Création d'icônes pour les nouveaux nœuds

Créez deux icônes pour l'extension Explorateur de serveurs : une pour le nouveau nœud Galerie de composants WebPart, et une autre pour chaque nœud WebPart enfant sous le nœud Galerie de composants WebPart. Vous apprendrez un peu plus loin à écrire du code afin d'associer ces icônes aux nœuds.

Pour créer des icônes pour les nœuds

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud de projet WebPartNodeExtension, puis sélectionnez Propriétés.

  2. Dans le menu Projet, sélectionnez Propriétés de WebPartNodeExtension.

    Le Concepteur de projets s'ouvre.

  3. Cliquez sur l'onglet Ressources.

  4. Cliquez sur Ce projet ne contient pas de fichier de ressources par défaut. Cliquez ici pour créer un.

    Visual Studio crée un fichier de ressources et l'ouvre dans le concepteur.

  5. Dans la partie supérieure du concepteur, cliquez sur la flèche déroulante au niveau du bouton Ajouter, puis cliquez sur Ajouter une nouvelle icône.

  6. Donnez le nom WebPartsNode à la nouvelle icône, puis cliquez sur Ajouter.

    La nouvelle icône s'ouvre dans l'Éditeur d'images.

  7. Modifiez la version 16x16 de l'icône de manière à reconnaître facilement son design.

  8. Sélectionnez la version 32x32 de l'icône.

  9. Dans le menu Image, cliquez sur Supprimer le type d'image.

  10. Répétez les étapes 5 à 9 pour ajouter une deuxième icône aux ressources du projet. Nommez cette icône WebPart.

  11. Dans l'Explorateur de solutions, sous le dossier Ressources du projet WebPartNodeExtension, sélectionnez WebPartsNode.ico.

  12. Dans la fenêtre Propriétés, cliquez sur la liste déroulante en regard de la propriété Action de génération, puis sélectionnez Ressource incorporée.

  13. Répétez les deux dernières étapes pour WebPart.ico.

Ajout du nœud Galerie de composants WebPart à l'Explorateur de serveurs

Créez une classe ayant pour effet d'ajouter le nouveau nœud Galerie de composants WebPart à chaque nœud du site SharePoint. Pour ajouter le nouvel nœud, la classe implémente l'interface IExplorerNodeTypeExtension. Mettez en œuvre cette interface chaque fois que vous comptez améliorer le comportement d'un nœud existant dans l'Explorateur de serveurs, comme lorsque vous ajoutez un nouveau nœud enfant à un nœud.

Pour ajouter le nœud Galerie de composants WebPart à l'Explorateur de serveurs

  1. Dans le projet WebPartNodeExtension, double-cliquez sur le fichier de code SiteNodeExtension.

  2. Collez le code suivant dans ce fichier.

    Notes

    Après l'ajout de ce code, le projet comportera des erreurs de compilation. Ces erreurs disparaîtront lorsque vous ajouterez du code dans les étapes ultérieures.

    Imports System.Collections.Generic
    Imports System.ComponentModel.Composition
    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.
        ' WebPartNodeTypeProvider class: Represents an extension of SharePoint site nodes in Server Explorer.
        <Export(GetType(IExplorerNodeTypeExtension))> _
        <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _
        Friend Class SiteNodeExtension
            Implements IExplorerNodeTypeExtension
    
            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)
    
                ' 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 all of the individual Web Part nodes under the new Web Part Gallery node.
            Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode)
    
                ' Call the custom SharePoint command to get items from the Web Part gallery.
                Dim webParts = parentNode.Context.SharePointConnection.ExecuteCommand(Of WebPartNodeInfo())( _
                    WebPartCommandIds.GetWebParts)
                If webParts IsNot Nothing Then
                    For Each webPart As WebPartNodeInfo 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(WebPartNodeInfo), webPart)
    
                        ' Create the new node for the current Web Part item.
                        parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _
                            webPart.Name, annotations)
                    Next
                End If
            End Sub
    
        End Class
    End Namespace
    
    using System.Collections.Generic;
    using System.ComponentModel.Composition;
    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
        {
            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)
            {
                // 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 all of the individual Web Part nodes under the new Web Part Gallery node.
            private void CreateWebPartNodes(IExplorerNode parentNode)
            {
                // Call the custom SharePoint command to get items from the Web Part gallery.
                var webParts = parentNode.Context.SharePointConnection.ExecuteCommand<WebPartNodeInfo[]>(
                    WebPartCommandIds.GetWebParts);
    
                if (webParts != null)
                {
                    foreach (WebPartNodeInfo 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(WebPartNodeInfo), webPart } 
                        };
    
                        // Create the new node for the current Web Part item.
                        parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId,
                            webPart.Name, annotations);
                    }
                }
            }
        }
    }
    

Définition d'un type de nœud représentant un composant WebPart

Créez une classe ayant pour effet de définir un nouveau type de nœud représentant un composant WebPart. Ce nouveau type de nœud est utilisé par Visual Studio pour afficher les nœuds enfants sous le nœud Galerie de composants WebPart. Chacun de ces nœuds enfants représente un composant WebPart unique sur le site SharePoint.

Pour définir le nouveau type de nœud, la classe implémente l'interface IExplorerNodeTypeProvider. Mettez en œuvre cette interface chaque fois que vous comptez définir un type nouveau de nœud dans l'Explorateur de serveurs.

Pour définir le type de nœud des composants WebPart

  1. Dans le projet WebPartNodeExtension, double-cliquez sur le fichier de code WebPartNodeTypeProvider.

  2. Collez le code suivant dans ce fichier.

    Imports System
    Imports System.Collections.Generic
    Imports System.Windows.Forms
    Imports System.ComponentModel.Composition
    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
            End Sub
    
            ' Retrieves properties that are displayed in the Properties window when
            ' a Web Part node is selected.
            Private Sub NodePropertiesRequested(ByVal Sernder As Object, _
                ByVal e As ExplorerNodePropertiesRequestedEventArgs)
    
                Dim nodeInfo = e.Node.Annotations.GetValue(Of WebPartNodeInfo)()
    
                ' Call the custom SharePoint command to get the Web Part properties.
                Dim properties As Dictionary(Of String, String) = _
                    e.Node.Context.SharePointConnection.ExecuteCommand( _
                    Of WebPartNodeInfo, Dictionary(Of String, String))(
                    WebPartCommandIds.GetWebPartProperties, nodeInfo)
                Dim propertySource As Object = e.Node.Context.CreatePropertySourceObject(properties)
                e.PropertySources.Add(propertySource)
            End Sub
    
        End Class
    End Namespace
    
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.ComponentModel.Composition;
    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;
            }
    
            // Retrieves properties that are displayed in the Properties window when
            // a Web Part node is selected.
            private void NodePropertiesRequested(object sender,
                ExplorerNodePropertiesRequestedEventArgs e)
            {
                var webPartNodeInfo = e.Node.Annotations.GetValue<WebPartNodeInfo>();
    
                // Call the custom SharePoint command to get the Web Part properties.
                Dictionary<string, string> properties =
                    e.Node.Context.SharePointConnection.ExecuteCommand<
                    WebPartNodeInfo, Dictionary<string, string>>(
                    WebPartCommandIds.GetWebPartProperties, webPartNodeInfo);
    
                object propertySource = e.Node.Context.CreatePropertySourceObject(properties);
                e.PropertySources.Add(propertySource);
            }
        }
    }
    

Définition de la classe de données WebPart

Définissez une classe contenant des données à propos d'un composant WebPart unique sur le site SharePoint. Un peu plus loin, vous aurez l'occasion de créer une commande SharePoint personnalisée ayant pour but d'extraire des données à propos de chaque composant WebPart sur le site et d'assigner les données aux instances de cette classe.

Pour définir la classe de données WebPart

  1. Dans le projet WebPartNodeExtension, double-cliquez sur le fichier de code WebPartNodeInfo.

  2. Collez le code suivant dans ce fichier.

    Imports System
    
    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        ' Contains basic data about a single Web Part on the SharePoint site. This class is 
        ' serializable so that instances of it can be sent between the WebPartNode and 
        ' WebPartCommands assemblies.
        <Serializable()> _
        Public Class WebPartNodeInfo
    
            Private siteIdValue As Guid
            Public Property SiteId As Guid
                Get
                    Return siteIdValue
                End Get
                Set(ByVal value As Guid)
                    siteIdValue = value
                End Set
            End Property
    
            Private idValue As Integer
            Public Property Id As Integer
                Get
                    Return idValue
                End Get
                Set(ByVal value As Integer)
                    idValue = value
                End Set
            End Property
    
            Private uniqueIdValue As Guid
            Public Property UniqueId As Guid
                Get
                    Return uniqueIdValue
                End Get
                Set(ByVal value As Guid)
                    uniqueIdValue = value
                End Set
            End Property
    
            Private nameValue As String
            Public Property Name As String
                Get
                    Return nameValue
                End Get
                Set(ByVal value As String)
                    nameValue = value
                End Set
            End Property
    
            Private imageUrlValue As String
            Public Property ImageUrl As String
                Get
                    Return imageUrlValue
                End Get
                Set(ByVal value As String)
                    imageUrlValue = value
                End Set
            End Property
    
        End Class
    End Namespace
    
    using System;
    
    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        // Contains basic data about a single Web Part on the SharePoint site. This class is 
        // serializable so that instances of it can be sent between the WebPartNode and 
        // WebPartCommands assemblies.
        [Serializable]
        public class WebPartNodeInfo
        {
            public Guid SiteId { get; set; }
            public int Id { get; set; }
            public Guid UniqueId { get; set; }
            public string Name { get; set; }
            public string ImageUrl { get; set; }
        }
    }
    

Définition des ID pour la commande SharePoint

Définissez plusieurs chaînes qui identifient les commandes SharePoint personnalisées. Vous implémenterez ces commandes à une étape ultérieure de cette procédure.

Pour définir les ID de commande

  1. Dans le projet WebPartNodeExtension, double-cliquez sur le fichier de code WebPartCommandIds.

  2. Collez le code suivant dans ce fichier.

    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        Public Class WebPartCommandIds
            Public Const GetWebParts As String = "WebPart.GetWebParts"
            Public Const GetWebPartProperties As String = "WebPart.GetProperties"
        End Class
    
    End Namespace
    
    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        public static class WebPartCommandIds
        {
            public const string GetWebParts = "WebPart.GetWebParts";
            public const string GetWebPartProperties = "WebPart.GetProperties";
        }
    }
    

Création de commandes SharePoint personnalisées

Créez des commandes personnalisées faisant appel au modèle d'objet serveur SharePoint pour extraire des données à propos des composants WebPart sur le site SharePoint. Chaque commande est une méthode à laquelle s'applique SharePointCommandAttribute.

Pour définir les commandes SharePoint

  1. Dans le projet WebPartCommands, double-cliquez sur le fichier de code WebPartCommands.

  2. Collez le code suivant dans ce fichier.

    Imports System.Collections.Generic
    Imports Microsoft.SharePoint
    Imports Microsoft.VisualStudio.SharePoint.Commands
    
    Namespace ServerExplorer.SharePointConnections.WebPartNode
    
        Friend Class WebPartsCommands
    
            ' Gets data for each Web Part on the SharePoint site, and returns an array of 
            ' serializable objects that contain the data.
            <SharePointCommand(WebPartCommandIds.GetWebParts)> _
            Private Shared Function GetWebParts(ByVal context As ISharePointCommandContext) As WebPartNodeInfo()
    
                Dim nodeInfos = New List(Of WebPartNodeInfo)()
                Dim webParts As SPListItemCollection = context.Site.GetCatalog( _
                    SPListTemplateType.WebPartCatalog).Items
    
                For Each webPart As SPListItem In webParts
                    Dim nodeInfo As WebPartNodeInfo = New WebPartNodeInfo()
                    With nodeInfo
                        .Id = webPart.ID
                        .SiteId = webPart.ParentList.ParentWeb.ID
                        .Name = webPart.Title
                        .UniqueId = webPart.UniqueId
                        .ImageUrl = webPart.ParentList.ImageUrl
                    End With
                    nodeInfos.Add(nodeInfo)
                Next
                Return nodeInfos.ToArray()
            End Function
    
            ' Gets additional property data for a specific Web Part.
            <SharePointCommand(WebPartCommandIds.GetWebPartProperties)> _
            Private Shared Function GetWebPartProperties(ByVal context As ISharePointCommandContext, _
                ByVal webPartNodeInfo As WebPartNodeInfo) As Dictionary(Of String, String)
    
                Dim webParts As SPList = context.Site.GetCatalog(SPListTemplateType.WebPartCatalog)
                Dim webPart As SPListItem = webParts.Items(webPartNodeInfo.UniqueId)
                Return SharePointCommandServices.GetProperties(webPart)
            End Function
        End Class
    End Namespace
    
    using System.Collections.Generic;
    using Microsoft.SharePoint;
    using Microsoft.VisualStudio.SharePoint.Commands;
    
    namespace ServerExplorer.SharePointConnections.WebPartNode
    {
        internal class WebPartsCommands
        {
            // Gets data for each Web Part on the SharePoint site, and returns an array of 
            // serializable objects that contain the data.
            [SharePointCommand(WebPartCommandIds.GetWebParts)]
            private static WebPartNodeInfo[] GetWebParts(ISharePointCommandContext context)
            {
                var nodeInfos = new List<WebPartNodeInfo>();
                SPListItemCollection webParts = context.Site.GetCatalog(
                    SPListTemplateType.WebPartCatalog).Items;
    
                foreach (SPListItem webPart in webParts)
                {
                    WebPartNodeInfo nodeInfo = new WebPartNodeInfo
                    {
                        Id = webPart.ID,
                        SiteId = webPart.ParentList.ParentWeb.ID,
                        Name = webPart.Title,
                        UniqueId = webPart.UniqueId,
                        ImageUrl = webPart.ParentList.ImageUrl
                    };
                    nodeInfos.Add(nodeInfo);
                }
    
                return nodeInfos.ToArray();
            }
    
            // Gets additional property data for a specific Web Part.
            [SharePointCommand(WebPartCommandIds.GetWebPartProperties)]
            private static Dictionary<string, string> GetWebPartProperties(ISharePointCommandContext context, 
                WebPartNodeInfo nodeInfo)
            {
                SPList webParts = context.Site.GetCatalog(SPListTemplateType.WebPartCatalog);
                SPListItem webPart = webParts.Items[nodeInfo.UniqueId];
    
                return SharePointCommandServices.GetProperties(webPart);
            }
        }
    }
    

Point de contrôle

À ce stade de la procédure, l'intégralité du code pour le nœud Galerie de composants WebPart et les commandes SharePoint font désormais partie des projets. Générez la solution pour vous assurer que la compilation des deux projets se déroule sans erreur.

Pour générer la solution

  • Dans le menu Générer, sélectionnez Générer la solution.

Création d'un package VSIX pour déployer l'extension

Pour déployer l'extension, utilisez le projet VSIX inclus dans votre solution pour créer un package VSIX. En premier lieu, configurez le package VSIX en modifiant le fichier source.extension.vsixmanifest qui est inclus dans le projet VSIX. Ensuite, créez le package VSIX en générant la solution.

Pour configurer le package VSIX

  1. Dans l'Explorateur de solutions, sous le projet WebPartNode, double-cliquez sur le fichier source.extension.vsixmanifest.

    Visual Studio ouvre le fichier dans l'éditeur de manifeste. Le fichier source.extension.vsixmanifest est la base du fichier extension.vsixmanifest requis par tous les packages VSIX. Pour plus d'informations sur ce fichier, consultez VSIX Extension Schema Reference.

  2. Dans la zone Nom du produit, tapez Extension du nœud Galerie de composants WebPart pour l'Explorateur de serveurs.

  3. Dans la zone Auteur, tapez Contoso.

  4. Dans la zone Description, tapez Ajoute un nœud personnalisé Galerie de composants WebPart au nœud Connexions Sharepoint dans l'Explorateur de serveurs. Cette extension a recours à une commande SharePoint personnalisée pour effectuer un appel dans le modèle d'objet serveur.

  5. Dans la section Contenu de l'éditeur, cliquez sur le bouton Ajouter du contenu.

  6. Dans la boîte de dialogue Ajouter du contenu, dans la zone de liste Sélectionner un type de contenu, sélectionnez Composant MEF.

    Notes

    Cette valeur correspond à l'élément MefComponent dans le fichier extension.vsixmanifest. Cet élément spécifie le nom d'un assembly d'extension dans le package VSIX. Pour plus d'informations, consultez MEFComponent Element (VSX Schema).

  7. Sous Sélectionner une source, cliquez sur la case d'option Projet et sélectionnez WebPartNodeExtension dans la zone de liste en regard de cette dernière.

  8. Cliquez sur OK.

  9. Dans l'éditeur de manifeste, cliquez à nouveau sur le bouton Ajouter du contenu.

  10. Dans la boîte de dialogue Ajouter du contenu, dans la zone de liste Sélectionner un type de contenu, sélectionnez Type d'extension personnalisée.

    Notes

    Cette valeur correspond à l'élément CustomExtension dans le fichier extension.vsixmanifest. Cet élément désigne l'extension personnalisée à inclure à l'extension Visual Studio. Pour plus d'informations, consultez CustomExtension Element (VSX Schema).

  11. Dans la zone de texte Type, tapez SharePoint.Commands.v4.

    Notes

    Cette valeur correspond à l'attribut Type de l'élément CustomExtension dans le fichier extension.vsixmanifest. La valeur Sharepoint.Commands.v4 est obligatoire pour tous les assemblys d'extension personnalisés qui contiennent des commandes SharePoint personnalisées.

  12. Sous Sélectionner une source, cliquez sur la case d'option Projet et sélectionnez WebPartCommands dans la zone de liste en regard de cette dernière.

  13. Cliquez sur OK.

  14. Dans le menu Générer, cliquez sur Générer la solution. Assurez-vous que la solution se compile sans erreurs.

  15. Ouvrez le dossier de sortie de la génération pour le projet WebPartNode. Assurez-vous que ce dossier contient, à présent, le fichier WebPartNode.vsix.

    Par défaut, le dossier de sortie de la génération est le dossier .. \bin\Debug sous le dossier qui contient votre fichier projet.

Test de l'extension

Vous êtes maintenant prêt à tester le nouveau nœud Galerie de composants WebPart dans l'Explorateur de serveurs. Tout d'abord, commencez à déboguer l'extension dans une instance expérimentale de Visual Studio. Ensuite, utilisez le nouveau nœud WebPart dans l'instance expérimentale de Visual Studio.

Pour démarrer le débogage de l'extension

  1. Redémarrez Visual Studio avec les privilèges d'administrateur et ouvrez la solution WebPartNode.

  2. Dans le projet WebPartNodeExtension, ouvrez le fichier de code SiteNodeExtension et ajoutez un point d'arrêt au niveau de la première ligne de code dans les méthodes NodeChildrenRequested et CreateWebPartNodes.

  3. Appuyez sur F5 pour démarrer le débogage.

    Visual Studio installe l'extension sous %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Extension du nœud Galerie de composants WebPart pour l'Explorateur de serveurs\1.0 et démarre une instance expérimentale de Visual Studio. Vous testerez l'élément de projet dans cette instance de Visual Studio.

Pour tester l'extension

  1. Dans l'instance expérimentale de Visual Studio, dans le menu Affichage, cliquez sur Explorateur de serveurs.

  2. Assurez-vous que le site SharePoint réservé au test s'affiche sous le nœud Connexions SharePoint dans l'Explorateur de serveurs. Dans le cas contraire, procédez comme suit :

    1. Cliquez avec le bouton droit sur le nœud Connexions SharePoint, puis cliquez sur Ajouter une connexion.

    2. Dans la boîte de dialogue Ajouter une connexion SharePoint, entrez l'URL du site SharePoint auquel vous souhaitez vous connecter. Pour spécifier le site SharePoint sur votre ordinateur de développement, tapez https://localhost.

    3. Cliquez sur OK.

  3. Développez le nœud de connexion de site (nœud qui affiche l'URL de votre site), puis un nœud de site enfant (par exemple, Site d'équipe).

  4. Assurez-vous que le code dans l'autre instance de Visual Studio s'immobilise sur le point d'arrêt que vous avez défini précédemment dans la méthode NodeChildrenRequested. Appuyez sur F5 pour continuer de déboguer le projet.

  5. Dans l'instance expérimentale de Visual Studio, vérifiez qu'un nouveau nœud nommé Galerie de composants WebPart apparaît sous le nœud de site de niveau supérieur. Développez le nœud Galerie de composants WebPart.

  6. Assurez-vous que le code dans l'autre instance de Visual Studio s'arrête au niveau du point d'arrêt que vous avez défini précédemment dans la méthode CreateWebPartNodes. Appuyez sur F5 pour continuer de déboguer le projet.

  7. Dans l'instance expérimentale de Visual Studio, assurez-vous que tous les composants WebPart sur le site connecté s'affichent sous le nœud Galerie de composants WebPart dans l'Explorateur de serveurs.

  8. Cliquez avec le bouton droit sur l'un des composants WebPart et cliquez sur Propriétés.

  9. Dans l'instance Visual Studio que vous déboguez, vérifiez si les détails à propos du composant WebPart figurent dans la fenêtre Propriétés.

Désinstallation de l'extension de Visual Studio

Une fois le test de l'extension terminé, désinstallez l'extension de Visual Studio.

Pour désinstaller l'extension

  1. Dans l'instance expérimentale de Visual Studio, dans le menu Outils, cliquez sur Gestionnaire d'extensions.

    La boîte de dialogue Gestionnaire d'extensions s'ouvre.

  2. Dans la liste d'extensions, sélectionnez Extension du nœud Galerie de composants WebPart pour l'Explorateur de serveurs, puis cliquez sur Désinstaller.

  3. Dans la boîte de dialogue qui s'affiche, cliquez sur Oui pour confirmer que vous voulez désinstaller l'extension.

  4. Cliquez sur Redémarrer maintenant pour terminer l'installation.

  5. Fermez les deux instances de Visual Studio (l'instance expérimentale et l'instance de Visual Studio dans laquelle la solution WebPartNode est ouverte).

Voir aussi

Tâches

Procédure pas à pas : appel du modèle d'objet client SharePoint à partir d'une extension de l'Explorateur de serveurs

Création d'une nouvelle bitmap ou d'une autre image

Référence

Éditeur d'images

Autres ressources

Extension du nœud Connexions SharePoint dans l'Explorateur de serveurs