Partager via


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

Dans Visual Studio, vous pouvez utiliser le nœud Connexions SharePointExplorateur de serveurs pour afficher des composants sur les sites sharepoint.Toutefois, Explorateur de serveurs n'affiche pas certains composants par défaut.Dans cette procédure pas - à - pas, vous étendez Explorateur de serveurs afin qu'il affiche 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 :

    • L'extension ajoute un nœud galerie de composants WebPart sous chaque nœud de site SharePoint dans 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.

    • L'extension définit un nouveau type de nœud représentant une instance du composant 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é que vous pouvez utiliser comme point de départ pour effectuer d'autres tâches relatives au composant WebPart.

  • Création de deux commandes SharePoint personnalisées que le l'assembly d'extension appelle.Les commandes SharePoint sont des méthodes susceptibles d'être appelées par des assemblys d'extension pour utiliser des API dans le modèle d'objet serveur pour 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.

[!REMARQUE]

Pour une autre version de cette procédure pas - à - pas qui utilise le modèle d'objet client pour SharePoint au lieu de son 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, 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 .NET Framework 4,5.

  • 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 la barre de menus, sélectionnez Fichier, Nouveau, 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é .

    [!REMARQUE]

    Le nœud Extensibilité est disponible uniquement si vous installez le kit de développement Visual Studio.Pour plus d'informations, consultez la section des composants requis plus haut dans cette rubrique.

  4. En haut de la boîte de dialogue, choisissez .NET Framework 4,5 dans la liste des versions du .NET Framework.

  5. Sélectionnez le modèle projet VSIX , nommez le projet WebPartNode, puis choisissez le bouton OK .

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

Pour créer le projet d'extension

  1. Dans Explorateur de solutions, ouvrez le menu contextuel du nœud de solution, choisissez Ajouter, puis choisissez Nouveau projet.

    [!REMARQUE]

    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 General, Projects and Solutions, Options Dialog Box.

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

  3. En haut de la boîte de dialogue, choisissez .NET Framework 4,5 dans la liste des versions du .NET Framework.

  4. Dans la liste des modèles de projet, choisissez Bibliothèque de classes, nommez le projet WebPartNodeExtension, puis choisissez le bouton OK .

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

  5. Supprimez le fichier de code Class1 du projet.

Pour créer le projet de commandes SharePoint

  1. Dans Explorateur de solutions, ouvrez le menu contextuel du nœud de solution, choisissez Ajouter, puis choisissez Nouveau projet.

    [!REMARQUE]

    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 General, Projects and Solutions, Options Dialog Box.

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

  3. En haut de la boîte de dialogue, choisissez .NET Framework 3.5 dans la liste des versions du .NET Framework.

  4. Dans la liste des modèles de projet, choisissez Bibliothèque de classes, nommez le projet WebPartCommands, puis choisissez le bouton OK .

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

  5. 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, et configurez les paramètres du 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. Ouvrez le menu contextuel du projet WebPartNodeExtension , puis choisissez Ajouter une référence.

  3. Dans la boîte de dialogue gestionnaire de référence – WebPartNodeExtension , sélectionnez l'onglet framework , puis activez la case à cocher pour chacun des assemblys suivants :

    • System.ComponentModel.Composition

    • System.Windows.Forms

  4. Sélectionnez l'onglet Extensions , activez la case à cocher pour l'assembly Microsoft.VisualStudio.SharePoint, puis choisissez le bouton OK .

  5. Dans Explorateur de solutions, ouvrez le menu contextuel du nœud de projet WebPartNodeExtension , puis choisissez Propriétés.

    Le Concepteur de projets s'ouvre.

  6. Choisissez Application tableau.

  7. Dans la zone Est la valeur par défaut l'espace de noms (C#) ou la zone L'espace de noms racine (Visual Basic), entrez ServerExplorer.SharePointConnections.WebPartNode.

Pour configurer le projet WebPartCommands

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

  2. Dans Explorateur de solutions, ouvrez le menu contextuel du nœud de projet WebPartCommands , choisissez Ajouter, puis choisissez élément existant.

  3. Dans la boîte de dialogue Ajouter un élément existant , accédez au dossier qui contient les fichiers de code pour le projet WebPartNodeExtension, et des fichiers puis choisissez de WebPartNodeInfo et WebPartCommandIds code.

  4. Cliquez sur la flèche en regard de le bouton Ajouter , puis choisissez Ajoutez en tant que lien dans le menu qui s'affiche.

    Visual Studio ajoute les fichiers de code au projet WebPartCommands en tant que liens.Par conséquent, les fichiers de code se trouvent dans le projet WebPartNodeExtension, mais le code dans les fichiers sont également compilés dans le projet WebPartCommands.

  5. Ouvrez le menu contextuel du projet WebPartCommands de nouveau, puis choisissez Ajouter une référence.

  6. Dans la boîte de dialogue gestionnaire de référence – WebPartCommands , sélectionnez l'onglet Extensions , activez la case à cocher pour les assemblys suivants, puis choisissez le bouton OK :

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

  7. Dans Explorateur de solutions, ouvrez le menu contextuel du projet WebPartCommands de nouveau, puis choisissez Propriétés.

    Le Concepteur de projets s'ouvre.

  8. Choisissez Application tableau.

  9. Dans la zone Est la valeur par défaut l'espace de noms (C#) ou la zone L'espace de noms racine (Visual Basic), entrez 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 Explorateur de solutions, ouvrez le menu contextuel du projet WebPartNodeExtension , puis choisissez Propriétés.

  2. Le Concepteur de projets s'ouvre.

  3. Sélectionnez l'onglet de ressources, puis choisissez le ce projet ne contient pas de fichier de ressources par défaut. Cliquez ici pour créer un lien.

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

  4. En haut du concepteur, cliquez sur la flèche en regard de la commande de menu ajoutez la ressource , puis choisissez ajoutez la nouvelle icône dans le menu qui s'affiche.

  5. Dans la boîte de dialogue ajoutez la nouvelle ressource , nommez la nouvelle icône WebPartsNode, puis choisissez le bouton Ajouter .

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

  6. Modifiez la version 16x16 de l'icône afin qu'elle ait une conception que vous pouvez facilement identifier.

  7. Ouvrez le menu contextuel pour la version 32x32 de l'icône, puis choisissez supprimez le type d'image.

  8. Répétez les étapes 5 à 8 pour ajouter une deuxième icône aux ressources du projet, puis nommez cette icône Composant WebPart.

  9. Dans Explorateur de solutions, sous le dossier ressources pour le projet WebPartNodeExtension , ouvrez le menu contextuel pour WebPartsNode.ico.

  10. Dans la fenêtre Propriétés , cliquez sur la flèche en regard Action de génération, puis choisissez ressource incorporée dans le menu qui s'affiche.

  11. 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.Implémentez cette interface chaque fois que vous souhaitez étendre le comportement d'un nœud existant dans Explorateur de serveurs, par exemple ajouter un nœud enfant à un nœud.

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

  • Dans le projet WebPartNodeExtension, ouvrez le fichier de code SiteNodeExtension, puis collez le code suivant dans ce fichier.

    [!REMARQUE]

    Après avoir ajouté ce code, le projet comportera des erreurs de compilation, mais ils partiront lorsque vous ajoutez le 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.Visual Studio utilise ce nouveau type de nœud pour afficher des nœuds enfants sous le nœud galerie de composants WebPart .Chaque nœud enfant 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

  • Dans le projet WebPartNodeExtension, ouvrez le fichier de code de WebPartNodeTypeProvder, puis 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.À une étape ultérieure de cette procédure, vous allez créer une commande SharePoint personnalisée qui récupère des données sur chaque composant WebPart sur le site puis assigne les données aux instances de cette classe.

Pour définir la classe de données WebPart

  • Dans le projet WebPartNodeExtension, ouvrez le fichier de code WebPartNodeInfo, puis 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

  • Dans le projet WebPartNodeExtension, ouvrez le fichier de code WebPartCommandIds, puis 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 récupérer des données sur les composants webpart sur le site SharePoint.Chaque commande est une méthode à laquelle s'applique SharePointCommandAttribute.

Pour définir les commandes SharePoint

  • Dans le projet WebPartCommands, ouvrez le fichier de code WebPartCommands, puis 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 la barre de menus, sélectionnez Générer, Générer la solution.

    Mise en gardeAttention

    À ce stade, le projet WebPartNode peut avoir une erreur de build car le fichier manifeste VSIX n'a pas de valeur pour l'auteur.Cette erreur partira lorsque vous ajoutez une valeur dans les étapes ultérieures.

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.D'abord, configurez le package VSIX en modifiant le fichier source.extension.vsixmanifest du projet VSIX.Ensuite, créez le package VSIX en générant la solution.

Pour configurer le package VSIX

  1. Dans Explorateur de solutions, sous le projet WebPartNode, ouvrez le fichier source.extension.vsixmanifest dans l'éditeur de manifeste.

    Le fichier source.extension.vsixmanifest est la base du fichier extension.vsixmanifest que tous les packages VSIX ont besoin.Pour plus d'informations sur ce fichier, consultez Référence de schéma d'extensions VSIX.

  2. Dans la zone nom de produit , entrez Nœud galerie de composants WebPart pour l'explorateur de serveurs.

  3. Dans la zone Author , entrez Contoso.

  4. Dans la zone de description, entrez 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. Sélectionnez l'onglet Composants de l'éditeur, puis choisissez le bouton Nouveau .

    La boîte de dialogue ajoutez le nouveau ressource s'affiche.

  6. Dans la liste Type , choisissez Microsoft.VisualStudio.MefComponent.

    [!REMARQUE]

    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.

  7. Dans la liste Source , choisissez un projet dans la solution actuelle.

  8. Dans la liste Projet , choisissez WebPartNodeExtension puis choisissez le bouton OK .

  9. Dans l'éditeur de manifeste, choisissez le bouton Nouveau de nouveau.

    La boîte de dialogue ajoutez le nouveau ressource s'affiche.

  10. Dans la zone Type , entrez SharePoint.Commands.v4.

    [!REMARQUE]

    Cet élément désigne l'extension personnalisée à inclure à l'extension Visual Studio.Pour plus d’informations, consultez Élément de ressource (schéma VSX).

  11. Dans la liste Source , sélectionnez l'élément de liste un projet dans la solution actuelle .

  12. Dans la liste Projet , choisissez WebPartCommands, puis choisissez le bouton OK .

  13. Dans la barre de menus, sélectionnez Générer, Générer la solution, puis vérifiez que les compilations de solution sans erreur.

  14. Assurez -vous que le dossier de sortie de la génération pour le projet WebPartNode contient maintenant 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 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 informations d'identification d'administration, puis ouvrez la solution WebPartNode.

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

  3. Choisissez la touche F5 pour démarrer le débogage.

    Visual Studio installe l'extension sous %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.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 la barre de menus, sélectionnez Affichage, Explorateur de serveurs.

  2. Exécutez les étapes suivantes si le site SharePoint que vous souhaitez utiliser pour le test n'apparaît pas sous le nœud Connexions SharePoint dans Explorateur de serveurs:

    1. Dans Explorateur de serveurs, ouvrez le menu contextuel pour Connexions SharePoint, puis choisissez Ajouter une connexion.

    2. Dans la boîte de dialogue Ajoutez la connexion SharePoint , entrez l'URL du site SharePoint auquel vous souhaitez vous connecter, puis choisissez le bouton OK .

      Pour spécifier le site SharePoint sur votre ordinateur de développement, entrez https://localhost.

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

  4. Vérifiez que le code dans l'autre instance d' Visual Studio s'immobilise sur le point d'arrêt que vous avez défini précédemment dans la méthode d' NodeChildrenRequested , puis choisit sur F5 pour continuer à déboguer le projet.

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

  6. Vérifiez que le code dans l'autre instance de Visual Studio s'arrête au point d'arrêt que vous avez défini précédemment dans la méthode d' CreateWebPartNodes , puis sélectionne la touche F5 pour continuer à déboguer le projet.

  7. Dans l'instance expérimentale de Visual Studio, vérifiez que tous les composants webpart sur le site connecté s'affichent sous le nœud galerie de composants WebPart dans Explorateur de serveurs.

  8. Dans Explorateur de serveurs, ouvrez le menu contextuel pour un des composants webpart, puis choisissez Propriétés.

  9. Dans l'instance d' Visual Studio que vous déboguez, vérifiez que les informations relatives au composant WebPart s'affichent 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 la barre de menus, sélectionnez Outils, Extensions et mises à jour.

    La boîte de dialogue Extensions et mises à jour s'ouvre.

  2. Dans la liste d'extensions, choisissez Extension du nœud galerie de composants WebPart pour l'explorateur de serveurs, puis choisissez le bouton Désinstaller .

  3. Dans la boîte de dialogue qui s'affiche, cliquez sur le bouton oui pour confirmer que vous voulez désinstaller l'extension, puis choisissez le bouton Redémarrez maintenant pour terminer la désinstallation.

  4. 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 icône ou d'une autre image (Éditeur d'images pour les icônes)

Référence

Éditeur d'images pour les icônes

Autres ressources

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