Desenvolvimento - ASP. NET

Criando uma Web Part Básica com o Visual Studio .NET 2003

Neste artigo você verá como criar passo a passo uma Web Part através do Microsoft Visual Studio .NET.

por Maycol Sneider Romelli



Introdução

Com o lançamento do Microsoft Sharepoint Portal Server 2003 e o Microsoft Windows Sharepoint Services como um serviço do Microsoft Windows Server 2003, a Microsoft traz uma nova forma de expor informações em uma Web Part Page dentro de uma intranet corporativa com Microsoft Sharepoint Portal Server 2003.

Essa exposição de informação visualizada em uma Web Part Page pode conter uma ou mais Web Parts, que podem expor informações de diferentes tipos como um Web Service, um cubo OLAP do SQL Server 2000, uma página Web com um ou mais Office Web Components, os contatos do MSN, a Inbox do Microsoft Exchange Server 2003, o Windows Media Service passando um filme corporativo por exemplo uma campanha de marketing, um Terminal Service para conexão com outros servidores, uma aplicação Web que controle qualquer departamento, uma aplicação client-server escrita em Visual Studio 6.0 ou .NET seja ela VB .NET ou C# .NET, uma aplicação em Clipper 5.x, um projeto do Microsoft Project Server 2003, enfim o que o desenvolvedor imaginar expor poderá criar, inclusive importar Web Parts prontas de terceiros como Siebel e SAP por exemplo.

Neste artigo você verá como criar passo a passo uma Web Part através do Microsoft Visual Studio .NET, vamos lá então.

Projeto Web Part

A primeira coisa a fazer é abrir o Visual Studio .NET e entender o que iremos utilizar. Web Part são baseadas no ASP .NET Web Form Controls e para criá-las é necessário a escolha de uma linguagem C# ou Visual Basic .NET para desenvolvê-la. Utilizaremos C# e o Web Part Templates (você pode fazer o download do template no site MSDN, caso não tenha).

Criando uma Web Part

1. Start o Visual Studio .NET.

2. Menu File, New, e clique em Project.

3. Dentro de New Project, clique em Visual C# Projects, e selecione Web Part Library template.

Nota: Se você criar com a linguagem Visual Basic .NET, selecione o template Web Part Library.

4. Digite SimpleWebPart como o nome e especifique o local para arquivar o projeto, e então clique OK.

Por outro lado, se você não quiser carregar os modelos, você pode escolher criar uma Web Part começando com o ASP.NET Web Control Library template.

Para criar um novo Web Control Library project

Start Visual Studio .NET.

5. Menu File, New, e clique em Project.

6. Dentro de New Project, clique em Visual C# Projects, e selecione Web Control Library template.

7. Nota: Se você quer criar um Projeto Visual Basic .NET, selecione o Web Control Library Template ao invés de Visual Basic Projects.

8. Digite SimpleWebPart como o nome e especifique o local para arquivar o projeto, e então clique OK.

9. Para criar uma Web Part, você precisa acrescentar uma referência ao assembly de Microsoft.SharePoint (Microsoft.SharePoint.dll) em seu Web Control Library project. Se você está trabalhando com o Visual Studio .NET e instalou em um servidor Microsoft Windows SharePoint Services corrente, a assembly do Microsoft.SharePoint será registrada e disponíbilizada na caixa de diálogo Add Reference. Se você quiser desenvolver Web Parts em outro computador, você precisará de acesso a um servidor Windows SharePoint Services. No computador servidor, copie a Microsoft.SharePoint.dll do C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\60\ISAPI para uma pasta no computador onde você desenvolverá as Web Part, e siga os passos deste tópico para adicionar uma referência. Você também precisará acrescentar uma referência a System.Xml.dll para suportar o namespace de System.Xml.Serialization que é usado para definir o namespace de XML para customizar as propriedades, como descrito depois neste tópico.

Adicionar uma referência Microsoft.SharePoint.dll para um projeto

Se você está criando uma Web Part em um computador que tem Windows SharePoint Services ou SharePoint Portal Server instalado nisto:

10. Menu Project , clique Add Reference.

11. Na tab .NET, duplo clique em Windows SharePoint Services.

12. Clique OK.

Se você está criando uma Web Part em um computador que não tem Windows SharePoint Services ou SharePoint Portal Server instalado nisto:

1. Menu Project, clique Add Reference.

2. Na tab .NET, clique Browse, e navegue para C:\inetpub\wwwroot\bin (ou a pasta para a qual você copiou Microsoft.SharePoint.dll). selecione Microsoft.SharePoint.dll, e clique em Open.

3. Clique OK.

Adicionar uma referência System.Xml.dll para um project

Os mesmos passos aplicam, embora se você está criando uma Web Part em um computador que tem Windows SharePoint Services ou SharePoint Portal Server instalado nisto:

1. Menu Project, clique Add Reference.

2. Tab .NET, duplo clique System.Xml.dll.

3. Clique OK.

Setando o Início do Projeto

Antes de você começar a incluir código no projeto da Web Part, você precisa fazer as seguintes mudanças no projeto:

  • Especifique o caminho
  • Número da versão.
  • Nome do Assembly
Especifique o caminho

Esta tarefa assume que você está rodando o Visual Studio .NET em um servidor Windows SharePoint Services ou SharePoint Portal Server. Setando o caminho para C:\inetpub\wwwroot\bin o assembly de sua Web Part ficará no mesmo local do qual esta rodando seu servidor. Se você não esta rodando o Visual Studio .NET em seu computador, você pode copiar o assembly de sua Web Part para a pasta C:\inetpub\wwwroot\bin em seu servidor depois de construída.

Nota: A pasta C:\inetpub\wwwroot\bin é um dos dois locais defaults aonde o .NET Common Language Runtime procurarão os .NET assemblies.O outro local é o GAC ( Global Assembly Cache), que está exposto na interface do usuário do Windows como C:\windows\assembly. Porém, se você quiser rodar o assembly de sua Web Part do GAC, você não deveria especificar C:\windows\assembly como é o caminho do Visual Studio .NET. Ao invés, você deveria copiar isto usando o Windows Explorer manualmente (arraste o arquivo para C:\windows\assembly) ou usando a gacutil.exe através de linha de comando que fica situado em C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\bin. Esteja atento que o GAC requer o nome forte do assembly.

Além dos dois locais default, você pode especificar outro caminho (por exemplo, \ inetpub\wwwroot\mydir ou \inetpub\wwwroot\mydir2\bin) especificando essas pastas no arquivo web.config adicionado-as no seguinte elemento <runtime> com o outro elemento

<configuration>:
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="mydir;mydir2\bin"/>
      </assemblyBinding>
   </runtime>

Especificando o caminho de saída

1. No Solution Explorer, clique com o botão direito no nome do projeto (por exemplo, SimpleWebPart), e clique em Properties.

2. Debaixo de Configuration Properties | Build | Outputs, fixe o Output Path para: C:\inetpub\wwwroot\bin.

Setando o Número da Versão

Por default, a propriedade AssemblyVersion de seu projeto é fixada para incrementar cada recompilação de sua Web Part. Uma Página Web Part identifica uma Web Part com o número de versão que é especificado no arquivo web.config. (Para detalhes, veja "Registre a Web Part com um Safe Control" neste tópico.) Com a propriedade AssemblyVersion fixada, se você recompilar sua Web Part e depois de importar isto em uma Página Web Part, o Web Part Framework procurará o número de versão que você especificou no arquivo de web.config. Se o número de versão não for igual, um erro acontecerá. Para impedir para o número de versão de sua Web Part seja incrementada cada vez que você for recompilar, você precisa fixar o número de versão no arquivo AssemblyInfo.cs. Estes passos não serão requeridos se você usar o Web Part Library Template.

Para setar o número da version

1. No Solution Explorer, duplo-clique AssemblyInfo.cs.

2. Edite a linha

[assembly: AssemblyVersion("1.0.*")]
por
[assembly: AssemblyVersion("1.0.0.0")]

Nome forte do Assembly

Web Parts são projetadas para serem distribuídas na Internet ou Intranet. Por razões de segurança ao criar uma Custom Web Part, você tem que nomear os usuário que terão acesso a elas.

Um nome forte consiste na identidade a mais de um assembly mais uma chave pública e uma assinatura digital. Você pode usar a ferramenta de Nome Forte (sn.exe) para administrar chaves, gerar assinaturas, e verificar assinaturas. Esta ferramenta é instalada com o .NET Framework SDK quando você instala o Visual Studio .NET.

Para o Nome forte do assembly

1. Crie um arquivo que contenha uma chave par. Na linha de comando onde esta instalado o Visual Studio .NET, digite o seguinte: cd \ Program Files\Microsoft Visual .Studio .NET\FrameworkSDK\Bin \

2. Tipo o seguinte: sn.exe - k c:\keypair.snk

Nota: Você pode usar qualquer caminho, contanto que você referêncie o caminho nos passos seguintes.

3. Dentro do Solution Explorer, clique duas vezes no arquivo AssemblyInfo.cs em seu projeto e edite a linha:

[assembly: AssemblyKeyFile ("")]

de forma que isto leia:

[assembly: AssemblyKeyFile ("c:\\keypair.snk")]

Nota: Embora seja possível criar e usar o mesmo arquivo keypar (. snk) para todas as assemblys Web Part construídas por você, para maior segurança recomendamos que que você crie e use um arquivo diferente (. snk) para cada assembly.

Modificando o arquivo de código default (só usando o Web Control Library Template )

Quando você cria um projeto que usa o Web Control Library Template dentro do Visual Studio .NET, o default de um arquivo fonte C# WebCustomControl1.cs é criado. Os passos seguintes são adições básicas e modificações que você faz ao código default para criar a classe para um Custom Web Part (estes passos não serão requeridos se você usar o Web Part Library Template):

  • Adicionando diretiva de namespace
  • Definindo dados na caixa de ferramentas
  • Herdando da classe de WebPart
  • Definindo o namespace XML
  • Usando o método RenderWebPart

Para começar a modificar o código do arquivo default

  • Dentro do Solution Explorer, clique duas vezes em WebCustomControl1.cs.
Adicionando Diretiva de Namespace

Para facilitar a escrita de uma Class Web Part básica você deve usar a diretiva para referênciar o seguinte namespace em seu código:

  • namespace Microsoft.SharePoint.WebPartPages provê os tipos para Páginas Web Part, como a Class Web Part.

  • namespace System.Xml.Serialization provê o XmlRootAttribute e classes de XmlElementAttribute que suportam o XmlRoot e os atributos de XmlElement usados para declarar o namespace de XML que é usado para o serialization de qualquer propriedade customizável implementada por sua Web Part.

A finalidade deste exemplo é mostrar que estamos adicionando também um diretiva using ao namespace System.Web.UI.HtmlControls porque nós usaremos duas classes HtmlControls dentro da renderização desta Web Part.

Para adicionar diretiva de Namespace

  • Adicione a seguinte diretiva usando no topo de seu código:
    using Microsoft.SharePoint.WebPartPages;
    using System.Xml.Serialization;
    using System.Web.UI.HtmlControls;
    

    Definindo dados na caixa de ferramentas

    A classe ToolboxDataAttribute é gerada para um custom control quando é arrastada de uma caixa de ferramentas em uma ferramenta como o Microsoft Visual Studio .NET.

    Para definir dados na caixa de ferramentas

  • Substitua a linha seguinte

    [ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]

    por esta linha

    [ToolboxData("<{0}:SimpleWebPart runat=server></{0}:SimpleWebPart>")]

    Herdando da Classe de Web Part

    Uma Web Part é compatível com um server controls ASP.NET porque a classe básica Microsoft.SharePoint.WebPartPages.WebPart herda da mesma classe pai class server controls, System.Web.UI.Control.

    Herdar da classe base WebPart

  • Substitua a linha seguinte

    public class WebCustomControl1 : System.Web.UI.WebControls.WebControl

    por esta linha

    public class SimpleWebPart : WebPart

    Definindo o namespace XML

    Para importar com sucesso sua Web Part, você tem que definir um namespace XML para todas as propriedades da Web Part.Você pode fazer isto globalmente declarando o XmlRoot atribuindo no topo a definição de sua Web Part, ou declarando um atributo XmlElement para cada propriedade customizável de sua classe. Os passos seguintes descrevem uso do XmlRoot atribuindo o nível de classe. Para exemplos que usam oatributo XmlElement, veja Criando uma Web Part com Propriedades Customizáveis.

    Para definir o namespace XML para uma classe Web Part inteira

  • Adicione esta linha de código sobre a declaração para sua classe de WebPart
    [XmlRoot(Namespace="MyWebParts")]

    Usando o método RenderWebPart

    A base class WebPart anula o método Render da System.Web.UI.Control e a infra-estrutura de uma Web Part precisa controlar a reenderização dos conteúdos de uma Web Part.Para isto, uma custom Web Part tem que anular o método RenderWebPart da base class WebPart.

    Para implementar a class WebPart e o método RenderWebPart

    Substitua esta linha de código
    protected override void Render(HtmlTextWriter output)

    Por esta linha
    protected override void RenderWebPart(HtmlTextWriter output)

    Modificando o namespace Web Part"s (usando Web Control Library Template ou Web Part Library Template)

    Se você estiver criando múltiplas Web Parts, você geralmente deveria usar o mesmo namespace para todas as Web Parts. Por default, a Web Control Library e a Web Part Library Templates nomeiam para o namespace o mesmo nome como seu projeto. Para este exemplo, nós estamos usando o namespace arbitrário de MyWebParts para ambos e a classe WebPart e o namespace de XML para as propriedades da Web Part.

    Para modificar o namespace Web Part

    Substitua esta linha de código
    namespace SimpleWebPart

    Por esta linha
    namespace MyWebParts

    Para modificar o namespace XML

    Substitua esta linha de código
    [XmlRoot(Namespace="SimpleWebPart")]

    Por esta linha
    [XmlRoot(Namespace="MyWebParts")] Definindo a lógica e a renderização da Web Part

    Depois que você completou os passos anteriores, você pode definir a lógica e renderização de sua Web Part. Para esta parte, escreveremos um código ASP.NET básico para criar dois HTML server controls: um text box, e um button terão alterados a propriedade Title de sua Web Part. Os códigos seguintes completarão o arquivo SimpleWebPart.cs com todas as modificações descritas nos passos anteriores. O código adicional que defini a funcionalidade da Web Part esta realçado em negrito:

    //--------------------------------------------------------------------
    // Arquivo: SimpleWebPart.cs
    //
    // Informação: Neste exemplo de Web Part demonstraremos a criação de um
    // uma Web Part básica.
    //--------------------------------------------------------------------
    using System;
    using System.ComponentModel;
    using System.Runtime.InteropServices;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Xml.Serialization;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebPartPages;
    using Microsoft.SharePoint.Utilities;
    using System.Web.UI.HtmlControls;
    namespace MyWebParts
    {
        /// <summary>
        /// This Web Part changes it"s own title and implements a custom property.
        /// </summary>
        [XmlRoot(Namespace="MyWebParts")]    
        public class SimpleWebPart : WebPart
        {
            private const string defaultText = "hello";
            private string text=defaultText;
            // Declare variables for HtmlControls user interface elements.
            HtmlButton _mybutton;
            HtmlInputText _mytextbox;
            // Event handler for _mybutton control that sets the
            // Title property to the value in _mytextbox control.
            public void _mybutton_click (object sender, EventArgs e)
            {
                this.Title = _mytextbox.Value;
                try
                {
                    this.SaveProperties=true;
                }
                catch
                {
                    Caption = "Error... Could not save property.";
                }
            }
            // Override the ASP.NET Web.UI.Controls.CreateChildControls 
            // method to create the objects for the Web Part"s controls.      
            protected override void CreateChildControls ()
            {         
                // Create _mytextbox control.
                _mytextbox = new HtmlInputText();
                _mytextbox.Value="";
                Controls.Add(_mytextbox);
    
                // Create _mybutton control and wire its event handler.
                _mybutton = new HtmlButton();
                _mybutton.InnerText = "Set Web Part Title";
                _mybutton.ServerClick += new EventHandler (_mybutton_click);
                Controls.Add (_mybutton);
            }
    
            [Browsable(true),Category("Miscellaneous"),
            DefaultValue(defaultText),
            WebPartStorage(Storage.Personal),
            FriendlyName("Text"),Description("Text Property")]
            public string Text
            {
                get
                {
                    return text;
                }
    
                set
                {
                    text = value;
                }
            }
            protected override void RenderWebPart(HtmlTextWriter output)
            {
                RenderChildren(output);
                // Securely write out HTML
                output.Write("<BR>Text Property: " + SPEncode.HtmlEncode(Text));    
            }
        }
    }
    

    Depois que você inseriu todo o código, você pode construir sua Web Part. Assumindo que você está construindo sua Web Part em seu servidor, isto criará um assembly de nome SimpleWebPart.dll na pasta C:\inetpub\wwwroot\bin.

    Para construir sua Web Part

  • Dentro do menu Build, clique em Build Solution.

    Deploying da Web Part

    Além de copiar o assembly para a pasta C:\inetpub\wwwroot\bin no seu servidor Sharepoint ( ou para a Global Assembly Cache folder C:\windows\assembly), você tem que executar três passos adicionais para fazer o deploy de sua Web Part:

    • Registre sua Web Part como um safe control.
    • Crie um arquivo Definition Web Part (.dwp).
    • Importe sua Web Part para dentro de uma Web Part Page.

    Registre sua Web Part como um SafeControl

    Como uma medida de segurança, o Windows SharePoint Services requer que você (ou o administrador do servidor) registre o assembly de sua Web Part e o namespace como um SafeControl no arquivo web.config do servidor.

    Para registrar o assembly da Web Part com um SafeControl

    1. Abra o c:\inetpub\wwwroot\web.config no Visual Studio .NET ou no Notepad.

    2. Adicione as linhas dentro do bloco <SafeControls>:

    3. <SafeControl

    4. Assembly="SimpleWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=def148956c61a16b"

    5. Namespace="MyWebParts"

    6. TypeName="*"

    7. />

    Nota: Altere o valor de PublicKeyToken (def148956c61a16b) com o atual valor para o assembly da sua Web Part.Para determinar o valor correto para o atributo do assembly <SafeControl> da sua Web Part, use o utilitário sn.exe em linha de comando: sn.exe -T c:\inetpub\wwwroot\bin\SimpleWebPart.dll

    Nota: Você também pode determinar o valor de PublicKeyToken correto para o assembly de sua Web Part, executando de outra forma:

    8. Dentro do Windows Explorer, abra a pasta C:\inetpub\wwwroot\bin.

    9. Em uma janela separada, abra a pasta C:\Windows\Assembly. (C:\Windows\Assembly expõe os conteúdos do GAC.)

    10. Arraste seu assembly Web Part ( seu exemplo para esses procedimentos deve ser nomeado para SimpleWebPart.dll) da pasta C:\inetpub\wwwroot\bin para a pasta C:\Windows\Assembly.

    11. Na pasta C:\Windows\Assembly, clique com o botão direito no assembly, e então clique em Properties.

    12. Copie o valor de PublicKeyToken, e cole dentro da tag <SafeControl> do seu assembly.

    13. Na pasta C:\Windows\Assembly, clique com o botão direito no assembly, e clique em Delete.

    Criando o arquivo Web Part Definition (.dwp)

    Um arquivo Web Part Definition (. dwp) é um arquivo simples XML que contém property settings de uma única Web Part. Para importar sua Web Part em uma Web Part Page, simplesmente faça o upload do arquivo .dwp. Depois de feito o upload da sua Web Part , você pode exibir a Web Part arrastando para uma das zonas de uma Web Part Page.

    Duas properties são requeridas dentro do arquivo .dwp: Assembly e TypeName. Porém, para exibir o nome default e a descrição da sua Web Part depois que foi importada, você também deveria incluir as propriedades de Título e Descrição. Se você quiser setar outras propriedades da sua Web Part durante a importação, você também pode definir dentro do arquivo .dwp. Um arquivo .dwp tem o seguinte formato:

    <?xml version="1.0"?>
    <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
       <Assembly>AssemblyName(with no .dll extension), Version=VersionNumber, Culture=Culture, 
    PublicKeyToken=PublicKeyToken</Assembly>
       <TypeName>WebPartNamespace.WebPartClassName</TypeName>
       <Title>DefaultWebPartTitle</Title>
       <Description>WebPartDescription</Description>
    </WebPart>
    

    Se você usasse os Web Part Templates, o arquivo .dwp terá sido criado automaticamente para você; há pouco tenha certeza que depois que você também mudou o nome da sua Web Part você terá que mudar o TypeName correspondente dentro o. arquivo .dwp. Se você não usar os Web Part Templates para criar um arquivo .dwp como mostrado no exemplo da sua Web Part, digite as seguintes linhas em um novo documento Notepad e salve como SimpleWebPart.dwp no diretório C:\Inetpub\wwwroot\bin.

    <?xml version="1.0"?>
    <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
       <Assembly>SimpleWebPart, Version=1.0.0.0, Culture=Neutral, 
    PublicKeyToken=def148956c61a16b</Assembly>
       <TypeName>MyWebParts.SimpleWebPart</TypeName>
       <Title>My Simple Web Part</Title>
       <Description>A sample Web Part</Description>
    </WebPart>
    

    Nota: No exemplo anterior, substitua o valor de PublicKeyToken (def148956c61a16b) com o valor atual para o assembly da sua Web Part.

    Importe sua Web Part em uma Web Part Page

    Para usar e testar sua Web Part, importe em uma Web Part Page em um servidor Windows SharePoint Service ou SharePoint Portal Server.

    Para importar sua Web Part

    1. Abra a Web Part Page no seu servidor.

    2. Clique em Modify My Page ou Modify Shared Page (dependendo se você esta em Personal View ou Shared View) no canto superior direito da página clique em Add Web Parts no menu.

    3. Clique Import.

    4. Localize na pasta o arquivo SimpleWebPart.dwp e clique no botão de Upload. Depois de realizado o upload, a página dará um refresh e "My Simple Web Part" deverá ser exibida debaixo Import Web Part.

    5. Arraste o ícone próximo a "My Simple Web Part " para uma zona na Web Part Page.

    Digite algum texto dentro do textbox, e então clique em Set Web Part Title para testá-la, boa sorte.

    Conclusão

    Neste artigo, nós vimos como criar uma Web Part, efetuar o deployment, registrá-la, criar o arquivo Web Part Definition (.dwp), importá-la e ultilizá-la em uma intranet corporativa.

    Até o próximo artigo...

  • Maycol Sneider Romelli

    Maycol Sneider Romelli - Integrante de D&PE da Microsoft Brasil, aonde ministra palestras na área de desenvolvimento, é também escritor de várias revistas e sites no Brasil como: Revista MSDN Magazine, Revista Desenvolvedor, Revista SQL Magazine, Revista Developers Magazine, Site MSDN Brazil, Site Linha de Código e Site Portal Web Mobile. Colaborou também com as extintas revistas .NET Magazine e VSPJ.