Deploy de uma solution “.wsp” no SharePoint

Boa tarde SharePointers,
hoje vou demonstrar de forma bem simples como executar um deploy de uma solution ".wsp" contendo uma web part no Sharepoint.
Este deploy é muito utilizado quando pegamos por exemplo um projeto de web parts ou uma feature, como os exemplos do site CodePlex(www.codeplex.com).
Para instalar uma feature siga os seguintes passos:
Adicionar a solution da feature utilizando o stsadm:
stsadm -o addsolution -filename MinhaSolution.wsp
 
Depois de adicionar a solution, você deve executar o deploy no seu site. Para isto você pode utilizar o stsadm:
 
stsadm -o deploysolution -name MinhaSolution.wsp -immediate -allcontenturls
Sendo que o -allcontenturls vai instalar em todos os sites, se você quiser especificar qual site instalar troque pelo parametro "-url http:\nomedoserver:porta"
Ou ainda pela central administration/deploy solution.
 
Obs.: Se a web part não aparecer na sua galeria de web parts para seleção, clique em Site "Settings/Web Parts", assim voce ira visualizar todas as web parts da sua gelria de web parts. Se realmente a web part não estiver aparecendo nesta lista, clique em "New", procure ela na lista, selecione e depois clique em "Populate Gallery".

 

Pronto, feito o deploy agora é só adicionar a web part em alguma web part zone.

Abs e até a próxima.

Migrando ambientes SharePoint 2007 restaurando base de dados de Conteúdo utilizando o SQL Server

Boa Noite Sharepointers.
Depois de muito tempo sem postar aqui no blog vou postar um Case desenvolvido em um cliente na última semana aqui no Rio de Janeiro tomando um sol de 45° graus na cabeça =).
Hoje o post vai ser relacionado a infra estrutura de SharePoint.
O ambiente SharePoint era muito simples era preciso criar um novo ambiente (Farm) com servidores dedicados para aplicação, banco de dados, etc, mas teríamos que restaurar as informações existentes no ambiente atual.
Neste caso podemos resolver o problema de diversas formas:
Attach da Base de Dados de conteúdo via stsadm, backup e restore via stsadm e também backup e restore via SQL Server.
Nesta caso optei pelo backup e restore da base de dados feita diretamente no SQL Server.
Segue os passos para efetuar a migração de ambientes:

Passos:

  • No Sql Server:
    o Executar o comando de backup do Content Database no ambiente antigo, utilizando o SQL Server Management Studio.
    o Copiar o arquivo pela rede para o novo servidor de banco de dados.
    o Executar o comando de restore do arquivo de backup do Content Database antigo no ambiente novo.
  • No SharePoint
    o Entrar no Central Administration / Application Management e depois acessar o link  Create or extend Web application
    o Crie uma nova Web Application com o nome do portal e a porta do servidor de uso.
        Obs.: Não se preocupe com o nome da base de conteúdo, pois esta base será apenas utilizada para criar esta web application.
        Após  executada esta ação, a base de dados restaurada será anexada a essa web application e esta base nova será apagada.
    o Entre no link Web application list e selecione a nova Web Application.
    o Clique no link Content databases e depois no link Add Content Database.
    o Digite o nome do banco de dados de conteúdo que foi restaurado da outra base de dados no campo Database Name.
    o Na lista criada de Content Databases referentes a esta Web Application remova a base de dados criada no momento da criação da Web Application e mantenha apenas a base restaurada.
    o Desta forma se for acessado o link de Site Collection list os sites do ambiente antigo já estarão disponíveis.

Desta forma todas as suas informações já estão contidas no novo ambiente, mas em muitos casos existe no SharePoint as customizações (Features, Web Parts,Workflows,etc).

Então, depois de anexar a base de conteúdo restaurada na sua nova Web Application, verifique todas as customizações e seus arquivos para deploy no novo server (wsp’s, dll’s, etc)

Pronto, o novo ambiente está criado e configurado.

Este procedimento pode conter algumas falhas, como por exemplo GUID’s não serem referenciadas, etc. Então sempre que executar uma restauração de conteúdo desta forma, verifique todo o funcionamento do site.
Por hoje é só galera, apesar da falta de prints creio que seguindo os passos, todo sharepointer consiga executar esta migração que é bem simples.

Abs e até a próxima.

Criando uma WebPart Customizada – Part 2

Boa Noite Sharepointers,
bom, nos últimos dias estive estudando muito RM(Record Management) e também criando uma Framework para customizações sharepoint no .Net, por isso deixei um pouco o blog de lado.
 
No último post comentei sobre as diversas formas de desenvolver uma WebPart customizada, desenvolvi um tutorial de como desenvolver de forma simples utilizando uma Class Library no VS.Net e iria continuar mostrando como desenvolver utilizando o Visual Studio Extensions for Sharepoint, que é a forma mais utilizada no mercado, mas acabei encontrando este post de um colega de trabalho no blog CanalSharepoint.com.br, no qual ele trata passo a passo a criação utilizando esta ferramenta.
 
Segue o link para o tutorial:
 
 
Juntando os conhecimentos de criamos das duas formas, já temos uma noção de como funcionam as WebParts e o que podemos fazer customizando o sharepoint nos nossos projetos.
 
 
Como venho de anos de trabalho com o ASP.Net e C# estou desenvolvendo uma Framework .Net para deixar mais simples o desenvolvimento de grandes cutomizações Sharepoint.
Trabalhando com listas mapeadas e criando objetos como entidades dentro do projeto, podemos ter infinitas possibilidades de ações genéricas utilizando as features do Framework .Net.
A facilidade de desenvolvimento de grandes projetos e de manutenção, faz da criação de uma framework simples para customizações uma ótima iniciativa dentro das empresas de desenvolvimento de soluções Sharepoint.
 
Abs e até a próxima.

Criando uma WebPart Customizada – Part 1

Boa Noite Sharepointers,

Hoje vamos desenvolver uma web part customizada.

Nativamente o Sharepoint já nos oferece uma grande quantidade de webparts que, com pequenas customizações e configurações, antendem grande parte dos casos. Mas mesmo assim, em grandes projetos é bem comum termos que desenvolver “aplicativos” .net para resolver nossos problemas, estas soluções são as webparts customizadas.

Existem diversas formas de se criar uma webpart, desde criar um simples projeto de class library no Visual Studio com a sua estrutura e objetos sendo criados nela, podemos criar um User Control com o visual de nossa webpart e apenas compilar o código de apoio do aplicativo ou ainda criar, utilizando o Visual Studio 2008 Extensions for Sharepoint, dentro de um site em branco um novo projeto de webpart(com uma arquivo de compilação, um arquivo .webpart para configurações da webpart e ainda um arquivo .xml.

No primeiro exemplo vou desenvolver uma WebPart da forma mais simples e que muitas pessoas desconhecem. Sem utilizar um UserControl e sem utilizar o Extensions for Sharepoint, este exemplo seguira uma linha bem simples de um desenvolvedor .Net entender.

Primeiro passo é criarmos um novo projeto do tipo Windows Class Library, um projeto de arquivos de classe que quando compilados darão origem a uma dll.

Depois da criação do projeto devemos adiconar a referência a System.Web e a Microsoft.SharePoint, clicando com o botão direitona pasta References, em Add Reference e depois selecionar estes namespaces.

Depois das devidas referências criadas devemos abrir o arquivo WebPartsUsandoClassLibrarys.cs e adicionarmos estas referências a ele:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Web;

using System.Web.UI.WebControls.WebParts;

using Microsoft.SharePoint;

using System.Web.UI.WebControls;

 

namespace WebPartsUsandoClassLibrarys

{

    public class Cadastro : WebPart

    {

    }

}

 E definir que a classe irá herdar de WebPart.

Para termos acesso aos métodos da WebPart começaremos a digitar “protected override”  e utilizamos o intellisense do visual studio para sobreescrevermos estes métodos e eventos com os parâmetros adequados.

No exemplo abaixo estou apenas utilizando o método CreateChildControls(), responsável por criar os objetos que serão mostrados na página.

namespace WebPartsUsandoClassLibrarys

{

    public class Cadastro : WebPart

    {

        #region Variáveis

        Label lblNome = null;

        Label lblEmail = null;

 

        TextBox txtNome = null;

        TextBox txtEmail = null;

 

        Button btnSalvar = null;

        Button btnCancelar = null;

        #endregion

 

        #region Métodos Protected

        protected override void CreateChildControls()

        {

            lblNome = new Label();

            lblNome.Text = "Nome :";

            Controls.Add(lblNome);

 

            lblEmail = new Label();

            lblEmail.Text = "Email :";

            Controls.Add(lblEmail);

 

            txtNome = new TextBox();

            txtNome.Width = Unit.Pixel(200);

            txtNome.ID = "txtNome";

            Controls.Add(txtNome);

 

            txtEmail = new TextBox();

            txtEmail.Width = Unit.Pixel(200);

            txtEmail.ID = "txtEmail";

            Controls.Add(txtEmail);

 

            btnCancelar = new Button();

            btnCancelar.ID = "btnCancelar";

            btnCancelar.Click += new EventHandler(btnCancelar_Click);

btnCancelar.Text = "Cancelar";

            Controls.Add(btnCancelar);

 

            btnSalvar = new Button();

            btnSalvar.ID = "btnSalvar";

            btnSalvar.Click += new EventHandler(btnSalvar_Click);

btnSalvar.Text = "Salvar";

            Controls.Add(btnSalvar);

        }

        #endregion

        #region Eventos Click

        void btnCancelar_Click(object sender, EventArgs e)

        {

            throw new NotImplementedException();

        }

 

        void btnSalvar_Click(object sender, EventArgs e)

        {

            throw new NotImplementedException();

        }

        #endregion

    }

}

 

Alem do CreateChildControls() dois métodos são bastante usados em desenvolvimentos simples de WebParts, são eles o Render(System.Web.UI.HtmlTextWriter writer), responsável por mostrar(renderizar) os objetos na sua WebPart e o OnPreRender(EventArgs e), responsável por executar ações antes da renderização dos objetos, como preencher uma lista, um DropDownList, criar uma tabela, etc.

Se o usuário não sobreescrever (der um override) nestes métodos, eles terão sua execução normal, isto é, vão apenas renderizar os objetos criados no CreateChildControls, em ordem de adição neste mesmo método.

Após desenvolvido esta primeira parte devemos assinar com uma strong key (Token) o nosso projeto de class library, para isto clicamos com o botão direito no nosso projeto e em properties.

Entramos na aba Signing como mostra a imagem acima, checamos o Sign the assembly e criamos uma nova Token clicando em New.

Podemos criar uma Token com o nome de nosso projeto, sem utilizar senhas para o assembly neste caso.

Após este passo vamos ao projeto e estartamos o build ou utilizamos a tecla de atalho CTRL+SHIFT+B para executar a compilação.

Se tudo ocorrer bem o código compilará e uma Dll será gerada dentro da pasta Bin de nosso projeto.
Abriremos a pasta C:Windowsassembly (GAC – Global Assembly Cache) e também a pasta Bin onde está a dll, e em seguida arrastamos a nova dll para a pasta de assembly do sistema.

Depois de arrastada a Dll fará parte de nosso sistema, mas para que este assembly se torne seguro para  a nossa aplicação, ainda temos que configura-lo em nosso web.config. Para isto, vamos encontrar a Dll dentro da pasta assembly e abrir as suas propriedades.

Utilizaremos estes dados para configura-la em nosso web.config.

Agora iremos até a pasta dentro de Inetput, onde se encontra nosso website(se não estiver criado ainda, procure na internet que existem diversos exemplos de como criar webapplications e sites em sharepoint) e abriremos o web.config desta aplicação.
Achamos a seção
<SafeControls> e utilizando os dados da dll gerada acima, preenchemos mais uma linha de SafeControl.

<SafeControl Assembly="WebPartsUsandoClassLibrarys, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5a4b9306b4d0c2d2" Namespace="WebPartsUsandoClassLibrarys" TypeName="*" Safe="True" />

Atente-se para que Assembly=nome da dll, namespace=namespace colocado lá no arquivo .cs, version=padrão para um novo desenv. É 1.0.0.0 e a PublicKeyToken=strong name gerado para a dll no GAC.

Após estas configurações executamos o comando “iisreset” no cmd do windows, ou ainda no Iniciar executar, para resetar nosso Internet Information Services para que ele efetue as mudanças.

Próximo passo é acessar o site pelo browser, entramos em Ações do Site, Definições do Site.
Na pagina de definições entramos na aba Web Parts na área de Galerias.
Esta pagina mostrará todas as webparts ativas que você encontra disponível para este site, como nossa webpart ainda não está ai clicamos em Novo.
Se os passos acima foram bem executados, nossa webpart irá ser mostrada por último.
Selecionamos ela e clicamos em Preencher galeria.

Após a nossa webpart já estar disponível na galeria, vamos até uma página de webparts, que pode ser a home do site como no exemplo abaixo, e clicamos em Ações do Site/Editar Página.

Nestas páginas de webparts existem lugares predefinidos que podem conter webparts, são chamados de WebPartZone, clique em algum desses e na janela que se abrirá, procure a webpart criada, pelo nome, no caso “Cadastro”, que deve estar na aba “Diversos”.
E adicione ela a página e a nossa webpart já estará visivel para os usuários do site.

Este primeiro exemplo foi uma forma bem simples de criar uma webpart, sem pensar em deploy, configurações mais avançadas, etc.

No próximo post vou fazer meu segundo exemplo, utilizando o Extensions para Sharepoint para a criação da webpart com o template correto.

Depois vou criando posts utilizando essas webparts para dar algumas dicas de desenvolvimento.

Até a próxima,

Abs

Introdução do Sharepoint Object Model

Boa noite Sharepointers,
 
Depois de conhecermos os produtos da Microsoft que são utilizados para customizar a ferramenta Sharepoint, o Visual Studio e o Sharepoint Designer, vamos conhecer um pouco sobre o Object Model do Sharepoint.
 
O Microsoft Office SharePoint Portal Server Object Model engloba uma série de namespaces, cerca de 50 no total, que fornecem uma maneira de manipular a configuração, as informações e o conteúdo de seu portal. O Object Model é tão grande que não vem ao caso detalharmos todos os namespaces, no entanto, vou tentar explicar os mais importantes e freqüentemente utilizados namespaces, classes e métodos.
 
Dos cerca de 50 espaços previstos no modelo de objeto do SharePoint Portal Server, somente 16 deles são suportados. Os outros namespaces são reservados para uso interno da Microsoft.
 
Vou explicar o uso dos mais básicos e essenciais para iniciarmos nas customizações:
 
SPFarm 
Está no topo da hierarquia do object model.
Cada objeto SPFarm tem uma coleção de servidores associados a ele representados pelo objeto SPServerCollection object.
Você pode usar uma estrutura de repetição para iterar em cada servidor através do objeto SPServerCollection.
 
SPFarm myFarm = SPFarm.Local;
SPServerCollection myServerCollection = myFarm.Servers;
foreach (SPServer myServer in myServerCollection){
    //adiciona o código para executar a ação
}
 
SPWebApplication
Representa um IIS load-balanced Web application.
No WSS, aplicações web são representadas pela classe SPWebApplication. 
Cada objeto SPWebApplication tem uma coleção de coleções de site associadas a ele e que são representados pelo objeto SPSiteCollection. 
Você pode usar uma estrutura de repetição para interar com cada coleção de site no objeto SPSiteCollection. 
Coleções de site individuais são representadas pelos objetos SPSite.
 
SPSite mySiteCollection =   new SPSite("site_collection_URL");
SPWebApplication myWebApp = mySiteCollection.WebApplication; SPSiteCollection mySiteCollections =  myWebApp.Sites;
foreach (SPSite siteCollection in mySiteCollections){
    //executa a ação na coleção de sites
}
SPSite
Através desse classe podemos acessar o nível de Site Colletion.
Uma Site Colletion é uma coleção de sites (SPWeb)
Cada objeto SPSite possui várias propriedades da coleção, tais como o responsável, conteúdo corrente do BD, a url do web site.
 
SPSite mySiteColl = new SPSite("site_collection_URL");
String siteCollOwner = mySiteColl.Owner.Name;
String contentDB = mySiteColl.ContentDatabase.Name;
String topLevelSite = mySiteCollection.RootWeb.Title;
 
Importante: Existem várias maneiras de acessar uma site collection, a maneira citada acima deve ser utilizada quando estamos em uma aplicação fora do contexto do sharepoint. Se tivermos em uma webPart dentro do contexto do Sharepoint o código acima deveria ficar assim:
 
SPSite mySiteColl = SPContext.Current.Site;
String siteCollOwner = mySiteColl.Owner.Name;
String contentDB = mySiteColl.ContentDatabase.Name;
String topLevelSite = mySiteCollection.RootWeb.Title;
 

SPWeb

Representa o nível de um único Web Site, pode ser obtido através de diversas formas, mas a mais utilizada é vindo de SPSite, como mostra o exemplo abaixo:

SPSite mySiteColl = SPContext.Current.Site;
SPWeb myWebSite = mySiteColl.OpenWeb();
SPList myList = myWebSite.Lists[“mySharepointList”];

Nele estão contidas as listas, usuários, enfim, todos os conteúdos de seu web site.

SPUser
Por exemplo para buscarmos o usuário logado no momento utilizamos:
myWebSite.CurrentUser;
Para buscar todos os usuários do website:
myWebSite.AllUsers;

Estes dois retornam objetos do tipo SPUser, muito importante para as nossas customizações, com todas as propriedades referêntes a um usuário do site.

SPList

SPList representa uma lista do sharepoint, enquanto o SPListCollection representa uma coleção dessas listas. Podem ser obtidos através de diversas formas, mas uma das mais utilizadas é vindo de SPWeb, como mostra o exemplo abaixo:

SPWeb myWebSite = mySiteColl.OpenWeb();
SPList myList = myWebSite.Lists[“mySharepointList”];

SPContext
Mesmo já tento utilizado este objeto nos exemplos acima, vou ressaltar pois é bastante importante lembrar sempre dele.
Este objeto representa o contexto atual em que a aplicação estará rodando na hora da execução
 deste bloco de código.

Exemplo Completo

             using (SPSite oSite = new SPSite(SPContext.Current.Site.ID))
            {
                using (SPWeb oWeb = oSite.OpenWeb())
                {
                    SPList oList = oWeb.Lists["Clientes"];
                    SPListItem oItem = oList.GetItems()[0];

                    return oItem;
                }
            }

  

Bom pessoal está ai, esses são os principais objetos do namespace do Sharepoint, básicos para qualquer customização de webparts em .Net.

No próximo post já começo a colocar exemplos mais técnicos desde níveis básicos até avançados.

Abs

O que precisamos saber para iniciar as customizações do Sharepoint

Boa Noite Sharepointers,
 
Vamos iniciar os posts técnicos de Sharepoint dando um overview sobre o que precisamos saber para começar a customizar esta ferrameta.
Pontos principais:
  • Sharepoint é totalmente construído sobre a tecnologia Asp.Net e C#.
  • Pode ser customizado através de WebParts, Páginas Asp.Net, Event Listeners, WorkFlows, entre outros.
  • As customizações normalmente envolvem codificação C# usando Visual Studio .Net. 
  • Usa-se o Sharepoint Object Model para ter acesso a dados e métodos de objetos dentro do Sharepoint, tal como sites, listas, etc, para isto precisamos da dll do objeto do Sharepoint no nosso PC, se este conter uma instalação da ferramenta.

A imagem abaixo mostra a estrutura de nossos produtos:

Não vou me aprofundar nas diferenças entre o MOSS e o WSS pois é uma informação fácil de encontrar pela internet, mas que o suporte a estes produtos da Microsoft vem primeiramente do Microsoft Sharepoint Designer 2007 (Ferramenta que compõe o pacote Office e foi criada para customizações e criações dentro do Sharepoint) e em segundo plano, para customizações mais complexas, o Microsoft Visual Studio 2008.

Nos próximos posts vou mostrar os principais métodos e estruturas do Object Model do Sharepoint, para customizações no Visual Studio .Net e dicas para customizações em Sharepoint Designer.
 
Abs

Sharepoint para Desenvolvedores

Boa Noite Sharepointers,
hoje eu começo a colocar dicas, exemplos e tutoriais sobre o Sharepoint, a ferramenta de colaboração da Micosoft.

Antes disso vou me apresentar:
Meu nome é Marcelo Leite, trabalho como desenvolvedor a mais de cinco anos e comecei a ter meus primeiros contatos com a ferramenta Sharepoint no começo de 2008. Desde então continuei trabalhando como desenvolvedor .Net e Sharepoint.
Devido a minha experiência, meus posts deverão ser mais voltados aos desenvolvedores que desejam customizar as funcionalidades nativas do Sharepoint, mas sempre vou tentar dar um overview do básico sobre a parte nativa do assunto antes de iniciar na customização. 
Sou formado pela FATEC de Guaratinguetá em Tecnólogo em Informática com ênfase em bancos de dados, MCP Microsoft em .Net Framework e trabalho na Terraforum Consultores, uma empresa de gestão de conhecimento que tem como objetivo, para a área de TI, se tornar uma referência nacional no desenvolvimento de portais em Sharepoint.
 
Bom espero ajudar todos que, assim como eu, sentem muita falta de referências em português para o desenvolvimento em Sharepoint.
 
Vamos então para o próximo post.
 
Abs