Condividi tramite


Procedura dettagliata: estensione di Esplora server per visualizzare web part

In Visual Studio 2010 è possibile utilizzare il nodo Connessioni di SharePoint di Esplora server per visualizzare componenti nei siti di SharePoint. Per impostazione predefinita, tuttavia, alcuni componenti non vengono visualizzati da Esplora server. In questa procedura dettagliata si estenderà Esplora server in modo che visualizzi Raccolta web part in ogni sito di SharePoint connesso.

In questa procedura dettagliata vengono illustrate le attività seguenti:

  • Creazione di un'estensione di Visual Studio che estende Esplora server nei modi seguenti:

    • Aggiunge un nuovo nodo Raccolta web part sotto qualsiasi nodo del sito di SharePoint in Esplora server. In questo nuovo nodo sono contenuti nodi figlio che rappresentano ogni web part nella relativa raccolta sul sito.

    • Definisce un nuovo tipo di nodo che rappresenta un'istanza di web part. Questo nuovo tipo di nodo è la base dei nodi figlio sotto il nuovo nodo Raccolta web part. Nel nuovo tipo di nodo di web part vengono visualizzate le informazioni della finestra Proprietà relativa alla web part che rappresenta. Nel tipo di nodo è inclusa anche una voce di menu di scelta rapida personalizzata che è possibile utilizzare come punto iniziale per l'esecuzione di altre attività correlate alla web part.

  • Creazione di due comandi di SharePoint personalizzati chiamati dall'assembly delle estensioni. I comandi di SharePoint sono metodi che possono essere chiamati dagli assembly delle estensioni per utilizzare le API nel modello a oggetti del server SharePoint. In questa procedura dettagliata verranno creati comandi per recuperare informazioni sulla web part dal sito locale di SharePoint nel computer di sviluppo. Per ulteriori informazioni, vedere Chiamate ai modelli a oggetti di SharePoint.

  • Compilazione di un pacchetto Visual Studio Extension (VSIX) per distribuire l'estensione.

  • Debug e test dell'estensione.

Nota

Per una versione alternativa di questa procedura dettagliata che utilizza il modello a oggetti del client di SharePoint anziché il modello a oggetti del server, vedere Procedura dettagliata: chiamata al modello a oggetti del client di SharePoint in un'estensione di Esplora server.

Prerequisiti

Per completare la procedura dettagliata, nel computer di sviluppo devono essere presenti i componenti elencati di seguito:

Per completare la procedura dettagliata è consigliabile conoscere i concetti riportati di seguito:

Creazione dei progetti

Per completare questa procedura dettagliata è necessario creare tre progetti:

  • Un progetto VSIX per creare il pacchetto VSIX allo scopo di distribuire l'estensione.

  • Un progetto Libreria di classi che implementa l'estensione. Questo progetto deve essere destinato a .NET Framework 4.

  • Un progetto Libreria di classi che definisce i comandi di SharePoint personalizzati. Questo progetto deve essere destinato a .NET Framework 3.5.

Iniziare la procedura dettagliata creando i progetti.

Per creare il progetto VSIX

  1. Avviare Visual Studio.

  2. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  3. Nella finestra di dialogo Nuovo progetto espandere i nodi Visual C# o Visual Basic, quindi selezionare il nodo Extensibility.

    Nota

    Il nodo Extensibility è disponibile solo se si installa Visual Studio 2010 SDK. Per ulteriori informazioni, vedere la sezione dei prerequisiti riportata in precedenza.

  4. Selezionare .NET Framework 4 dalla casella combinata nella parte superiore della finestra di dialogo.

  5. Selezionare il modello VSIX Project.

  6. Nella casella Nome digitare WebPartNode.

  7. Fare clic su OK.

    Visual Studio aggiunge il progetto WebPartNode a Esplora soluzioni.

Per creare il progetto di estensione

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo della soluzione, scegliere Aggiungi, quindi Nuovo progetto.

    Nota

    Nei progetti di Visual Basic, il nodo della soluzione viene visualizzato in Esplora soluzioni solo quando la casella di controllo Mostra sempre soluzione viene selezionata in Finestra di dialogo Opzioni, Progetti e soluzioni, Generale.

  2. Nella finestra di dialogo Nuovo progetto espandere i nodi Visual C# o Visual Basic, quindi fare clic su Windows.

  3. Selezionare .NET Framework 4 dalla casella combinata nella parte superiore della finestra di dialogo.

  4. Selezionare il modello di progetto Libreria di classi.

  5. Nella casella Nome digitare WebPartNodeExtension.

  6. Fare clic su OK.

    In Visual Studio il progetto WebPartNodeExtension viene aggiunto alla soluzione e viene aperto il file di codice predefinito Class1.

  7. Eliminare il file di codice Class1 dal progetto.

Per creare il progetto di comandi di SharePoint

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo della soluzione, scegliere Aggiungi, quindi Nuovo progetto.

    Nota

    Nei progetti di Visual Basic, il nodo della soluzione viene visualizzato in Esplora soluzioni solo quando la casella di controllo Mostra sempre soluzione viene selezionata in Finestra di dialogo Opzioni, Progetti e soluzioni, Generale.

  2. Nella finestra di dialogo Nuovo progetto espandere i nodi Visual C# o Visual Basic, quindi fare clic su Windows.

  3. Selezionare .NET Framework 3.5 dalla casella combinata nella parte superiore della finestra di dialogo.

  4. Selezionare il modello di progetto Libreria di classi.

  5. Nella casella Nome digitare WebPartCommands.

  6. Scegliere OK.

    Visual Studio aggiunge il progetto WebPartCommands alla soluzione e apre il file di codice predefinito Class1.

  7. Eliminare il file di codice Class1 dal progetto.

Configurazione dei progetti

Prima di scrivere codice per creare l'estensione, è necessario aggiungere file di codice e riferimenti all'assembly, nonché configurare le impostazioni del progetto.

Per configurare il progetto WebPartNodeExtension

  1. Nel progetto WebPartNodeExtension aggiungere quattro file di codice con i nomi seguenti:

    • SiteNodeExtension

    • WebPartNodeTypeProvider

    • WebPartNodeInfo

    • WebPartCommandIds

  2. Scegliere Aggiungi riferimento dal menu Progetto.

  3. Nella scheda .NET premere CTRL e selezionare gli assembly seguenti, quindi fare clic su OK:

    • Microsoft.VisualStudio.SharePoint

    • System.ComponentModel.Composition

    • System.Windows.Forms

  4. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto WebPartNodeExtension, quindi selezionare Proprietà.

    Viene aperta la finestra Progettazione progetti.

  5. Scegliere la scheda Applicazione.

  6. Nella casella Spazio dei nomi predefinito (C#) o Spazio dei nomi radice (Visual Basic) digitare ServerExplorer.SharePointConnections.WebPartNode.

Per configurare il progetto WebPartCommands

  1. Nel progetto WebPartCommands aggiungere un file di codice denominato WebPartCommands.

  2. In Esplora soluzioni selezionare il nodo del progetto WebPartCommands.

  3. Scegliere Aggiungi elemento esistente dal menu Progetto.

  4. Nella finestra di dialogo Aggiungi elemento esistente individuare la cartella in cui sono contenuti i file di codice per il progetto WebPartNodeExtension.

  5. Selezionare i file di codice WebPartNodeInfo e WebPartCommandIds.

  6. Fare clic sul menu a discesa per il pulsante Aggiungi e selezionare Aggiungi come collegamento.

    Visual Studio aggiunge i file di codice al progetto WebPartCommands come collegamenti. Ciò significa che i file di codice si trovano nel progetto WebPartNodeExtension, ma il codice nei file è compilato anche nel progetto WebPartCommands.

  7. Scegliere Aggiungi riferimento dal menu Progetto.

  8. Nella scheda .NET premere CTRL e selezionare gli assembly seguenti, quindi fare clic su OK:

    • Microsoft.SharePoint

    • Microsoft.VisualStudio.SharePoint.Commands

  9. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto WebPartCommands, quindi selezionare Proprietà.

    Viene aperta la finestra Progettazione progetti.

  10. Scegliere la scheda Applicazione.

  11. Nella casella Spazio dei nomi predefinito (C#) o Spazio dei nomi radice (Visual Basic) digitare ServerExplorer.SharePointConnections.WebPartNode.

Creazione di icone per i nuovi nodi

Creare due icone per l'estensione Esplora server: una per il nuovo nodo Raccolta web part e un'altra per ogni nodo di web part figlio presente sotto il nodo Raccolta web part. Più avanti nella procedura dettagliata si scriverà codice che associa queste icone ai nodi.

Per creare icone per i nodi

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto WebPartNodeExtension, quindi selezionare Proprietà.

  2. Scegliere Proprietà di WebPartNodeExtension dal menu Progetto.

    Viene aperta la finestra Progettazione progetti.

  3. Scegliere la scheda Risorse.

  4. Fare clic su Il progetto non contiene un file di risorse predefinito. Fare clic qui per crearlo.

    In Visual Studio viene creato un file di risorse che viene aperto nella finestra di progettazione.

  5. Nella parte superiore della finestra di progettazione, fare clic sulla freccia a discesa sul pulsante Aggiungi, quindi selezionare Aggiungi nuova icona.

  6. Digitare WebPartsNode come nome della nuova icona, quindi scegliere Aggiungi.

    La nuova icona viene aperta in Editor immagini.

  7. Modificare la versione 16x16 dell'icona in modo che la relativa progettazione sia facilmente riconoscibile.

  8. Selezionare la versione 32x32 dell'icona.

  9. Selezionare Elimina tipo di immagine nel menu Immagine.

  10. Ripetere i passaggi da 5 a 9 per aggiungere una seconda icona alle risorse del progetto. Denominare questa icona WebPart.

  11. In Esplora soluzioni selezionare WebPartsNode.ico nella cartella Risorse per il progetto WebPartNodeExtension.

  12. Nella finestra Proprietà fare clic sull'elenco a discesa accanto a Operazione di compilazione e selezionare Risorsa incorporata.

  13. Ripetere gli ultimi due passaggi per WebPart.ico.

Aggiunta del nodo Raccolta web part a Esplora server

Creare una classe che aggiunge il nuovo nodo Raccolta web part a ogni nodo del sito di SharePoint. Per aggiungere il nuovo nodo, la classe implementa l'interfaccia IExplorerNodeTypeExtension. Implementare questa interfaccia tutte le volte che si desidera estendere il comportamento di un nodo esistente in Esplora server, ad esempio aggiungendo un nuovo nodo figlio a un nodo.

Per aggiungere il nodo Raccolta web part a Esplora server

  1. Nel progetto WebPartNodeExtension fare doppio clic sul file di codice SiteNodeExtension.

  2. Incollare il codice riportato di seguito in questo file.

    Nota

    Dopo aver aggiunto questo codice, il progetto presenterà alcuni errori di compilazione che scompariranno quando si aggiunge codice nei passaggi successivi.

    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);
                    }
                }
            }
        }
    }
    

Definizione di un tipo di nodo che rappresenta una web part

Creare una classe che definisce un nuovo tipo di nodo che rappresenta una web part. Questo nuovo tipo di nodo viene utilizzato da Visual Studio per visualizzare i nodi figlio sotto il nodo Raccolta web part. Ognuno di questi nodi figlio rappresenta una singola web part sul sito di SharePoint.

Per definire il nuovo tipo di nodo, la classe implementa l'interfaccia IExplorerNodeTypeProvider. Implementare questa interfaccia tutte le volte che si desidera definire un nuovo tipo di nodo in Esplora server.

Per definire il tipo di nodo di web part

  1. Nel progetto WebPartNodeExtension fare doppio clic sul file di codice WebPartNodeTypeProvider.

  2. Incollare il codice riportato di seguito in questo file.

    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);
            }
        }
    }
    

Definizione della classe di dati della web part

Definire una classe che contiene i dati relativi a una singola web part sul sito di SharePoint. Più avanti nella procedura dettagliata si creerà un comando personalizzato di SharePoint che recupera i dati relativi a ogni web part del sito e li assegna alle istanze di questa classe.

Per definire la classe di dati della web part

  1. Nel progetto WebPartNodeExtension fare doppio clic sul file di codice WebPartNodeInfo.

  2. Incollare il codice riportato di seguito in questo file.

    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; }
        }
    }
    

Definizione degli ID per i comandi di SharePoint

Definire diverse stringhe che identificano i comandi personalizzati di SharePoint che verranno implementati più avanti nella procedura dettagliata.

Per definire gli ID dei comandi

  1. Nel progetto WebPartNodeExtension fare doppio clic sul file di codice WebPartCommandIds.

  2. Incollare il codice riportato di seguito in questo file.

    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";
        }
    }
    

Creazione di comandi personalizzati di SharePoint

Creare comandi personalizzati che effettuano chiamate nel modello a oggetti del server SharePoint per recuperare i dati relativi alle web part sul sito di SharePoint. Ogni comando è un metodo che dispone di un oggetto SharePointCommandAttribute applicato.

Per definire i comandi di SharePoint

  1. Nel progetto WebPartCommands fare doppio clic sul file di codice WebPartCommands.

  2. Incollare il codice riportato di seguito in questo file.

    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);
            }
        }
    }
    

Verifica

In questa fase della procedura dettagliata, tutto il codice per il nodo Raccolta web part e i comandi di SharePoint si trovano nei progetti. Compilare la soluzione per assicurarsi che entrambi i progetti vengano compilati senza errori.

Per compilare la soluzione

  • Scegliere Compila soluzione dal menu Compila.

Creazione di un pacchetto VSIX per distribuire l'estensione

Per distribuire l'estensione, utilizzare il progetto VSIX nella soluzione per creare un pacchetto VSIX. Anzitutto, configurare il pacchetto VSIX modificando il file source.extension.vsixmanifest incluso nel progetto VSIX. Successivamente, creare il pacchetto VSIX compilando la soluzione.

Per configurare il pacchetto VSIX

  1. In Esplora soluzioni fare doppio clic sul file source.extension.vsixmanifest nel progetto WebPartNodeExtension.

    In Visual Studio si apre il file nell'editor del manifesto. Il file source.extension.vsixmanifest è la base del file extension.vsixmanifest richiesto da tutti i pacchetti VSIX. Per ulteriori informazioni su questo file, vedere VSIX Extension Schema Reference.

  2. Nella casella Nome prodotto digitare Web Part Gallery Node for Server Explorer.

  3. Nella casella Autore digitare Contoso.

  4. Nella casella Descrizione digitare Adds a custom Web Part Gallery node to the SharePoint Connections node in Server Explorer. This extension uses a custom SharePoint command to call into the server object model.

  5. Nella sezione Contenuto dell'editor fare clic sul pulsante Aggiungi contenuto.

  6. Nella finestra di dialogo Aggiungi contenuto selezionare Componente MEF nella casella di riepilogo Seleziona un tipo di contenuto.

    Nota

    Questo valore corrisponde all'elemento MefComponent del file extension.vsixmanifest. Questo elemento specifica il nome di un assembly dell'estensione nel pacchetto VSIX. Per ulteriori informazioni, vedere MEFComponent Element (VSX Schema).

  7. In Selezionare un'origine fare clic sul pulsante di opzione Progetto e selezionare WebPartNodeExtension nella casella di riepilogo accanto.

  8. Fare clic su OK.

  9. Nell'editor del manifesto fare nuovamente clic sul pulsante Aggiungi contenuto.

  10. Nella finestra di dialogo Aggiungi contenuto selezionare Tipo di estensione personalizzata nella casella di riepilogo Seleziona un tipo di contenuto.

    Nota

    Questo valore corrisponde all'elemento CustomExtension del file extension.vsixmanifest. Questo elemento specifica un'estensione personalizzata che si desidera includere nell'estensione di Visual Studio. Per ulteriori informazioni, vedere CustomExtension Element (VSX Schema).

  11. Nella casella di testo Tipo digitare SharePoint.Commands.v4.

    Nota

    Questo valore corrisponde all'attributo Type dell'elemento CustomExtension del file extension.vsixmanifest. Il valore Sharepoint.Commands.v4 è richiesto per tutti gli assembly delle estensioni personalizzate che contengono i comandi di SharePoint.

  12. In Selezionare un'origine fare clic sul pulsante di opzione Progetto e selezionare WebPartCommands nella casella di riepilogo accanto.

  13. Fare clic su OK.

  14. Scegliere Compila soluzione dal menu Compila. Assicurarsi che la soluzione venga compilata correttamente.

  15. Aprire la cartella di output di compilazione per il progetto WebPartNode. Assicurarsi che in questa cartella adesso sia contenuto il file WebPartNode.vsix.

    Per impostazione predefinita, la cartella dell'output di compilazione è .. \bin\Debug sotto la cartella che contiene il file di progetto.

Test dell'estensione

Ora è possibile testare il nuovo nodo Raccolta web part in Esplora server. Innanzitutto, avviare il debug dell'estensione in un'istanza sperimentale di Visual Studio. Successivamente, utilizzare il nuovo nodo Web part nell'istanza sperimentale di Visual Studio.

Per avviare il debug dell'estensione

  1. Riavviare Visual Studio con i privilegi di amministratore e aprire la soluzione WebPartNode.

  2. Nel progetto WebPartNodeExtension aprire il file di codice SiteNodeExtension e aggiungere un punto di interruzione alla prima riga di codice nei metodi NodeChildrenRequested e CreateWebPartNodes.

  3. Premere F5 per avviare il debug.

    In Visual Studio i file di estensione vengono installati in %UserProfile%\Dati applicazione\Locale\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Web Part Gallery Node Extension for Server Explorer\1.0 e viene avviata un'istanza sperimentale di Visual Studio. L'elemento del progetto verrà testato in questa istanza di Visual Studio.

Per testare l'estensione

  1. Scegliere Esplora server dal menu Visualizza in questa istanza sperimentale di Visual Studio.

  2. Verificare che il sito di SharePoint che si desidera utilizzare per il test venga visualizzato sotto il nodo Connessioni di SharePoint in Esplora server. In caso contrario, eseguire la procedura seguente:

    1. Fare clic con il pulsante destro del mouse su Connessioni di SharePoint, quindi scegliere Aggiungi connessione.

    2. Nella finestra di dialogo Aggiungi connessione SharePoint immettere l'URL per il sito di SharePoint a cui si desidera connettersi. Per specificare il sito di SharePoint nel computer di sviluppo, digitare https://localhost.

    3. Fare clic su OK.

  3. Espandere il nodo relativo alla connessione al sito (il nodo in cui è visualizzato l'URL del sito), quindi un nodo del sito figlio (ad esempio Sito Team).

  4. Verificare che il codice nell'altra istanza di Visual Studio venga interrotto nell'apposito punto impostato precedentemente nel metodo NodeChildrenRequested. Premere F5 per continuare il debug del progetto.

  5. Verificare che un nuovo nodo denominato Raccolta web part venga visualizzato sotto il nodo del sito principale nell'istanza sperimentale di Visual Studio. Espandere il nodo Raccolta web part.

  6. Verificare che il codice nell'altra istanza di Visual Studio venga interrotto in corrispondenza del punto di interruzione impostato precedentemente nel metodo CreateWebPartNodes. Premere F5 per continuare il debug del progetto.

  7. Nell'istanza sperimentale di Visual Studio verificare che tutte le web part sul sito connesso vengano visualizzate nel nodo Raccolta web part in Esplora server.

  8. Fare clic con il pulsante destro del mouse su una delle web part, quindi scegliere Proprietà.

  9. Nell'istanza di Visual Studio in corso di debug, verificare che i dettagli relativi alla web part vengano visualizzati nella finestra Proprietà.

Disinstallazione dell'estensione da Visual Studio

Dopo aver completato il test dell'estensione, disinstallare quest'ultima da Visual Studio.

Per disinstallare l'estensione

  1. Scegliere Gestione estensioni dal menu Strumenti nell'istanza sperimentale di Visual Studio.

    Viene aperta la finestra di dialogo Gestione estensioni.

  2. Nell'elenco di estensioni selezionare Web Part Gallery Node Extension for Server Explorer, quindi fare clic su Disinstalla.

  3. Nella finestra di dialogo visualizzata fare clic su per confermare che si desidera disinstallare l'estensione.

  4. Fare clic su Riavvia per completare la disinstallazione.

  5. Chiudere entrambe le istanze di Visual Studio, ovvero quella sperimentale e l'istanza in cui è aperta la soluzione WebPartNode.

Vedere anche

Attività

Procedura dettagliata: chiamata al modello a oggetti del client di SharePoint in un'estensione di Esplora server

Creazione di una nuova bitmap o di un'altra immagine

Riferimenti

Editor immagini

Altre risorse

Estensione del nodo Connessioni di SharePoint in Esplora server