Archive for abril \26\UTC 2009

Desenvolvendo WebParts no SharePoint 2007 – Parte 1

26 de abril de 2009

Overview

Hoje vou apresentar como desenvolver WebParts Customizadas no SharePoint, levando em consideração que esse é o modelo ideal para desenvolvimentos customizados dentro do SharePoint.

Esse artigo faz parte de uma série que estou planejando publicar, levando em consideração a importância desse recurso de extensibilidade.

Desenvolver WebParts Customizadas é uma das tarefas de desenvolvimento mais utilizadas e recomendadas como recurso de extensibilidade no SharePoint, lembrando que a tecnologia Windows SharePoint Services 3.0 é baseada no .NET Framework 2.0, é possível desenvolver WebParts derivando de duas principais classes:

Microsoft.SharePoint.WebPartPages.WebPart (SharePoint)
System.Web.UI.WebControls.WebParts.WebPart (ASP.NET)

Na verdade a classe de WebPart do SharePoint herda a classe do ASP.NET, A Microsoft recomenda utilizar a classe do ASP.NET no desenvolvimento das suas WebParts,  a classe do SharePoint foi criada principalmente para manter compatibilidade com versões anteriores do SharePoint, como o Windows SharePoint Services 2.0 (SharePoint 2003), mas o objetivo desse artigo não é me aprofundar no conceito de WebParts x SharePoint e sim em como desenvolvê-las, para maiores informações sobre esse funcionamento, recomendo a leitura dos artigos abaixo:

Infra-estrutura das Web Parts no Windows SharePoint Services 3.0
http://msdn.microsoft.com/pt-br/library/ms415560.aspx

ASP.NET Web Parts Controls
http://msdn.microsoft.com/en-us/library/e0s9t4ck.aspx

Desenvolvendo WebParts no SharePoint 2007 – Parte 1

26 de abril de 2009

Solução

Existem alguns modelos para o desenvolvimento de WebParts Customizadas no SharePoint, nesse artigo vamos explorar a criação de uma Webpart Simples.

Para esse exemplo vamos utilizar o template de Projeto Web Part, disponível no Visual Studio 2008 Extensions for Windows SharePoint Services 3.0, v1.2, pois esse modelo de trabalho vai nos trazer maior produtividade. Caso queiram conferir como desenvolver passo-a-passo esse mesmo exemplo sem a "Extension”, sugiro a leitura desse artigo no SDK do WSS 3.0:

Walkthrough: Creating a Basic Web Part
http://msdn.microsoft.com/en-us/library/ms415817.aspx

Requisitos:

Microsoft C#
Visual Studio 2008 + Extensions for Windows SharePoint Services 3.0, v1.2
Windows SharePoint Services 3.0

Obs.: Para esse artigo eu utilizei a VM “WSS 3.0 SP1 Developer Evaluation”, disponível para download em: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=1beeac6f-2ea1-4769-9948-74a74bd604fa

 

1. Criando um projeto no Visual Studio.

1.1.  No Visual Studio, clique “File/New/Project”.

 

1.2.  Na janela New Project, clique em “Visual C#/SharePoint/Web Part”, renomeie o nome do Projeto para “DevWebPart”.

 

 

1.3.  Exclua a classe criada por padrão “WebPart1”, na janela Solution Explorer, clique com botão direito na pasta Webpart 1 e clique em Delete.

 

1.4.  Crie uma nova Web Part.

 

a.    Na janela Solution Explorer, clique com o botão direito  no projeto

b.    Depois em “Add/New Item”.

c.    No campo Name digite “WebPartSimples

d.    Depois clique em Add.

 

 

 

Note na imagem acima que o Visual Studio adicionou 3 arquivos para nossa Web Part, são eles:

 

§  WebPartSimples.cs: Classe do tipo System.Web.UI.WebControls.Webparts, que contém o código com a lógica que será implantada na WebPart

§  WebPartSimples.webpart: Contém as propriedades para a Web Part

§  WebPartSimples.xml:  Determina o local que a Web Part estará localizada com os caminhos do SharePoint.

 

1.5.  Alterando as propriedades da Web Part no arquivo .webpart.

 

a.    Clique 2 vezes no arquivo “WebPartSimples.webpart”.

b.    Altere o nó <properties>:

 

<properties>

  <property name="Title" type="string">Web Part Simples</property>

  <property name="Description" type="string">

   Essa é uma Web Part Simples!

 </property>

</properties>

 

1.6.  Inserindo a lógica da Web Part no arquivo “.cs”.

 

a.    Clique 2 vezes no arquivo ““WebPartSimples.cs

Notem que alguns métodos e propriedades já foram criados para a nossa classe pelo template do VS.

b.    Altere o método CreateChildControls(), retire o comentário das linhas que adiciona o Label, conforme ilustração abaixo:

protected override void CreateChildControls()

       {

            base.CreateChildControls();

 

            // TODO: add custom rendering code here.

            Label label = new Label();

            label.Text = "Hello SharePointer’s";

            this.Controls.Add(label);

}

1.7.  Fazendo o Deploy da Web Part para o SharePoint.

 

a.    Na janela Solution Explorer, clique o botão direito no projeto e clique em “Properties”.

b.    Na janela de Propriedades, navegue até a guia “Debug”, na seção “Start Action”,  no campo “Start browser with URL”, digite a URL do seu site que deseja publicar sua Web Part.

c.    Salve o projeto.

d.    Novamente na janela Solution Explorer, clique com o botão direito na Solution e clique na opção “Deploy Solution”.

e.    Confira que no site indicado que a feature “WebPartSimples” já está disponível e ativada (Site Actions/Site Settings/Site Collection Features).

 

 

Importante entender que quando clicamos em Deploy Solution no Visual Studio, o mesmo realizou as seguintes tarefas automaticamente.

 

§  Compilou o projeto e gerou a DLL.

§  Criou a Solution “.WSP”.

§  Criou o arquivo BAT de Setup.

§  Adicionou a Solution para o site indicado.

§  Fez o “Deploy” da Solution.

§  Ativou a Feature “WebPartSimples”.

§  Executou um Recycling na “Application Pool” do site indicado.

Notem na pasta do projeto (Na janela Solution Explorer/Clique com o botão direito no projeto/Open Folder in Windows Explorer) que na pasta “Bin/Debug” foi criado o arquivo “.wsp” da solution.

Caso queiram mais informações do modelo de Deploy “Solution/Feature” utilizado pelo Visual Studio, recomendo que leiam o material abaixo:

Using Solution Packages to Deploy Features and Content in Windows SharePoint Services 3.0
http://msdn.microsoft.com/en-us/library/dd348394.aspx

f.     Confira a Web Part na Galeria de Web Parts (Site Actions/Site Settings/WebParts).

 

 

1.8.  Adicionando sua Web part na página principal.

 

a.    Navegue até sua página principal, do site indicado anteriormente na etapa de Deploy.

b.    Clique em “Site Actions/Edit Page”.

c.    Clique no botão “Add a Web Part”, procure a Web Part, marque-a e clique em “Add”.

 

 

       

d.    Sua Web Part deve aparecer como na imagem abaixo:

 

 

Conclusão

Nesse artigo nós exploramos de forma simples e muito produtiva como criar e publicar uma Web Part no SharePoint utilizando os recursos de produtividade do “Visual Studio 2008 Extensions for Windows SharePoint Services 3.0, v1.2”.

No próximo artigo sobre Web Part, irei explorar uma regra de negócio mais avançada, aguardem.

Service Pack 2 para MOSS 2007 e WSS 3.0

26 de abril de 2009

O Time de Produto do SharePoint anunciou em seu blog oficial o Service Pack 2 do MOSS 2007 e do WSS 3.0.

O lançamento do pacote está previsto para o dia 28 de Abril.

Leiam mais em http://blogs.msdn.com/sharepoint/

Abraços!

Troubleshooting: Este formulário foi personalizado não está funcionando com anexo.

18 de abril de 2009

Hoje um cliente solicitou que fosse habilitado a opção de anexar arquivos em formulários de tarefas geradas por alguns workflows da empresa, verifiquei que na lista de tarefas que era utilizada pelo workflow os anexos estavam habilitados normalmente, inclusive no form de “new item” padrão da lista, essa opção também estava OK, porém nos formulários gerados pelo workflow desenvolvido no SharePoint Designer não aparecia a opção de “Anexar Arquivo”.

Não teve jeito, vi como a forma mais fácil customizar os formulários gerados pela atividade “Coletar dados do usuário” dos workflows da empresa, pequisei uma forma de disponibilizar a opção de anexar arquivos e não encontrei nenhuma forma de habilitar pela interface.

O jeito foi mesmo alterar programaticamente a página de formulários, eu simplesmente adicionei uma linha a mais na tabela que gerava meu formulário de tarefa com uma chamada ao método JavaScript padrão “javascript:UploadAttachment();”, confira abaixo:

<a href="javascript:UploadAttachment()" onclick="javascript:UploadAttachment();" accesskey="I" title="Anexar Arquivo" class=’ms-toolbar’> <img align=’absmiddle’ alt="Anexar Arquivo" src="/_layouts/images/attachtb.gif" style=’border-width:0px;’ width=’16’ height=’16’/></a><a href="javascript:UploadAttachment()" onclick="javascript:UploadAttachment();" accesskey="I" title="Anexar Arquivo" class=’ms-toolbar’>Anexar Arquivo</a>

Até ai tudo bem, tudo funcionando…

Porém na hora de executar minha página e clicar no link para “Anexar Arquivo”, ele me gerava o erro “Este formulário foi personalizado não está funcionando com anexo” ou "This form was customized not working with attachment" para sites no idioma Inglês.

Pesquisando na internet encontrei um artigo de suporte da Microsoft falando como resolver o problema, após alterar algumas linhas tudo resolvido, veja o artigo abaixo:

http://support.microsoft.com/kb/953271/

Conclusão… Facilmente consegui habilitar a opção de anexar arquivos para o meu formulário gerado pelo workflow do SharePoint Designer.

Abraços!

Habilitando a execução de códigos ASP.NET no SharePoint Server 2007

18 de abril de 2009

Uma dúvida comum que surge para nós desenvolvedores antigos, que já trabalhamos com desenvolvimento .NET puro, é se podemos simplesmente injetar códigos ASP .NET nas nossas páginas SharePoint.

A resposta é sim! Ao contrário do SharePoint Portal Server 2003/WSS 2.0, no SharePoint Server 2007/WSS 3.0 podemos desenvolver dessa forma também, mas todos nós devemos levar em consideração algo muito importante, o SharePoint é uma plataforma principalmente de Colaboração e Produtividade, portanto sempre que pensarmos em customizações e desenvolvimentos avançados dentro do SharePoint devemos ter o cuidado para não perdermos a essência desse produto que é ser produtivo, analisem bem toda customização e se certifiquem de que a mesma não irá afetar a produtividade do seu projeto. 😉

Antes de utilizar códigos ASP.NET em nossas aplicações SharePoint, precisamos habilitar a execução de scripts server-side nos nossos sites, para isso, siga os seguintes passos:

1.    Navegue até a raíz do diretório virtual do site que você deseja habilitar (geralmente C:InetpubwwwrootwssVirtualDirectoriesHostValue+Porta_do_seu_site)

2.    Abra o arquivo web.config da sua aplicação.

3.    Navegue até o node “PageParserPaths”.

 

    <SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false" AllowUnsafeControls="False">

      <PageParserPaths>

      </PageParserPaths>

    </SafeMode>

 

4.    Por padrão essa seção é vazia, ela é a responsável por gerenciar os caminhos virtuais que estão autorizados a executar scripts server-side na sua aplicação, adicione um node “PageParserPath” com o caminho do site que deseja autorizar para executar os scripts, veja um exemplo abaixo:

 

<PageParserPaths>

        <PageParserPath VirtualPath="/pages/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/>

</PageParserPaths>

 

Propriedades mais importantes:

 

CompilationMode

o    Always – As páginas sempre serão compiladas (padrão)

o    Auto – O ASP.NET vai tentar não compilar as páginas.

o    Never – as páginas nunca serão compiladas dinâmicamente.

 

VirtualPath, aponta o endereço virtual que estará autorizado a executar scripts server-side.

 

IncludeSubFolders, indica se as sub folder desse endereço virtual também poderão executar scripts server-side.

Seguindo esses passos seu site já estará configurado para executar scripts server-side, à partir daí você poderá injetar códigos ASP .NET em suas páginas, mas nunca se esqueçam de levar em consideração os pontos informados no início desse artigo.

Desenvolvedor 5 Estrelas – .NET

16 de abril de 2009
Hoje acessei o programa Desenvolvedor 5 Estrelas do MSDN e verifiquei que o programa foi atualizado, já tinha feito algum bom tempo atrás até a 3ª estrela e lembro que o material tinha ótima qualidade.
 
Agora pelo que vi, também temos a 4ª estrela disponível, inclusive para nós SharePointers achei o material muito interessante, com atenção especial para o módulo do Windows Workflow Foundation, utilizado pelos workflows do SharePoint. 😉
 
Fica a dica, quem nunca fez vale fazer desde o inicio, até porque o SharePoint é uma plataforma desenvolvida sobre o Framework 2.0 utilizando recursos do Framework .Net 3.0/3.5!
 
Conhecimento nunca é muito 😀
 
MSDN – Desenvolvedor 5 Estrelas .NET
 
Bons estudos!

Download do SharePoint Designer Free

16 de abril de 2009
Pessoal,
 
Abaixo segue um link de utilidade pública, o SharePoint Designer que agora é free 😉
 
SharePoint Designer 2007 FREE
 
Abraços.

SharePoint 2010!

16 de abril de 2009
Olá Pessoal!
 
Foi anunciado no blog do time do Sharepoint o lançamento da próxima versão do produto, Microsoft Sharepoint Server 2010!
 
O nome do SharePoint também foi alterado, o Office deve sair e o atual MOSS 2007 (Microsoft Office SharePoint Server) deve ficar apenas Microsoft SharePoint Server 2010, provavelmente nós, comunidade técnica devemos ter um preview agora no 3º trimestre de 2009, mas o produto só será disponibilizado no início de 2010.

Leia mais em http://blogs.msdn.com/sharepoint/ e http://www.microsoft.com/presspass/features/2009/Apr09/04-15Office2010.mspx.

 
Abraços!

Criando e Explorando os Event Receivers no MOSS 2007/WSS 3.0 – Overview

13 de abril de 2009

Este post faz parte de uma série de 3:
Criando e Explorando os Event Receivers no MOSS 2007/WSS 3.0 – Overview
Criando e Explorando os Event Receivers no MOSS 2007/WSS 3.0 – Projeto
Criando e Explorando os Event Receivers no MOSS 2007 / WSS 3.0 – Deploy

Olá galeraaa! 😀

Bom, em pleno feriado de páscoa decidi aproveitar a calmaria e paz para ficar em casa estudando e compartilhando um pouco de informação, porque durante o dia-a-dia as coisas vão cada dia mais corridas. K

Hoje gostaria de falar um pouco sobre Event Handlers no MOSS 2007 / WSS 3.0, na minha opinião um dos recursos de extensibilidade mais fantástico do SharePoint!

Event Receiver, como é chamado no SharePoint, tem o objetivo de manipular eventos que ocorrem nas aplicações Sharepoint, abaixo listo os Tipos de Eventos suportados:

·          Microsoft.SharePoint.SPWebEventReceiver – Nível Site

SiteDeleted

SiteDeleting

WebDeleted

WebDeleting

WebMoved

WebMoving

·         Microsoft.SharePoint.SPListEventReceiver  – Nível Lista

FieldAdded

FieldAdding

FieldDeleted

FieldDeleting

FieldUpdated

FieldUpdating 

·         Microsoft.SharePoint.SPItemEventReceiver  – Nível Item de Lista

ItemAdded

ItemAdding

ItemAttachmentAdded

ItemAttachmentAdding

ItemAttachmentDeleted

ItemAttachmentDeleting

ItemCheckedIn

ItemCheckedOut

ItemCheckingIn

ItemCheckingOut

ItemDeleted

ItemDeleting

ItemFileConverted

ItemFileMoved

ItemFileMoving

ItemUncheckedOut

ItemUncheckingOut

ItemUpdated

ItemUpdating

 

Dentro desses tipos vocês podem notar que existem os eventos síncronos e assíncronos, vejamos algumas características deles:

Eventos Síncronos (terminam com “ing” no final)

§  Antes do Evento acontecer (ex: Item sendo excluído).

§  Bloqueia o evento até que o código seja executado.

§  Permite que o evento seja cancelado, antes que ele seja concluído, antes que os eventos assíncronos aconteçam.

Eventos Assíncronos (terminam com “end” no final)

§  Ocorre quando o evento já aconteceu (ex: Item de lista criado).

§  Não intercepta a execução do evento durante o código.

Criando e Explorando os Event Receivers no MOSS 2007/WSS 3.0 – Projeto

13 de abril de 2009

Este post faz parte de uma série de 3:
Criando e Explorando os Event Receivers no MOSS 2007/WSS 3.0 – Overview
Criando e Explorando os Event Receivers no MOSS 2007/WSS 3.0 – Projeto
Criando e Explorando os Event Receivers no MOSS 2007 / WSS 3.0 – Deploy

Bom… Após um breve overview, vamos a prática, vou utilizar um caso simples que utilizei Event Receivers esses dias, precisava preencher um campo X que era a união de dois outros campos de uma lista customizada.

Vamos utilizar o método “ItemAdded” para interceptar os itens quando eles forem criados,  nosso EventReceiver vai se encarregar de preencher o “campo X” nesse momento ;).

Para esse exemplo, vou utilizar um ambiente com o Visual Studio 2008, Windows SharePoint Services 3.0 e o Windows Server 2003 instalados em uma VM.

Nossa lista do tipo “Custom List” (ex: ListaX) irá conter basicamente os seguintes campos:

§  Title – texto de uma linha – obrigatório

§  MeuID – texto de uma linha

§  Created – data – obrigatório

Obs.: Os campos “Created” e “Title” são criados automaticamente pelo SharePoint.

Siga os passos abaixo:

1 – Abra o Visual Studio.

2 – Crie um Novo Projeto do tipo “Class Library”.

 

3 – Adicione referência a assembly Microsoft.SharePoint no seu projeto.

 

4 – Renomeie a classe que é adicionada por padrão (ex: ManipulandoItens).

5 – Importe para essa classe o namespace Microsoft.SharePoint.

using Microsoft.SharePoint;

6 – No nosso caso vamos herdar a classe SPItemEventReceiver, porque queremos manipular eventos no nível de itens de lista.

          public class ManipulandoItens:SPItemEventReceiver

7 – Implemente “override” no método ItemAdded e a lógica com o código para preencher o nosso campo, nesse caso a coluna “MeuID”

public override void ItemAdded(SPItemEventProperties properties)

        {

            SPListItem Item = properties.ListItem;

            string Titulo = Item["Title"].ToString();

            string DataCriacao = Convert.ToDateTime(Item["Created"]).ToShortDateString();

 

            Item["MeuID"] = Titulo + "_" + DataCriacao;

            Item.SystemUpdate();

        }

Verifiquem que eu utilizei o método “SystemUpdate()”, invez de utilizar “Update”, como é mais comum, para quem não sabe esse método é utilizado na prática para não registrar a alteração do item, evitar por exemplo novas versões do documento, ou seja, a alteração nessa versão é transparente para a aplicação, como uma alteração realizada pelo “sistema”.

Nosso método que manipula o evento ItemAdded está criado, toda vez que um item for adicionado o SharePoint irá executar esse código.

Desta forma temos um exemplo de manipulação de eventos assíncronos, também irei criar um exemplo para eventos síncronos, vamos simplesmente interceptar todo evento de exclusão de itens.

8 – Implemente “override” no método de “ItemDeleting” e a lógica com o código para simular um erro ao excluir um item.

public override void ItemDeleting(SPItemEventProperties properties)

{

  properties.Cancel = true;

  properties.ErrorMessage = "Os itens da lista " + properties.ListTitle    + " não podem ser excluídos.";
}

 

  

9 – Compile a aplicação e elimine qualquer erro que aparecer (CTRL+SHIFT+B).

10 – Associe uma “strongly name” à sua assembly.

§  Na Janela “Solution Explorer” do VS 2008, clique 2 vezes na pasta “Properties” do seu projeto.

§  Na janela Properties, navegue até a guia “Signing”.

§  Marque a opção “Sign the assembly”.

§  No dropdown “Choose a strong name key file”, clique em New e atribua um nome para o “Key file name”, desmarque a opção “Protect my key file with a password”.

§  Clique em OK e depois em Salvar na janela Properties.

11 – Compile novamete a aplicação (CTRL+SHIFT+B).

Agora precisamos fazer o deploy do nosso Event Receiver no SharePoint, existem várias formas de executar esse procedimento, vou optar pelo conceito simples de features, seguindo o exemplo do SDK do WSS 3.0.

12 – Faça o Deploy da DLL para o SharePoint.

§  Copie a DLL (binDebug) gerada pelo seu projeto no GAC (C:WINDOWSassembly).

Com a feature conseguiremos informar em qual tipo de listas o SharePoint vai ativar o Event Receiver.