Demonstra Passo a passo: A chamada para o modelo de objeto do cliente do SharePoint em uma extensão do Server Explorer
Esta explicação passo a passo demonstra como chamar o modelo de objeto de cliente do SharePoint a partir de uma extensão para o sharepoint Connections nó Server Explorer. Para obter mais informações sobre como usar o modelo de objeto de cliente do SharePoint, consulte A chamada para os modelos de objeto do SharePoint.
Essa explicação passo a passo demonstra as seguintes tarefas:
Criando um Visual Studio extensão que estende o sharepoint Connections o nó de Server Explorer das seguintes maneiras:
Adiciona um novo Galeria de Web Parts nó em cada nó de site do SharePoint no Server Explorer. Esse novo nó contém nós filhos que representam cada Web Part na Galeria de Web Parts no site.
Ele define um novo tipo de nó que representa uma instância da Web Part. Esse novo tipo de nó é a base para os nós filho sob a nova Galeria de Web Parts nó. O novo tipo de nó de Web Part exibe informações de Propriedades janela sobre a Web Part que ele representa.
Construindo um pacote de extensão de Visual Studio (VSIX) para implantar a extensão.
A extensão de teste e depuração.
Observação |
---|
A extensão que você criar nesta explicação é semelhante a extensão que você criar no Demonstra Passo a passo: Estendendo o Server Explorer para exibir Web Parts. No entanto, enquanto esse passo a passo usa o modelo de objeto de servidor do SharePoint, este passo a passo realiza as mesmas tarefas usando o modelo de objeto do cliente. |
Pré-requisitos
É necessário que os seguintes componentes no computador de desenvolvimento para concluir este passo a passo:
Edições com suporte do Microsoft Windows, o SharePoint e o Visual Studio. Para obter mais informações, consulte Requisitos para o desenvolvimento de soluções do SharePoint.
O SDK do Visual Studio 2010. Esta explicação passo a passo usa o O projeto de VSIX modelo no SDK para criar um pacote VSIX para implantar a extensão. Para obter mais informações, consulte Estender as ferramentas do SharePoint em Visual Studio.
Conhecimento dos seguintes conceitos é útil, mas não necessário para concluir o passo a passo:
Usando o modelo de objeto de cliente do SharePoint. Para obter mais informações, consulte Modelo de objeto do cliente gerenciado.
Web Parts na SharePoint Services da Microsoft. Para obter mais informações, consulte Visão geral de Web Parts.
A criação de projetos
Para concluir este passo a passo, você precisará criar dois projetos:
Para criar o pacote VSIX para implantar um projeto de VSIX a Server Explorer extensão.
Um projeto de biblioteca de classe que implementa o Server Explorer extensão.
Inicie o passo a passo através da criação de projetos.
Para criar o projeto VSIX
Inicie o Visual Studio
No menu File, aponte para New, e em seguida, clique em Project.
No Novo projeto caixa de diálogo caixa, expanda o Visual C# ou Visual Basic nós e clique extensibilidade.
Observação O extensibilidade nó só estará disponível se você instalar o SDK de 2010 Visual Studio. Para obter mais informações, consulte a seção de pré-requisitos acima.
Na caixa de combinação na parte superior da caixa de diálogo, selecione .NET Framework 4. As extensões de ferramentas de SharePoint requerem recursos nesta versão do.NET Framework.
Clique o O projeto de VSIX modelo.
No nome , digite WebPartNode.
Clique em OK.
Visual StudioAdiciona o WebPartNode de projeto para Solution Explorer.
Para criar o projeto de extensão
Em Solution Explorer, o botão direito do mouse no nó da solução, clique em Adde em seguida, clique em Novo projeto.
Observação Em projetos de Visual Basic, o nó de solução aparece na Solution Explorer somente quando o Always show solution caixa de seleção estiver marcada na Geral, projetos e soluções, caixa de diálogo Options.
No Novo projeto caixa de diálogo caixa, expanda o Visual C# ou Visual Basic nós e clique Windows.
Na caixa de combinação na parte superior da caixa de diálogo, selecione .NET Framework 4.
Selecione o Biblioteca de classe o modelo de projeto.
No nome , digite WebPartNodeExtension.
Clique em OK.
Visual StudioAdiciona o WebPartNodeExtension o projeto à solução e abre o arquivo de código padrão Class1.
Exclua o arquivo de código Class1 do projeto.
Configurando o projeto de extensão
Antes de escrever código para criar a extensão, você precisa adicionar os arquivos de código e referências assembly para seu projeto e atualizar o namespace padrão.
Para configurar o projeto.
No WebPartNodeExtension de projeto, adicione duas de código com os seguintes nomes:
SiteNodeExtension
WebPartNodeTypeProvider
No menu Project, escolha Add Reference.
Sobre o .NET guia, pressione CTRL e selecione os seguintes assemblies e clique OK:
Microsoft.SharePoint.Client
Microsoft.SharePoint.Client.Runtime
Microsoft.VisualStudio.SharePoint
System.ComponentModel.Composition
System.Windows.Forms
Sobre o projeto menu, selecione Propriedades de WebPartNodeExtension.
O Project Designer abre.
Clique o aplicativo guia.
No espaço para nome padrão caixa (C#) ou namespace raiz caixa (Visual Basic), digite ServerExplorer.SharePointConnections.WebPartNode.
Criando ícones para os novos nós
Crie dois ícones para o Server Explorer extensão: um ícone para o novo Galeria de Web Parts nó e o outro ícone para cada nó de Web Part do filho sob a Galeria de Web Parts nó. Posteriormente nesta explicação passo a passo, você irá escrever código que associa esses ícones de nós.
Para criar ícones para os nós
No Project Designer para o projeto WebPartNodeExtension, clique no recursos guia.
Clique em Este projeto não contém um arquivo de recursos padrão. Clique aqui para criar um.
Visual Studio cria um arquivo de recursos e o abre no designer.
Na parte superior do designer, clique na seta suspensa no Add botão e, em seguida, clique em Adicionar um novo ícone.
Tipo de WebPartsNode para o novo nome do ícone e clique em Add.
O novo ícone abre no O Editor de imagem.
Edite a versão de 16x16 do ícone, para que ele tenha um design que você possa reconhecer facilmente.
Clique na versão de 32 x 32 do ícone.
Sobre o imagem menu, clique em Excluir tipo de imagem.
Repita as etapas 3 a 7 para adicionar um segundo ícone aos recursos do projeto. Este ícone de nome WebPart.
No Solution Explorer, na recursos a pasta para o WebPartNodeExtension o projeto, selecione WebPartsNode.ico.
No Propriedades janela, clique na lista suspensa ao lado de Build Action e selecione Embedded Resource.
Repita as duas últimas etapas para WebPart.ico.
Adicionar o nó de galeria de Web Parts ao Server Explorer
Criar uma classe que adiciona o novo Galeria de Web Parts o nó para cada nó de site do SharePoint. Para adicionar o novo nó implementa a classe de IExplorerNodeTypeExtension interface. Implementar essa interface, sempre que você deseja estender o comportamento de um nó existente em Server Explorer, como, por exemplo, adicionando um novo nó filho em um nó.
Para adicionar o nó da Galeria de Web Parts para o Server Explorer
No projeto WebPartNodeExtension, clique duas vezes no arquivo de código SiteNodeExtension.
Cole o código a seguir esse arquivo.
Observação Após adicionar esse código, o projeto terá alguns erros de compilação. Esses erros desaparecem quando você adiciona o código em etapas posteriores.
Imports System.Collections.Generic Imports System.ComponentModel.Composition Imports Microsoft.SharePoint.Client Imports Microsoft.VisualStudio.SharePoint Imports Microsoft.VisualStudio.SharePoint.Explorer Namespace ServerExplorer.SharePointConnections.WebPartNode ' Export attribute: Enables Visual Studio to discover and load this extension. ' ExplorerNodeType attribute: Indicates that this class extends SharePoint site nodes in Server Explorer. ' SiteNodeExtension class: Represents an extension of SharePoint site nodes in Server Explorer. <Export(GetType(IExplorerNodeTypeExtension))> _ <ExplorerNodeType(ExplorerNodeTypes.SiteNode)> _ Friend Class SiteNodeExtension Implements IExplorerNodeTypeExtension Private siteUrl As System.Uri = Nothing Private Sub Initialize(ByVal nodeType As IExplorerNodeType) _ Implements IExplorerNodeTypeExtension.Initialize ' The NodeChildrenRequested event is raised when the user expands the ' SharePoint site node in Server Explorer. AddHandler nodeType.NodeChildrenRequested, AddressOf NodeChildrenRequested End Sub ' Creates the new Web Part Gallery node with the specified icon. Private Sub NodeChildrenRequested(ByVal Sender As Object, ByVal e As ExplorerNodeEventArgs) ' Get the site URL so that it can be used later to access the site ' by using the SharePoint client object model. siteUrl = e.Node.Context.SiteUrl ' The CreateWebPartNodes argument is a delegate that Visual Studio calls ' to create the child nodes under the Web Part Gallery node. e.Node.ChildNodes.AddFolder("Web Part Gallery", My.Resources.WebPartsNode.ToBitmap(), _ AddressOf CreateWebPartNodes) End Sub ' Creates individual Web Part nodes under the new Web Part Gallery node. Private Sub CreateWebPartNodes(ByVal parentNode As IExplorerNode) ' Use the SharePoint client object model to get items from the Web Part gallery. Dim Context As ClientContext = New ClientContext(siteUrl.AbsoluteUri) Dim WebPartsGallery As List = Context.Web.GetCatalog(CType(ListTemplateType.WebPartCatalog, Integer)) Dim WebParts As ListItemCollection = WebPartsGallery.GetItems(New CamlQuery()) ' Request the FieldValuesAsText property values with the Web Part items. Context.Load(WebParts, Function(listItems) listItems.Include(Function(i) i.FieldValuesAsText)) Context.ExecuteQuery() If WebParts IsNot Nothing Then For Each WebPart As ListItem In WebParts ' Create a new annotation object to store the current Web Part item with the new node. Dim Annotations = New Dictionary(Of Object, Object)() Annotations.Add(GetType(ListItem), WebPart) ' Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, _ WebPart.FieldValuesAsText.FieldValues("Title"), Annotations) Next End If End Sub End Class End Namespace
using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; using Microsoft.VisualStudio.SharePoint; using Microsoft.VisualStudio.SharePoint.Explorer; namespace ServerExplorer.SharePointConnections.WebPartNode { // Enables Visual Studio to discover and load this extension. [Export(typeof(IExplorerNodeTypeExtension))] // Indicates that this class extends SharePoint site nodes in Server Explorer. [ExplorerNodeType(ExplorerNodeTypes.SiteNode)] // Represents an extension of SharePoint site nodes in Server Explorer. internal class SiteNodeExtension : IExplorerNodeTypeExtension { private System.Uri siteUrl = null; public void Initialize(IExplorerNodeType nodeType) { // The NodeChildrenRequested event is raised when the user expands the // SharePoint site node in Server Explorer. nodeType.NodeChildrenRequested += NodeChildrenRequested; } // Creates the new Web Part Gallery node with the specified icon. private void NodeChildrenRequested(object sender, ExplorerNodeEventArgs e) { // Get the site URL so that it can be used later to access the site // by using the SharePoint client object model. siteUrl = e.Node.Context.SiteUrl; // The CreateWebPartNodes argument is a delegate that Visual Studio calls // to create the child nodes under the Web Part Gallery node. e.Node.ChildNodes.AddFolder("Web Part Gallery", Properties.Resources.WebPartsNode.ToBitmap(), CreateWebPartNodes); } // Creates individual Web Part nodes under the new Web Part Gallery node. private void CreateWebPartNodes(IExplorerNode parentNode) { // Use the SharePoint client object model to get items from the Web Part gallery. ClientContext context = new ClientContext(siteUrl.AbsoluteUri); List webPartsGallery = context.Web.GetCatalog((int)ListTemplateType.WebPartCatalog); ListItemCollection webParts = webPartsGallery.GetItems(new CamlQuery()); // Request the FieldValuesAsText property values with the Web Part items. context.Load(webParts, listItems => listItems.Include(i => i.FieldValuesAsText)); context.ExecuteQuery(); if (webParts != null) { foreach (ListItem webPart in webParts) { // Create a new annotation object to store the current Web Part item with the new node. var annotations = new Dictionary<object, object>() { { typeof(ListItem), webPart } }; // Create the new node for the current Web Part item. parentNode.ChildNodes.Add(WebPartNodeTypeProvider.WebPartNodeTypeId, webPart.FieldValuesAsText.FieldValues["Title"], annotations); } } } } }
Definindo um tipo de nó que representa uma Web Part
Crie uma classe que define um novo tipo de nó que representa uma Web Part. Esse novo tipo de nó é usado por Visual Studio para exibir nós filho sob a Galeria de Web Parts nó. Cada um de nós filho representa uma única Web Part no site do SharePoint.
Para definir o novo tipo de nó, implementa a classe de IExplorerNodeTypeProvider interface. Implementar essa interface, sempre que você deseja definir um novo tipo de nó no Server Explorer.
Para definir o tipo de nó de Web Part
No projeto WebPartNodeExtension, clique duas vezes no arquivo de código WebPartNodeTypeProvider.
Cole o código a seguir esse arquivo.
Imports System Imports System.Collections.Generic Imports System.Windows.Forms Imports System.ComponentModel.Composition Imports Microsoft.SharePoint.Client Imports Microsoft.VisualStudio.SharePoint Imports Microsoft.VisualStudio.SharePoint.Explorer Namespace ServerExplorer.SharePointConnections.WebPartNode ' Export attribute: Enables Visual Studio to discover and load this extension. ' ExplorerNodeType attribute: Specifies the ID for this new node type. ' WebPartNodeTypeProvider class: Defines a new node type that represents a Web Part on a SharePoint site. <Export(GetType(IExplorerNodeTypeProvider))> _ <ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)> _ Friend Class WebPartNodeTypeProvider Implements IExplorerNodeTypeProvider Friend Const WebPartNodeTypeId As String = "Contoso.WebPart" Private Sub InitializeType(ByVal typeDefinition As IExplorerNodeTypeDefinition) _ Implements IExplorerNodeTypeProvider.InitializeType typeDefinition.DefaultIcon = My.Resources.WebPart.ToBitmap() typeDefinition.IsAlwaysLeaf = True AddHandler typeDefinition.NodePropertiesRequested, AddressOf NodePropertiesRequested AddHandler typeDefinition.NodeMenuItemsRequested, AddressOf NodeMenuItemsRequested End Sub ' Retrieves properties that are displayed in the Properties window when ' a Web Part node is selected. Private Sub NodePropertiesRequested(ByVal Sender As Object, _ ByVal e As ExplorerNodePropertiesRequestedEventArgs) Dim webPart = e.Node.Annotations.GetValue(Of ListItem)() Dim propertySource = e.Node.Context.CreatePropertySourceObject( _ webPart.FieldValuesAsText.FieldValues) e.PropertySources.Add(propertySource) End Sub Private Sub NodeMenuItemsRequested(ByVal Sender As Object, _ ByVal e As ExplorerNodeMenuItemsRequestedEventArgs) Dim WebPartNodeMenuItem As IMenuItem = e.MenuItems.Add("Display Message") AddHandler WebPartNodeMenuItem.Click, AddressOf MenuItemClick End Sub Private Sub MenuItemClick(ByVal Sender As Object, ByVal e As MenuItemEventArgs) Dim ParentNode As IExplorerNode = TryCast(e.Owner, IExplorerNode) If ParentNode IsNot Nothing Then Dim webPart = ParentNode.Annotations.GetValue(Of ListItem)() MessageBox.Show("You clicked the context menu for the following Web part: " & _ webPart.FieldValuesAsText.FieldValues("Title") + ".", "Web Part Menu Command") End If End Sub End Class End Namespace
using System; using System.Collections.Generic; using System.Windows.Forms; using System.ComponentModel.Composition; using Microsoft.SharePoint.Client; using Microsoft.VisualStudio.SharePoint; using Microsoft.VisualStudio.SharePoint.Explorer; namespace ServerExplorer.SharePointConnections.WebPartNode { // Enables Visual Studio to discover and load this extension. [Export(typeof(IExplorerNodeTypeProvider))] // Specifies the ID for this new node type. [ExplorerNodeType(WebPartNodeTypeProvider.WebPartNodeTypeId)] // Defines a new node type that represents a Web Part on a SharePoint site. internal class WebPartNodeTypeProvider : IExplorerNodeTypeProvider { internal const string WebPartNodeTypeId = "Contoso.WebPart"; public void InitializeType(IExplorerNodeTypeDefinition typeDefinition) { typeDefinition.DefaultIcon = Properties.Resources.WebPart.ToBitmap(); typeDefinition.IsAlwaysLeaf = true; typeDefinition.NodePropertiesRequested += NodePropertiesRequested; typeDefinition.NodeMenuItemsRequested += NodeMenuItemsRequested; } // Retrieves properties that are displayed in the Properties window when // a Web Part node is selected. private void NodePropertiesRequested(object sender, ExplorerNodePropertiesRequestedEventArgs e) { var webPart = e.Node.Annotations.GetValue<ListItem>(); object propertySource = e.Node.Context.CreatePropertySourceObject( webPart.FieldValuesAsText.FieldValues); e.PropertySources.Add(propertySource); } private void NodeMenuItemsRequested( object sender, ExplorerNodeMenuItemsRequestedEventArgs e) { e.MenuItems.Add("Display Message").Click += MenuItemClick; } private void MenuItemClick(object sender, MenuItemEventArgs e) { IExplorerNode parentNode = e.Owner as IExplorerNode; if (parentNode != null) { var webPart = parentNode.Annotations.GetValue<ListItem>(); MessageBox.Show("You clicked the context menu for the following Web part: " + webPart.FieldValuesAsText.FieldValues["Title"] + ".", "Web Part Menu Command"); } } } }
Ponto de Verificação
Neste ponto, passo a passo, todo o código para o Galeria de Web Parts nó agora está no projeto. Crie a solução para certificar-se de que o projeto é compilado sem erros.
Para criar a solução
- Sobre o Build menu, selecione Build Solution.
Criando um pacote VSIX para implantar a extensão.
Para implantar a extensão, use o projeto VSIX em sua solução para criar um pacote VSIX. Primeiro, configure o pacote VSIX modificando o arquivo source.extension.vsixmanifest que está incluído no projeto. Em seguida, crie o pacote VSIX pela criação da solução.
Para configurar o pacote VSIX
Em Solution Explorer, na WebPartNode de projeto, clique duas vezes o source.extension.vsixmanifest arquivo no projeto WebPartNode.
Visual Studio abre o arquivo no editor de manifesto. O arquivo de source.extension.vsixmanifest é que a base para o arquivo extension.vsixmanifest é necessária para todos os pacotes VSIX. Para obter mais informações sobre este arquivo, consulte VSX Schema for Extensions.
No Nome do produto , digite Nó de galeria de Web Part para o Server Explorer.
No Autor , digite Contoso.
No Descrição , digite adiciona um nó da Galeria de Web Parts personalizada para o nó do SharePoint Connections no Server Explorer.
No conteúdo seção do editor, clique na Adicionar conteúdo botão.
No Adicionar conteúdo na caixa de Selecione um tipo de conteúdo caixa de listagem, selecione MEF componente.
Observação Este valor corresponde do MefComponent elemento no arquivo extension.vsixmanifest. Este elemento Especifica o nome de um assembly de extensão no pacote VSIX. Para obter mais informações, consulte MEFComponent Element (VSX Schema).
Em Selecionar uma fonte de, clique o projeto botão de opção e, em seguida, selecione WebPartNodeExtension em que a caixa de listagem.
Clique em OK.
Sobre o Build menu, clique em Build Solution. Certifique-se de que a solução é compilado sem erros.
Abra a pasta de saída de compilação do projeto WebPartNode. Certifique-se de que esta pasta agora contém o arquivo WebPartNode.vsix.
Por padrão, a pasta de saída de compilação é a.. pasta \bin\debug na pasta que contém o arquivo de projeto.
A extensão de teste.
Agora você está pronto para testar a nova Galeria de Web Parts nó Server Explorer. Primeiro, inicie a depuração do projeto de extensão em uma instância experimental de Visual Studio. Em seguida, usar o novo Web Parts o nó na instância experimental do Visual Studio.
Para iniciar a extensão de depuração.
Reinicie o Visual Studio com privilégios de administrador e abra o WebPartNode solução.
No projeto WebPartNodeExtension, abra o SiteNodeExtension arquivo de código e adicionar as primeiras linhas de código em um ponto de interrupção a NodeChildrenRequested e CreateWebPartNodes métodos.
Pressione F5 para iniciar a depuração.
Visual Studio instala a extensão a extensão de nó de galeria de parte de %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\Web para Explorer\1.0 do servidor e inicia uma instância experimental do Visual Studio. Você testará o item de projeto nesta instância do Visual Studio.
Para testar a extensão.
Na instância experimental do Visual Studio, sobre o Exibir menu, clique em Server Explorer.
Verifique se o site do SharePoint que você deseja usar para teste aparece sob o sharepoint Connections nó Server Explorer. Se não estiver listado, execute estas etapas:
Com o botão direito sharepoint Connections e clique em Add Connection.
No Adicionar conexão com o SharePoint caixa de diálogo, digite a URL do site do SharePoint que você deseja se conectar. Para especificar o site do SharePoint no seu computador de desenvolvimento, digite https://localhost.
Clique em OK.
Expanda o nó de conexão do site (o nó exibe o URL do seu site) e um nó de site filho (por exemplo, O Site de equipe).
Verificar que o código na instância de Visual Studio pára no ponto de interrupção que você definiu anteriormente na NodeChildrenRequested método. Pressione F5 para continuar a depurar o projeto.
Na instância experimental do Visual Studio, verifique se que um novo nó denominado Galeria de Web Parts aparece sob o nó do site de nível superior. Expanda o Galeria de Web Parts nó.
Verificar que o código na instância de Visual Studio pára no ponto de interrupção que você definiu anteriormente na CreateWebPartNodes método. Pressione F5 para continuar a depurar o projeto.
Na instância experimental do Visual Studio, verifique se todos os Web Parts no site conectado aparecem sob o Galeria de Web Parts nó Server Explorer.
Clique com o botão direito do que o Web Parts e, em seguida, clique em Propriedades.
Verifique se aparecem em detalhes sobre a Web Part de Propriedades janela.
Em Server Explorer, o botão direito do mouse na mesma Web Part novamente e clique em Exibir mensagem.
Verifique se a caixa de mensagem aparece. Clique em OK na caixa de mensagem.
Desinstalando a extensão de Visual Studio
Após concluir o teste a extensão, desinstale a extensão do Visual Studio.
Para desinstalar a extensão.
Na instância experimental do Visual Studio, sobre o Ferramentas menu, clique em Extension Manager.
O Extension Manager abre a caixa de diálogo.
Na lista de extensões, clique em Extensão de nó de galeria de Web Part para o Server Explorere em seguida, clique em desinstalar.
Na caixa de diálogo que aparece, clique em Sim para confirmar que você deseja desinstalar a extensão.
Clique em Reiniciar agora para concluir a desinstalação. O item de projeto também será desinstalado.
Feche as duas instâncias de Visual Studio (a instância experimental e a instância do Visual Studio que abriu a solução de WebPartNode).
Consulte também
Tarefas
Demonstra Passo a passo: Estendendo o Server Explorer para exibir Web Parts
Criando um novo Bitmap ou outra imagem
Referência
Conceitos
A chamada para os modelos de objeto do SharePoint
Outros recursos
Estendendo o nó de conexões do SharePoint no Server Explorer