Você está na página 1de 71

Sumrio

04 :. Trabalhando com usercontrol e orientao a objetos


Edio 16 Nmero 16 Ano 04 2010 EDITORES Alexandre Tarifa Diego Nogare Emerson Facunte Fernanda Sallai Sergio Gonalves REVISO Fabrcio Lopes Sanchez Leandro Alves Santos Sara Barbosa EDITORAO E DIAGRAMAO Adriano Almeida Fabiano Rodrigues COLABORADORES Anderson Castro Caio Azevedo Diego Nogare Fbio Luiz Pessoa Campinho Fabrcio Lopes Sanchez talo Chesley Gomes da Silva Ramon Dures Sara Barbosa Wagner Amorim
Por: Fbio Luiz Pessoa Campinho

10 :. Trabalhando com stored procedures no .net


Por: Fabrcio Lopes Sanchez

16 :. Explorando microsot sql reporting services 2005 parte VI


Por: Caio Azevedo

23 :. Trabalhando com treeview no windows forms


Por: talo Chesley Gomes da Silva

28 :. Comparativo entre o SQL Server e o SQL Azure database


Por: Diego Nogare

31 :. Servio de transmisso do PowerPoint 2010


Por: Sara Barbosa

Fale com Editor


muito importante para a equipe saber a sua opinio sobre a revista, caso tenha alguma critica, sugesto, ou elogio entre em contato. Caso tenha interesse em publicar um artigo na revista envie o ttulo e um resumo do tema em formato Word.
revista@codificando.net

34 :. SharePoint 2010: Visual WebParts


Por: Wagner Amorim

46 :. Por que Visual Studio Team System mudou de nome?


Por: Ramon Dures

48 :. Impresso com Silverlight 4


Por: Anderson Castro

54 :. LINQ to SharePoint no SharePoint 2010


Produzido por:
Por: Wagner Amorim

64 :. O futuro do Home Office


Por: Ramon Dures

www.codificando.net

67 :. Cobertura Codificando 2010


Por: Diego Nogare

03:. Editorial

71:. .Close ( )

Edio 16 Nmero 16 Ano 04 2010

Editorial
Nossa meu primeiro editorial. Que emoo!!! Primeiramente quero agradecer esta oportunidade a comunidade Codificando.Net e principalmente ao Diego Nogare, pelo apoio que tem me dado, e claro no posso esquecer o grande Facunte, alis usarei uma frase dele que marca tudo isto: Participar de uma comunidade vencedora onde a unio o princpio bsico, faz-me refletir sobre as grandes vitrias e pequenas, porm no menos importantes derrotas. Vou contar um pouquinho sobre mim. Sou formada em Sistemas de Informao pela instituio de ensino Faculdades Integradas Campos Salles, trabalho com desenvolvimento de sistemas Web e Windows Forms usando C#, SQL e JavaScript. Mantenho um blog www.fernandasallai.com onde escrevo assuntos referentes a desenvolvimento e negcios, sempre participei dos eventos do Codificando e desde o ano passado estou participando mais ativamente atravs da revista. Nesta edio teremos: Fbio Luiz Pessoa Campinho ensina como trabalhar com usercontrol e orientao a objetos em Silverlight criando um sistema de reservas de cadeiras para festas em hotis. Fabrcio Lopes Sanchez explica como usar Store Procedures no .net em um projeto criado em camadas. Caio Azevedo apresenta a parte VI que exibe como consumir relatrios e funcionalidades do microsot sql reporting services 2005. talo Chesley Gomes da Silva apresenta de forma simples como trabalhar com TreeView no Windows Forms atravs de exemplos. Diego Nogare faz um comparativo entre SQL Server e SQL Azure database de forma direta e simples para acabar com as dvidas que freqentemente surgem. Sara Barbosa aborda a facilidade de criar uma apresentao no PowerPoint 2010 para pessoas que no esto no mesmo local fisicamente. Wagner Amorim explora um recurso que considerado o modelo mais comum de extensibilidade do SharePoint, as WebParts na nova verso do SharePoint. Ramon Dures explica por que o Visual Studio Team System mudou de nome aps o lanamento do Visual Studio 2010. Anderson Castro explica como usar uma das vrias novas features do Silverlight que permite a impresso do que est na tela, trechos de textos selecionados e mltiplas impresses. Wagner Amorim mostra uma das novidades do SharePoint 2010 para os desenvolvedores que foi o LINQ to SharePoint. Ramon Dures discute os benefcios e diferencial na vidas das pessoas que trabalham Home Office. Diego Nogare faz uma breve descrio de como foi o evento Codificando 2010. Diante de todo esse contedo de qualidade elaborado por profissionais renomados e conhecidos da comunidade s me resta agradecer a sua participao leitor e desejar uma excelente leitura! Fernanda Sallai revista@codificando.net
A mente que se abre a uma nova idia jamais voltar ao seu tamanho original. (Albert Einstein)

e-magazine

Trabalhando com usercontrol e orientao a objetos


Por: Fbio Luiz Pessoa Campinho

Quando o ASP.NET foi lanado, duas inovaes foram bastante importantes para mim. A primeira foi a interface separada do cdigo, onde o designer responsvel pela interface e o desenvolvedor responsvel pelo cdigo. A segunda foi desenvolver nossas aplicaes WEB com recursos de orientao a objetos. Quando o Silverlight foi lanado todos esses recursos foram mantidos e novas funcionalidades foram criadas proporcionando novos recursos de RIA (Rich Internet Application) e animaes para jogos ou computao grfica. Nesse artigo, iremos criar um sistema de reservas de cadeiras para festas em hotis em Silverlight. Nosso cliente deseja comprar as cadeiras selecionando o setor e a mesa. Veja a figura 1 para ter uma idia visual do nosso aplicativo.

Utilizaremos o Expression Blend 3 para criar nosso projeto, pressione as teclas Ctrl + Shift + N para criar um novo projeto do tipo Silverlight 3 Application + WebSite e d ao projeto o nome de Mapas. Nosso primeiro passo ser criar o UserControl cadeira. Para criar um UserControl v no menu File -> New Item ou pressione Ctrl + N e depois informe o nome cadeira conforme figura 2. Depois crie tambm os UserControls mesa e SetorG.

Codificando.net e-magazine

Figura 2. Criando um UserControl.

Figura 1. Uma imagem vale mais que mil palavras.

Para trabalhar com formato visual, devemos alterar o tipo do nosso LayoutRoot em todos os arquivos, para fazermos esJun / Jul - 2010

www.codificando.net

Trabalhando com usercontrol e orientao a objetos

e-magazine
para 13 da tag

sa alterao clique com o boto direito em LayoutRoot na janela Objects and Timeline, caso a janela no esteja visvel, pressione F4, depois selecione Change Layout Type -> Canvas (Figura 3). Essa alterao deve ser realizada nos arquivos -> cadeira.xaml, mesa.xaml, SetorG.xaml e MainPage.xaml.

d:DesignHeight <UserControl>.

Agora iremos adicionar o cdigo para o clique da cadeira, pressione F11 duas vezes para voltarmos para o modo visual e clique no LayoutRoot na janela Object and Timeline, na janela de propriedades (Properties), clique na imagem do quadrado com um raio (Figura 4) para listar os eventos disponveis para o objeto e d duplo clique no evento MouseLeftButtonDown. Esse evento detecta quando o mouse pressionado na cadeira.

Figura 3. Mudando o LayoutType.

No Silverlight podemos criar nossos objetos utilizando a interface visual do Blend ou codificar em xaml. Abra o arquivo cadeira.xaml e na interface visual pressione F11 para exibir o cdigo xaml. Digite o cdigo da Listagem 1 dentro da tag <Canvas>.
<Rectangle x:Name="retCadeira" Fill="#FFF85F0A" Stroke="Black" Height="13" Width="26" Canvas.Left="0" Canvas.Top="0" Cursor="Hand"/> <Rectangle Fill="White" Stroke="Black" Height="13" Width="2" Canvas.Left="10" Cursor="Hand"/>
Listagem 1. Cdigo xaml da cadeira. Figura 4. Adicionando o evento MouseLeftButtonDown

Codificando.net e-magazine

Altere tambm os valores das propriedades d:DesignWidth para 26 e

O arquivo cadeira.xaml.cs com o cdigo C# exibido e iniciaremos a codificao do nosso objeto, o cdigo est descri-

www.codificando.net

Jun / Jul - 2010

Trabalhando com usercontrol e orientao a objetos

e-magazine

to na listagem 2. Na linha 3 criamos uma varivel bool que mantm o status da cadeira indicando se j est bloqueada ou no e utilizamos essa varivel na linha 27 em um if para no permitir bloquear a mesma cadeira duas vezes. Da linha 4 at a linha 16 implementamos as propriedades que sero utilizadas no UserControl mesa para atribuir nmeros para a cadeira e informar a qual mesa ela pertence, esses valores sero utilizados na linha 28 para efetuar a persistncia em banco de dados (No estaremos escrevendo o cdigo de persistncia nesse artigo). Na linha 29, chamamos a funo que ir efetuar a mudana de cor, mudar o tipo de cursor para seta e alterar o valor da varivel de bloqueio para true.
public partial class cadeira : UserControl { bool bCadeiraBloqueada = false; Int32 _NumeroCadeira; public Int32 NumeroCadeira { get { return _NumeroCadeira; } set { _NumeroCadeira = value; } } Int32 _NumeroMesa; public Int32 NumeroMesa { get { return _NumeroMesa; } set { _NumeroMesa = value; } } public cadeira() { // Required to initialize variables InitializeComponent(); } private void LayoutRoot_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventAr gs e) { // Aqui estar o metodo que far a persistencia em banco de dados.

if (!bCadeiraBloqueada) { //Aps a persistencia realizada com sucesso, mudamos a cor da cadeira MudarCor_Cadeira(); } } public void MudarCor_Cadeira() { retCadeira.Fill = new SolidColorBrush {Color = Color.FromArgb (255, 0, 0, 0)}; retCadeira.Cursor = Cursors.Arrow; bCadeiraBloqueada = true; } }
Listagem 2. Cdigo da cadeira.

Nosso prximo passo ser criar as funcionalidades e o visual da mesa, primeiro precisamos compilar o projeto com a combinao das teclas CTRL + SHIFT + B ou pelo menu Project -> Build Project. Abra agora o arquivo mesa.xaml e adicione uma elipse ao User Control. Para adicionar uma elipse voc pode clicar na toolbox na figura do quadrado com o mouse pressionado, arrastando o cursor para o canto inferior da figura e aparecero as opes conforme figura 5, depois s clicar na rea til e iniciar o desenho da elipse. A elipse deve ter tamanho 53 de largura (Width) e 53 de altura (Height ).

Codificando.net e-magazine

Figura 5. Adicionando uma elipse.

Adicionaremos agora o objeto da cadeira ao UserControl mesa, clique em Assets

www.codificando.net

Jun / Jul - 2010

Trabalhando com usercontrol e orientao a objetos

e-magazine

na barra de ferramentas (Figura 6), depois clique em project e clique na cadeira. Prximo a mesa, desenhe a cadeira da mesma forma que fez com a elipse. Adicione quatro cadeiras e as coloque ao redor da elipse.

Figura 8. Rotacionando a cadeira.

Figura 6. Adicionando uma elipse.

Na Janela Objects and Timeline, clique em cada cadeira e na janela de propriedades d o nome de ucCadeiraX, onde X deve ser substitudo pelo nmero da cadeira de 1 a 4. Tambm na janela de propriedades na guia Miscellaneous (Figura 7), altere a propriedade NumeroCadeira. Na guia Transform (Figura 8), altere a propriedade Angle da transformao Rotate para 90 na cadeira de cima, 180 na cadeira do canto direito e 270 na cadeira inferior. Adicione um TextBlock no centro da elipse e altere o seu nome para lblNumMesa. Altere no LayoutRoot o Width e Height para 104. Nossa mesa deve ficar parecida com a figura 9. Adicionei tambm a listagem 3 para termos um comparativo do trabalho visual com o cdigo xaml gerado.

Figura 9. Imagem final da mesa.

Figura 7. Alterando o nmero da cadeira.

<Canvas x:Name="LayoutRoot"> <Ellipse Fill="White" Stroke="Black" Height="53" Width="53" Canvas.Left="25" Canvas.Top="26"/> <TextBlock x:Name="lblNumMesa" Height="19" Width="26" Canvas.Left="48" Canvas.Top="43" Text="1" TextWrapping="Wrap"/> <local:cadeira x:Name="ucCadeira1" Canvas.Top="46" NumeroCadeira="1"/> <local:cadeira x:Name="ucCadeira2" Canvas.Left="59" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto" NumeroCadeira="2"> <local:cadeira.RenderTransform> <TransformGroup> <RotateTransform Angle="90"/> </TransformGroup> </local:cadeira.RenderTransform> </local:cadeira> <local:cadeira x:Name="ucCadeira3" Canvas.Left="103" Canvas.Top="59" Render-

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

Trabalhando com usercontrol e orientao a objetos

e-magazine

TransformOrigin="0.5,0.5" NumeroCadeira="3"> <local:cadeira.RenderTransform> <TransformGroup> <RotateTransform Angle="180"/> </TransformGroup> </local:cadeira.RenderTransform> </local:cadeira> <local:cadeira x:Name="ucCadeira4" Canvas.Left="45" Canvas.Top="104" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto" NumeroCadeira="4"> <local:cadeira.RenderTransform> <TransformGroup> <RotateTransform Angle="270"/> </TransformGroup> </local:cadeira.RenderTransform> </local:cadeira> </Canvas>
Listagem 3. Elipse em xaml.

Agora vamos trabalhar o setorG, abra o arquivo SetorG.xaml e compile novamente o projeto. No meu exemplo, adicionei a imagem conforme a figura 10 onde irei colocar as mesas. Clique em assets como fizemos para adicionar as cadeiras, porm adicione as mesas. Observe que as cadeiras j vem junto com a mesa. Copie e cole 3 mesas na tela na posio onde desejar e altere a Propriedade NumeroMesa na aba de Propriedades -> na Guia Miscellaneous. Observe que altera automaticamente o nmero visvel de cada mesa. Na figura 10 voc tem um exemplo da imagem final do Setor G. Observem que no adicionamos nenhum cdigo no arquivo SetorG.xaml.cs, todas as funcionalidades esto nos arquivos cadeira.xaml.cs e mesa.xaml.cs.

Abra o arquivo mesa.xaml.cs e dentro da classe adicione a propriedade de nmero da mesa, conforme listagem 4. Essa propriedade altera o nmero exibido no TextBlock que adicionamos e altera em cada cadeira o nmero da mesa para fins de persistncia.
Int32 _NumeroMesa; public Int32 NumeroMesa { get { return _NumeroMesa; } set { _NumeroMesa = value; } lblNumMesa.Text = Convert.ToString (value); ucCadeira1.NumeroMesa = value; ucCadeira2.NumeroMesa = value; ucCadeira3.NumeroMesa = value; ucCadeira4.NumeroMesa = value; } }
Listagem 4. Arquivo mesa.xaml.cs. Figura 10. Setor G.

Codificando.net e-magazine
|

Agora abra o arquivo MainPage.xaml. No meu exemplo adicionei a imagem conforme a figura 11 onde irei criar reas onde o usurio ir clicar, depois adicione um retngulo sobre a rea especifica do Setor G da imagem. Na janela Objects and Timeline, clique em cima do retngulo que voc criou agora e depois v na janela propriedades, na opo Name especifique o nome retSetorG, depois clique na guia Brushes e depois clique em
Jun / Jul - 2010

www.codificando.net

Trabalhando com usercontrol e orientao a objetos

e-magazine

Tile Brush conforme figura 12. Nesses passos criamos uma rea onde o usurio possa clicar. No estaremos criando reas para os outros setores nesse artigo, mas caso voc deseje criar, voc deve seguir a mesma lgica.

this.Content = new SetorG();

Finalmente pressione F5 e execute a aplicao. Com a utilizao da orientao a objeto, conseguimos desenvolver uma aplicao funcional e com cdigo reutilizvel, utilizando todo o potencial de linguagens como C#. Outras animaes, aplicativos e jogos podem ser feitos utilizando esses recursos. Bom trabalho e at a prxima. Fbio Luiz Pessoa Campinho
fcampinho@hotmail.com Sou MCP, MCAD .NET e MCTS em Sharepoint e Windows 7, atualmente sou professor de Computao Grfica da Faculdade Dom Pedro II em Salvador e desenvolvedor a 15 anos. Desenvolvo para .NET desde 2001. Mantenho meu blog fcampinho.spaces.live.com

Figura 11. Imagem com o Setor G marcado para clicar.

Codificando.net e-magazine

Figura 12. Criando espaos para clique transparentes.

Para finalizar, precisamos capturar o evento de clique do mouse em cima do retngulo e chamar a janela SetorG. Ainda na janela de propriedades clique no boto de eventos e d duplo clique no evento MouseLeftButtonDown. No mtodo criado, insira o seguinte trecho de cdigo:

www.codificando.net

Jun / Jul - 2010

e-magazine

Trabalhando com stored procedures no .net

Por: Fabrcio Lopes Sanchez

Stored Procedures so recursos interessantes e amplamente utilizados no desenvolvimento de aplicativos por vrios motivos. O principal destes motivos que, uma Stored Procedure um cdigo independente que fica pr-compilado no servidor de banco de dados, assim, retiramos a onerosidade de processamento da aplicao e a passamos para o servidor sendo que, a aplicao, apenas recebe o resultado do processamento destas Stored Procedures e continua seu fluxo de execuo. Neste artigo, apresento de forma simples e direta como podemos utilizar Stored Procedures em conjunto com a linguagem C# da plataforma .NET para efetuarmos uma insero de usurio no banco de dados e, posteriormente, apresentar na tela se o registro foi inserido com sucesso ou no. Este exemplo baseado no modelo em camadas. Vamos ento criar o projeto. Aps criar as camadas, as classes de cada camada e configurar as referncias das mesmas, sua Solution Explorer deve se parecer com aquela apresentada na Figura 1:

Codificando.net e-magazine

Figura 1. Solution Explorer da Solution UsuarioProcedure.

No vou entrar em detalhes sobre a criao do projeto e configurao das camadas, pois no o objetivo deste artigo. Basicamente, o que fiz para chegar a Solution Explorer apresentada na Figura 1 foi criar uma Blank Solution, nome-la para "UsuarioProcedure", adicionar trs novos projetos (um dos projetos web e os outros dois do tipo Class Library) e configurar suas referncias.

www.codificando.net

Jun / Jul - 2010

10

Trabalhando com stored procedures no .net

e-magazine

Com nosso projeto criado e configurado, vamos ento a implementao das classes. Vamos comear a trabalhar da camada mais baixa para a camada mais alta, ou seja, iniciaremos implementando a classe clsDados. A Listagem 1 apresenta o cdigo desta classe.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.Sql; using System.Data.SqlClient; namespace Core.DAL { public class clsDados { #region --- ATRIBUTOS DA CLASSE DADOS ---private static string stringConexao = @"Data Source=FABRCIO-PC;Initial Catalog=db_Teste;User ID=sa;Password=shell"; private static SqlConnection conexaoDecup = new SqlConnection (stringConexao); #endregion #region ------- MTODOS -----------/// /// Este mtodo encerra a conexo com o Banco de Dados. /// public SqlConnection fechaConexao() { if (conexaoDecup.State == ConnectionState.Open) { conexaoDecup.Close(); }

return conexaoDecup; } /// /// Este mtodo verifica o status da conexo com o Banco de Dados. Caso esta esteja fechada, o mtodo abre a conexo. /// public SqlConnection abreConexao() { if (conexaoDecup.State == ConnectionState.Closed) { conexaoDecup.Open(); } return conexaoDecup; } #endregion } }
Listagem 1. Cdigo Fonte da classe clsDados.

Novamente no entrarei nos detalhes da implementao da classe por no ser o objetivo deste artigo, entretanto, algumas caractersticas da mesma precisam de um pouco mais de nossa ateno. Veja o seguinte trecho de cdigo:

Codificando.net e-magazine
|

private static string stringConexao = @"Data Source=FABRCIO-PC;Initial Catalog=db_Teste;User ID=sa;Password=shell"; private static SqlConnection conexaoDecup = new SqlConnection(stringConexao);

Com ele, criamos as variveis stringConexao e conexaoDecup e j criamos tambm suas respectivas instncias. Outro aspecto importante a ressaltar neste cdigo a criao de dois mtodos fechaConexao() e abreConexao(). Estes mtodos sero os responsveis por abrir a conexo com a base de dados e fech-la

www.codificando.net

Jun / Jul - 2010

11

Trabalhando com stored procedures no .net

e-magazine

em um momento posterior respectivamente. Como j foi dito, o foco deste artigo apresentar a utilizao das Stored Procedures em conjunto com a linguagem C#. Para apresentar esta funcionalidade, iremos realizar uma insero de registro no banco utilizando uma Stored Procedure. A estrutura da tabela onde o registro se-

query ser criada com algumas sugestes do SQL Server para criar a Stored Procedure. Limpe as sugestes do SQL Server

Figura 4. Script de criao da Stored Procedure limpa.

de modo que seu script fique semelhante a Figura 4.


Figura 2. Estrutura da tabela sobre a qual a Stored Procedure trabalhar.

r inserido pode ser visualizada na Figura 2: Bom, agora que conhecemos a estrutura da tabela tbUsuarios, j possumos as informaes necessrias para criarmos nossa Stored Procedure. Para isso, na base de dados expanda a guia Programmability. Em seguida, clique com o boto direito sobre a pasta Stored Procedure e selecione a opo New Stored Procedu-

Vamos ento criar a Stored Procedure. A Listagem 3 apresenta o cdigo da SP (Stored Procedure) de insero do usurio:
CREATE PROCEDURE ____Inserir_Usuario -- Parmetros de entrada da Stored Procedure @NomeUsuario VARCHAR(100), @EmailUsuario VARCHAR(100), @UsuarioUsuario VARCHAR(20), @SenhaUsuario VARCHAR(50)

Codificando.net e-magazine

AS BEGIN -- Inserindo o registro no banco INSERT INTO dbo.tbUsuarios(Nome, Email, Usuario, Senha) VALUES(@NomeUsuario, @EmailUsuario, @UsuarioUsuario, @SenhaUsuario)
Listagem 3. Cdigo fonte da SP de Insero.

Figura 3. Criando uma nova Stored Procedure.

END GO

re, conforme apresenta a Figura 3: Ao selecionar esta opo, uma nova

O cdigo da SP dispensa muitos comentrios, pois relativamente simples. O que este trecho de cdigo faz simplesmente alocar quatro variveis
Jun / Jul - 2010

www.codificando.net

12

Trabalhando com stored procedures no .net

e-magazine

(parmetros): @NomeUsuario, @EmailUsuario, @UsuarioUsuario e @SenhaUsuario. Estes parmetros recebero os valores provenientes do mtodo C# e os passar ao segundo bloco do cdigo para insero na SP. Como j mencionado no incio deste artigo, as Stored Procedures ficam pr-compiladas no servidor de banco de dados, portanto, precisamos agora compilar a SP. Para isso, basta ir at o menu superior do SQL Server Management Studio e clicar no boto "Execute". Se tudo ocorreu bem, voc dever visualizar uma tela seme-

using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.Sql; using System.Data.SqlClient; using Core.DAL; using System.Net; namespace Core.BLL { public class clsUsuario { /// /// Mtodo que recebe os valores do formulrio e os insere atravs da Stored Procedure na tabela tbUsuarios. /// public int inserirUsuario(string _nome, string _mail, string _user, string _senha) { clsDados objetoDados = new clsDados (); SqlCommand cmdAjuda = new SqlCommand("____Inserir_Usuario", objetoDados.abreConexao()); cmdAjuda.CommandType = CommandType.StoredProcedure; cmdAjuda.Parameters.AddWithValue ("@NomeUsuario", _mail); cmdAjuda.Parameters.AddWithValue ("@EmailUsuario", _nome); cmdAjuda.Parameters.AddWithValue ("@UsuarioUsuario", _user); cmdAjuda.Parameters.AddWithValue ("@SenhaUsuario", _senha); try { int nLinhas; nLinhas = cmdAjuda.ExecuteNonQuery(); return nLinhas; } catch (SqlException ex) {

Figura 5. Sucesso no processo de compilao da SP.

Codificando.net e-magazine

lhante a apresentada na Figura 5: Criada a tabela de usurios onde iremos inserir o registro, criada e compilada a Stored Procedure que far a insero e criada e implementada a classe de acesso a dados na camada DAL, vamos agora at a camada de negcios (BLL) e implementar o mtodo responsvel por chamar a SP e passar os parmetros para a mesma. A Listagem 4 apresenta o cdigo da classe clsUsuario.
using System;

www.codificando.net

Jun / Jul - 2010

13

Trabalhando com stored procedures no .net

e-magazine

throw new Exception("Erro encontrado: " + ex.Message); } finally { objetoDados.fechaConexao(); } }


Listagem 4. Cdigo fonte da classe clsUsuario.

sar que os valores passados para os parmetros da SP devem ser do mesmo tipo, caso contrrio a Stored Procedure no conseguir inserir os dados. Finalmente, no bloco try temos a execuo atravs do mtodo executeNonQuery () do objeto cmdAjuda e, por extenso, da Stored Procedure. A informao importante aqui que o mtodo executeNonQuery() retornar o nmero de linhas afetadas pela Stored Procedure, assim, atribumos o retorno da execuo da procedure varivel inteira nLinhas para que possamos verificar posteriormente o sucesso ou falha da execuo da Stored Procedure. Para finalizar temos que testar nosso aplicativo de cadastro certo? Muito bem, vamos ento at a camada de visualizao/ apresentao para criarmos nossa interface. O modelo sugerido aquele apresen-

} }

Os aspectos importantes na Listagem 4 so os seguintes:


SqlCommand cmdAjuda = new SqlCommand("____Inserir_Usuario", objetoDados.abreConexao()); cmdAjuda.CommandType = CommandType.StoredProcedure;

No cdigo acima, um objeto do tipo SqlCommand criado e, passado ao construtor deste objeto o nome da SP (____Inserir_Usuario) e o mtodo que abre a conexo com o banco (objetoDados.abreConexao()); Na linha inferior, apenas dizemos ao objeto que ele dever executar um procedimento do tipo StoredProcedure.
cmdAjuda.Parameters.AddWithValue ("@NomeUsuario", _mail); cmdAjuda.Parameters.AddWithValue ("@EmailUsuario", _nome); cmdAjuda.Parameters.AddWithValue ("@UsuarioUsuario", _user); cmdAjuda.Parameters.AddWithValue ("@SenhaUsuario", _senha);

Codificando.net e-magazine

Figura 6. Tela de cadastro de usurios.

tado na Figura 6:

No cdigo acima, associamos cada valor que est vindo como parmetro para o mtodo inserirUsuario com o parmetro que a SP est esperando. Vale a pena fri-

Vamos ento testar a funcionalidade de nosso aplicativo de cadastro inserindo um novo usurio. A Figura 7 apresenta o cadastro sendo realizado e a Figura 8 apresenta o resultado do cadastro. Finalmente, a Figura 9 apresenta o banco de dados poJun / Jul - 2010

www.codificando.net

14

Trabalhando com stored procedures no .net

e-magazine

ro que este artigo possa t-lo incentivado a comear a utilizar este recurso em seus aplicativos. Fabrcio Lopes Sanches
Possui graduao em Cincia da Computao pela UNORP - Centro Universitrio do Norte Paulista (2005). Obteve ttulo de mestre junto a USP (Universidade de So Paulo) no Programa Interunidades Bioengenharia campus So Carlos. Atualmente aluno de doutorado e pesquisador na mesma instituio e departamento. membro regular do SpeechLab (Laboratrio de Processamento de udio e Voz) localizado no Instituto de Fsica de So Carlos. Atua na rea de processamento digital de udio e voz, especialmente baseado em wavelets aplicadas insero e extrao de watermarks em sinais de udio e fala, anlise cepstral de sinais de fala e desenvolvimento de ferramentas computacionais aplicadas ao processamento digital de sinais. Atua como desenvolvedor web na Unio Central Brasileira da IASD com C# e ASP.NET desde 2007.

Figura 7. Campos preenchidos com as informaes solicitadas.

Figura 8. Apresentao do status do cadastro realizado.

Codificando.net e-magazine

Figura 9. Registro presente na tabela tbUsuarios.

pulado pelas informaes do formulrio.

Concluso Como voc pde constatar neste artigo, a construo de aplicativos C# com Stored Procedures em uma arquitetura multicamadas um processo relativamente simples e que implica em um excelente ganho de performance dos aplicativos em geral e, alm disso, modularidade. Espewww.codificando.net

Jun / Jul - 2010

15

e-magazine

Explorando microsot sql reporting services 2005 parte VI


Por: Caio Azevedo

Ol pessoal ... Como prometido, hoje apresentaremos como consumir os relatrios, bem como outros exemplos com funcionalidades incrveis. Lembrando que todos os cdigos aqui implementados esto disponveis no site da nossa comunidade, http:// comunidade.codificando.net/ e no meu blog http://caiodotnet.blogspot.com/. Boa Diverso! Remote mode funcionalidades adicionais

necessrio ter certeza que o servio SQL Server Agent esteja ativo. ele o responsvel pelo monitoramento de Jobs, Schedules, Alertas e Eventos do SQL Server:

Figura 4.1. Servios do Windows SQL Server

Nessa sesso falaremos de algumas funcionalidades adicionais interessantes sobre os relatrios remotos. Servio de entrega Como j mencionamos o Reporting Services, nos permite configurar um servio de entrega de relatrios. Apresentaremos a seguir um exemplo simples dessa poderosa ferramenta. Criaremos um servio, que gera o relatrio em formato de arquivo em um compartilhamento da nossa estao de trabalho. Antes de comearmos as configuraes

Agent.

Em seguida, acessamos o Report Manager, selecionamos um dos nossos relatrios e criaremos um novo Subscription, como exibido na figura 4.2:

Codificando.net e-magazine
|

Figura 4.2. Selecionando um relatrio e criando uma nova Subscription.

www.codificando.net

Jun / Jul - 2010

16

Explorando microsot sql reporting services 2005 parte VI

e-magazine

Agora configuraremos nosso servio de entrega, de modo a gerar um relatrio em formato de arquivo PDF, criado em um compartilhamento da nossa estao de trabalho. Atentemos para o agendamento criado (boto Select Schedule) ver figura 4.3.

Cache Como mencionamos anteriormente (Remote Mode - Arquitetura), uma vez gerado o formato intermedirio do relatrio, o RS antes de renderiz-lo, o armazena temporariamente no banco de dados, ReportServerTempDB. O RS disponibiliza trs tipos de cache: cache de sesso , cache de execuo e cache por snapshot. Cache de sesso ou implcito aquele gerado pelo RS, quando um mesmo usurio requer um relatrio com o mesmo conjunto de parmetros em um curto intervalo de tempo, esse cache utilizado, por exemplo, quando um usurio requer, dentro de um mesmo relatrio recursos de paginao ou renderizao em diversos formatos. O RS gera uma cpia do relatrio por cliente, como vemos na figura 4.5 abaixo:

Figura 4.3. Configuraes do subscription.

Codificando.net e-magazine

Percebemos que nosso relatrio possui alguns parmetros, e que so especificados durante o processo de criao da subscription como exibido na figura 4.4.

Figura 4.5. Cache de sesso.

Figura 4.4. Configurao dos parmetros do relatrio.

Cache de execuo, similar ao cache de sesso, uma vez que ambos so armazenados no mesmo repositrio. No entanto ele necessita ser configurado manualmente atravs do link Execution nas propriedades do relatrio do Report Manager, como vemos na figura 4.6:

www.codificando.net

Jun / Jul - 2010

17

Explorando microsot sql reporting services 2005 parte VI

e-magazine

Figura 4.6. Cache de relatrio por execuo.

fora do horrio de pico, salvar uma copia sua (no banco de dados ReportServer, tabela SnapshotData). Para criar esse tipo de cache utiliza-se o Report Manager, nas propriedades do relatrio, opo Execution. No entanto esse tipo de cache no permite que o usurio modifique os parmetros do relatrio e necessrio especificar valores padro para os parmetros.

Outra diferena crucial nesse relatrio em relao ao cach de sesso que ele pode ser compartilhado por n usurios como demonstrado na figura 4.7:

Figura 4.8. Cache de snapshot.

Segurana reporting services Considerando que os relatrios so disponibilizados como uma aplicao web, muitas das boas prticas de segurana utilizadas em aplicaes ASP .NET so aplicveis aqui, por isso focaremos nossa anlise nas funcionalidades de autenticao e autorizao. A segurana dos relatrios hospedados no reporting services baseada em roles, ou seja, dado um conjunto de funcionalidades (rotulado role), tais como gerenciar relatrios, visualizar pastas, visualizar datasources, dentre outras e sabendo-se que por padro o Reporting Services utiliza o modelo de autenticao Windows (baseado no Active Directory do sistema operacional). Para cada relatrio ou conjunto de relatrios (armazenados em pastas), associamos uma ou mais roles e assim teremos todas as fun-

Figura 4.7. Cache de execuo.

gerada uma copia do relatrio por conjunto de parmetros selecionados. E no possvel ter esse tipo de cache se as credenciais de segurana para acesso ao repositrio de dados do relatrio forem solicitadas ao usurio. Cache de snapshot, os dois primeiros so geridos pelo prprio RS, logo temos pouco controle sobre eles. Por exemplo, no sabemos quando o relatrio ser solicitado a primeira vez, nem quando o RS iniciar a contar seu tempo de validade. Em alguns casos, por exemplo, em relatrios que tenham um tempo de execuo muito grande, seria interessante gerar esse relatrio

www.codificando.net

Jun / Jul - 2010

Codificando.net e-magazine
18

Explorando microsot sql reporting services 2005 parte VI

e-magazine

cionalidades possveis para aqueles relatrios. Nas roles so vinculados os usurios ou grupos de usurios do Active Directory do Windows. Todas essas configuraes podem ser feitas atravs do Report Manager ou via SQL Server Management Studio, como demonstrados nas figuras 4.9 e 4.10: Aqui apresentamos a edio/criao das roles padro do RS e suas respectivas funcionalidades, via SSMS.

Figura 4.10. Adicionando usurios e grupos s roles SQL Server Management Studio.

Figura 4.9. Edio de roles SQL Server Management Studio.

Para atribuio das permisses (roles), a uma pasta ou relatrio, basta selecionar o menu de opes com o boto direito, selecionar a opo Properties e finalmente Permissions. Vejamos que podemos associar um usurio ou grupo de domnio as roles (boto Add Grou por User...)

Basicamente assim que gerimos a segurana dos relatrios no reporting services, onde necessrio utilizar uma conta de usurio de domnio com os devidos privilgios. Mas percebam que os relatrios so disponibilizados atravs de uma aplicao web http://<servidor>/reportserver ou http://<servidor>/reports que tem seus modelos de autenticao como uma aplicao web qualquer integrada, forms, annima, etc. Sendo que por padro utilizada a autenticao Windows e assim a identificao do usurio da aplicao utilizado para autenticao junto ao RS e pode ser utilizado para o repositrio de dados como ilustra a figura 4.11.

Codificando.net e-magazine

Figura 4.11. Modelo de segurana.

www.codificando.net

Jun / Jul - 2010

19

Explorando microsot sql reporting services 2005 parte VI

e-magazine

Esse modelo com usurios integrados ao AD fica muito restrito ao ambiente intranet, uma proposta mais genrica, seria uma na qual a aplicao web tem autenticao form, com um repositrio customizado de usurios e para o acesso aos relatrios do RS passamos as credenciais de um usurio do AD previamente configurado no RS a partir da aplicao web, e finalmente para acesso ao banco de dados usamos um usurio do SQL Server com acesso restrito s tabelas/views/procedures necessrias para concepo dos relatrios. Nesse modelo o segredo esta na passagem das credencias para o RS a partir da aplicao e isso veremos na sesso de integrao de aplicao ASP .Net com RS. Outro aspecto de segurana relevante a criptografia dos dados, afinal os dados dos relatrios so trafegados sobre o protocolo HTTP para isso possvel utilizar recursos tais como:

tualizar o Dataset (opes de conexo e instruo), simples assim. O segredo dessa facilidade que os relatrios no fundo utilizam a mesma estrutura que a linguagem de definio de relatrios. Integrando com uma aplicao asp .net At agora acessamos nosso relatrios a partir do ambiente do RS (via report manager), no entanto fica fcil perceber algumas de suas limitaes tais como:

Identidade visual limitada Validao dos parmetros limitada Impossibilidade de integrao dos relatrios ao aplicativo

Para resolvermos esses problemas, podemos incluir nossos relatrios nas aplicaes usando o controle ReportViewer. Para integrao dos relatrios com o ReportViewer, necessrio:

Protocolo SSL/HTTPS e certificados digitais. VPNs Wireless com chaves de criptografias Terminal Services IPSec, que um protocolo de segurana padro para TCP/IP

Configurar adequadamente o controle, que classificamos da seguinte forma:

Codificando.net e-magazine

Converso de arquivos rdlc para rDl Uma funcionalidade muito interessante que temos, a capacidade de converter relatrios RLDC para RLC, e isso mais simples que se pode imaginar, basta renomear a extenso do arquivo e incluir no projeto (adicionar um item existente) e a

Configuraes de Processamento, onde especificamos parmetros de renderizao e modo de processamento. Parmetros: ProcessingMode, AsyncRendering e SizeToReportContent. Configuraes Funcionais, onde especificamos quais funcionalidades do controle disponibilizaremos para os usurios, tais como exportao, zoom, impresso, navegao, prompt de parmetros, dentre outros. Parmetros:

www.codificando.net

Jun / Jul - 2010

20

Explorando microsot sql reporting services 2005 parte VI

e-magazine

ShowToolBar, ShowPageNavigationC ontrols, ShowPrintButton, ShowExportControls, ShowParameterPrompt s, ShowFindControls, etc. Configuraes de segurana, onde informamos as credencias do usurio de acesso aos relatrios. Nesse caso necessrio codificar uma classe que implemente a interface, Microsoft.Reporting.WebF orms.IReportServerCred entials. Parmetros: ServerReport.ReportServerCred entials Configuraes de localizao, onde especificamos a localizao (servidor/pasta/relatrio) do relatrio. Parametros: ServerReport.ReportServerUrl, ServerReport.ReportPath Criar interface com usurio para obteno dos parmetros do relatrio Usando controles da ASP .NET Codificar a validao dos parmetros Codificar os parmetros do relatrio para o controle ReportViewer

public class ReportCredentials : Microsoft.Reporting.WebForms.IReportServerC redentials { private string _userName; private string _passWord; private string _domainName; public ReportCredentials(string UserName, string PassWord, string DomainName) { _userName = UserName; _passWord = PassWord; _domainName = DomainName; } public WindowsIdentity ImpersonationUser { get { return null; } } public ICredentials NetworkCredentials { get { return new NetworkCredential (_userName, _passWord, _domainName); } } public bool GetFormsCredentials(out Cookie authCookie, out string user, out string password, out string authority) { authCookie = null; user = password = authority = null; return false; }
Listagem 1. Criao da classe responsvel.

Codificando.net e-magazine

Concluso isso ai pessoal, abordamos diversos assuntos referentes a essa importante ferramenta que o Reporting Services, nos permitindo enriquecer consideravelmente nossas aplicaes. Existem outros aspectos que no foram abordados, Report Builder, por

De toda codificao necessria, a mais importante a criao da classe responsvel pela passagem das credenciais do usurio para acesso ao relatrio, como mostrado no cdigo da listagem 1:

www.codificando.net

Jun / Jul - 2010

21

Explorando microsot sql reporting services 2005 parte VI

e-magazine

exemplo, mas acreditamos que, o que apresentamos aqui seja suficiente para que possamos implementar solues ricas e inteligentes provendo aos nossos clientes recursos at pouco tempo, se no impensveis, mas certamente de difcil implementao. Caio Azevedo
Graduado em Cincia da Computao, Engenharia Civil e louco por cincias exatas em especial fsica e matemtica. Coordenador da Clula Microsoft da Magna Sistema e Arquiteto Microsoft, palestrante, tecno-colunista e instrutor da treinando .net. MCP, MCAD, MCSD, MCTS e MCPD. E fantico pela srie star wars may the force be with you. Blog: http://caiodotnet.blogspot.com/

www.codificando.net

Jun / Jul - 2010

Codificando.net e-magazine
22

e-magazine

Trabalhando com treeview no windows forms


Por: talo Chesley Gomes da Silva

Neste artigo apresento como simples trabalhar com a TreeView no WindowsForms . Apresentarei dois exemplos: Um percorrendo uma coleo de dados e colocandoos na TreeView, e outro carregando uma rvore de diretrios. Inicialmente deixei o cdigo no clique do boto, mas como isso no uma boa prtica, fiz uma pequena refatorao, transformando aquele bloco de cdigo em um mtodo, na listagem 1:

Como disse anteriormente, a TreeView trabalha com Nodes (ns), portanto, adicionaremos, a cada vez que passar pelo lao de repetio um n. Para tanto, basta fazer a simples tarefa de instanciar a classe TreeNode, atribuir sua propriedade Text a string referente posio do array naquele momento da repetio e, pass-lo como parmetro ao mtodo Node.Add da TreeView. No formulrio, adicionei uma TreeView e dois botes onde chamado o mtodo j apresentado acima (que carregar uma coleo, na TreeView) e outro que apresentarei cuja funo mostrar uma rvore de diretrios na TreeView. Veja, na figura 1, o resultado do clique do primeiro boto:

Codificando.net e-magazine

Listagem 1. Refatorando o cdigo.

A TreeView trabalha com Nodes (ns), portanto, inicialmente, utilizamos o mtodo Clear para limpar todos os ns que houverem nele. Depois declaramos um array de strings e colocamos nomes de alguns carros nele e, por fim, atravs de uma estrutura de repetio for, percorremos todo o contedo do array adicionando-o a TreeView.

Figura 1. Coleo de objetos carregada na TreeView.

Agora que j conhecemos esse comportamento da TreeView, vamos trabalhar com a funo que ir nos permitir carregar uma rvore de diretrios no siste-

www.codificando.net

Jun / Jul - 2010

23

Trabalhando com treeview no windows forms

e-magazine

ma. Para isso, criaremos um mtodo que recebe dois parmetros: A TreeView onde carregar as informaes, e um caminho de onde ser mapeada a rvore de diretrios para o TreeView. Fiz os comentrios no prprio cdigo, voc pode dar um zoom na imagem ou fazer o download do projeto para ver mais detalhadamente o funcionamento do cdigo. Uma observao: A classe Directory, de onde utilizamos os mtodos GetDirectories e GetFiles pertence ao Namespace System.IO, ou seja, voc deve adicionlo entre suas usings (listagem 2):
using System.IO; private void preenchetreeview(TreeView tvw, string caminho) { tvw.Nodes.Clear();//Limpa todos os nodes que porventura existam tvw.ShowNodeToolTips = true; // mostrar o tool tip quando passa o mouse em cima string[] pastas = Directory.GetDirectories(caminho);//atribuindo ao array "pastas" o retorno da funao GetDirectories que um array de strings //Carregando a estrutura de diretrios da raiz for (int i = 0; i < pastas.Length; i++) { //Agora, vamos usar o try para o caso de ter algum diretrio que no tenhamos permisso para acessar.

//O lao de repetio ignorar o diretrio com permisso negada e continuar carregando os outros diretrios. try { TreeNode objNodePasta = new TreeNode();//Criando o node que ser adicionado //Carrega os diretrios da raz string[] NomePasta = pastas [i].Split('\\');//pegando apenas o nome da pasta e ignorando o restante do caminho objNodePasta.Text = NomePasta [NomePasta.Length - 1];//pegando apenas o nome da pasta e ignorando o restante do caminho objNodePasta.Collapse();// fechando o node para que o usurio possa abrir apenas o que ele quiser objNodePasta.ToolTipText = pastas[i];//atibuindo o caminho inteiro do arquivo ao tooltip, para v-lo quando passar o mouse tvw.Nodes.Add(objNodePasta);// adicionando o node ao treeview //Carregando os subdiretrios dos diretrios da raz string[] subdiretorios = Directory.GetDirectories(pastas[i]); for (int k = 0; k < subdiretorios.Length; k++) { TreeNode objNodeSubDiretorio = new TreeNode();//Criando o node que ser adicionado string[] NomeSubDiretorio = subdiretorios[k].Split('\\');//pegando apenas o nome da pasta e ignorando o restante do caminho objNodeSubDiretorio.Text = NomeSubDiretorio[NomeSubDiretorio.Length 1];//pegando apenas o nome da pasta e ignorando o restante do caminho

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

24

Trabalhando com treeview no windows forms

e-magazine

objNodeSubDiretorio.Collapse();//fechando o node para que o usurio possa abrir apenas o que ele quiser objNodeSubDiretorio.ToolTipText = subdiretorios[k];//atibuindo o caminho inteiro do arquivo ao tooltip, para v-lo quando passar o mouse objNodePasta.Nodes.Add (objNodeSubDiretorio);//adicionando o node como um node filho } //Carregando os arquivos dos diretrios da raz string[] arquivos = Directory.GetFiles(pastas[i]);//pegando todos os arquivos que tem no diretrio no retorno da funo GetFiles que um array for (int j = 0; j < arquivos.Length; j++) { TreeNode objNodeArquivo = new TreeNode();//criando o node do arquivo string[] NomeArquivo = arquivos[j].Split('\\');//pegando apenas o nome do arquivo e ignorando o restante do caminho objNodeArquivo.Text = NomeArquivo[NomeArquivo.Length - 1];// pegando apenas o nome do arquivo e ignorando o restante do caminho objNodeArquivo.ToolTipText = arquivos[j];//atibuindo o caminho inteiro do arquivo ao tooltip, para v-lo quando passar o mouse objNodePasta.Nodes.Add (objNodeArquivo);//Adicionando o node de arquivo ao node da pasta, como um node filho } } catch (Exception) { } }

//Carregando arquivos do diretrio raiz string[] arquivosraiz = Directory.GetFiles(caminho); for (int i = 0; i < arquivosraiz.Length; i++) { TreeNode objArquivoRaiz = new TreeNode();//criando o node do arquivo string[] NomeArquivo = arquivosraiz[i].Split('\\');//pegando apenas o nome do arquivo e ignorando o restante do caminho objArquivoRaiz.Text = NomeArquivo[NomeArquivo.Length - 1];//pegando apenas o nome do arquivo e ignorando o restante do caminho objArquivoRaiz.ToolTipText = arquivosraiz[i];//atibuindo o caminho inteiro do arquivo ao tooltip, para v-lo quando passar o mouse tvw.Nodes.Add(objArquivoRaiz);// Adicionando o node de arquivo ao node da pasta, como um node filho } }
Listagem 2. Cdigo do mtodo preenchetreeview.

Colocamos a chamada ao mtodo no clique do boto, listagem 3:

Codificando.net e-magazine

Listagem 3. Chamada do mtodo.

Para melhorar o uso de nossa rvore de diretrios, vamos fazer um mtodo que carregar todos os arquivos e subdiretrios de diretrios que forem selecionados na TreeView. O nosso mtodo, recebe como parmetro um TreeNode, onde sero carregados os subdiretrios do diretrio (SelectedNode) selecionado e o caminho de onde dever car-

www.codificando.net

Jun / Jul - 2010

25

Trabalhando com treeview no windows forms

e-magazine

regar os diretrios e arquivos. Carregamos apenas o nome dos diretrios e arquivos, mas, na propriedade ToolTipText de cada node, mantivemos o seu caminho completo e esse caminho que, no caso dos diretrios, ser passado como parmetro para o nosso mtodo denominado CarregarConteudoDiretorioNode.
public void CarregarConteudoDiretorioNode (TreeNode node, string caminho) { string[] subdiretorios = Directory.GetDirectories(caminho); for (int k = 0; k < subdiretorios.Length; k++) { TreeNode objNodeSubDiretorio = new TreeNode();//Criando o node que ser adicionado string[] NomeSubDiretorio = subdiretorios[k].Split('\\');//pegando apenas o nome da pasta e ignorando o restante do caminho objNodeSubDiretorio.Text = NomeSubDiretorio[NomeSubDiretorio.Length - 1];// pegando apenas o nome da pasta e ignorando o restante do caminho objNodeSubDiretorio.Collapse();// fechando o node para que o usurio possa abrir apenas o que ele quiser objNodeSubDiretorio.ToolTipText = subdiretorios[k];//atibuindo o caminho inteiro do arquivo ao tooltip, para v-lo quando passar o mouse node.Nodes.Add (objNodeSubDiretorio);//adicionando o node como um node filho } string[] arquivos = Directory.GetFiles (caminho);//pegando todos os arquivos que tem no diretrio no retorno da funo GetFiles que um array

for (int j = 0; j < arquivos.Length; j++) { TreeNode objNodeArquivo = new TreeNode();//criando o node do arquivo string[] NomeArquivo = arquivos [j].Split('\\');//pegando apenas o nome do arquivo e ignorando o restante do caminho objNodeArquivo.Text = NomeArquivo [NomeArquivo.Length - 1];//pegando apenas o nome do arquivo e ignorando o restante do caminho objNodeArquivo.ToolTipText = arquivos[j];//atibuindo o caminho inteiro do arquivo ao tooltip, para v-lo quando passar o mouse node.Nodes.Add(objNodeArquivo);// Adicionando o node de arquivo ao node da pasta, como um node filho } node.Expand(); }
Listagem 4. Cdigo do mtodo CarregarConteudoDiretorioNode.

Agora que j vimos o mtodo que carregar os subdiretrios(subnodes) da nossa rvore de diretrios, vamos entender onde e como utiliz-lo: Faremos isso no evento AfterSelect (depois de selecionar) da nossa TreeView. Segue o cdigo na listagem 5:

Codificando.net e-magazine

Listagem 5. Evento AfterSelect.

Observando o cdigo, voc notar que verificamos se ele arquivo ou diretrio, observando se h um ponto em seu nome, pois, consideramos que o que vier depois do ponto a extenso e diretrios no tem extenso, logo, o mtodo ser chamado apenas se o Node (n) selecionado for um dire-

www.codificando.net

Jun / Jul - 2010

26

Trabalhando com treeview no windows forms

e-magazine

trio. Confira na figura 2 o resultado do mtodo de carregar os diretrios:

Figura 2. rvore de diretrios carregada no TreeView.

Concluso Na TreeView voc pode carregar dados oriundos de diversas fontes: XML, Banco de Dados, Arquivo de Texto, colees e vrios outros. talo Chesley Gomes da Silva
Tcnico em Informtica formado pelo Senac de Governador Valadares. Graduando de Anlise e Desenvolvimento de Sistemas pela UNIVALE Universidade Vale do Rio Doce. Faz parte da equipe de desenvolvimento de Sistemas do Centro de Informtica e Tecnologia da UNIVALE - Universidade Vale do Rio Doce. Tem interesse em ASP.NET, Entity Framework, WPF, Silverligth,WCF, TDD, Arquitetura de Software, Boas prticas de Desenvolvimento e Qualidade de Software.

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

27

e-magazine

Comparativo entre o SQL Server e o SQL Azure database


Por: Diego Nogare

Presenciando uma poro de dvidas em meu e-mail, MSN, skype e twitter sobre o SQL Azure Database, me dei conta de que no havia uma publicao acessvel a todos que fizesse um comparativo entre os bancos de dados SQL Server (que localmente pode ser chamado de on-premise) e SQL Azure Database (SAD). H algum tempo venho respondendo perguntas sobre diferenas entre eles, ento decidi montar esse texto para ajudar a tirar as dvidas mais comuns. Os dois produtos so bem parecidos na questo da funcionalidade. Analisando com uma viso macro, os dois tm a funo de armazenar dados pra aplicaes consumirem. Esse o objetivo de ambos! claro que existem mais coisas envolvidas, mas a grosso modo, pode-se resumir a isso. O SQL Azure Database similar a uma instncia do SQL Server local, expondo uma interface baseada em T-SQL para se trabalhar com a database, permitindo que se utilize o SAD para quase todas as coisas que so possveis fazer no SQL Server. claro, que o SAD fornecido como um servio ento algumas pequenas diferenas com relao ao SQL Server on-premise existiro, principalmente com relao ao

hardware. Algumas diferenas para os DBA's que trabalharo com o SAD, que no precisaro mais se preocupar com questes de hardware como Servidores, aplicao de Services Pack ou Hotfix, memria, espao em disco. Tudo isso agora responsabilidade da Microsoft e eles fornecero pra voc. Voc como DBA ainda ter seu trabalho de administrar Databases, Logins, Users, roles e todas as outras milhes de outras coisas que ocupam nosso tempo. Administrao lgica e administrao fsica: Apesar do SAD ter um papel de gerenciar o banco de dados, ns DBA's, temos uma funo muito importante na administrao das aplicaes baseadas na plataforma Azure. Temos que nos preocupar com criao de schemas, gerenciar as estatsticas, tunar ndices, fazer otimizao de querys (uma grande referncia o Fabiano Neves Amorim). A administrao fsica do SAD difere bastante do SQL Server que trabalhamos at hoje. Com o SAD, j temos replicao automtica de todos os dados provendo Alta Disponibilidade (praticamente 24X7), o

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

28

Comparativo entre o SQL Server e o SQL Azure database

e-magazine

Load Balance automtico e, caso um servidor fique off-line, entra em ao FailOver, transparente para seu usurio. Isso tudo, sem voc controlar nada, tudo automtico no SAD. Uma restrio no SAD que voc no poder especificar em qual disco ou file group determinado database ou ndice fica armazenado, isso porque no temos acesso aos arquivos dos servidores que esto na nuvem, s acessamos os recursos que esto disponveis atravs dos servios providos pela Plataforma Azure. OBS: A Replicao, Backup e Restore no so permitidos no SQL Azure Database. automtico! Cdigo T-SQL suportado na plataforma Azure. claro, algumas coisas podem mudar, mas estes cdigos eu j testei. T-SQL suportados: Constantes / Constraints / Cursores / ndices (gerenciamento e rebuild) / Tabelas temporrias locais (com 1 #) / Stored Procedures / Gerenciamento de Estatsticas / Transaes (Begin e End) / Triggers / joins de tabelas e de variveis do tipo table / Create ou Drop Database / Create, Alter ou Drop Table / Create, Alter ou Drop usurios e logins / Views. Algumas coisas que testei, mas no tive sucesso, logo, entendo como no suportado: CLR / Database Mirroring / Gerenciamento de Filegroup / Tabela temporria global (com 2 ##) / Service Broker

Sobre as Features permitidas e mais um pouquinho do cdigo T-SQL no suportado Vale lembrar que a plataforma Azure gerenciada atravs de servios, logo no temos acesso direto ao servidor, somente ao que liberado atravs dos servios. timo, todo mundo lembrou-se disso. Ento j que nos lembramos desse detalhe, agora vamos lembrar outro, o SQL Azure Database no suporta todas as Features e Datatypes que o SQL Server local suporta, por exemplo, o Analysis Services, Replication, Reporting Services e Service Broker no so suportados pelo SAD ainda, mas pode ser que estas Features sejam implantadas. Como a prpria plataforma Azure cuida da parte fsica (hardware), algumas configuraes que manipulam diretamente a questo de hardware do servidor esto bloqueadas, por exemplo, o Resource Governor ou algumas configuraes de DDL (Data Definition Language). Hah, tambm no permitido utilizar o SQL Profiler ou o DB Tuning Advisor.

Codificando.net e-magazine

Outros cdigos T-SQL no suportados so aqueles que fazem referncia a algum filegroup ou caminho fsico. Dependendo do cdigo, ele pode at ser considerado parcialmente suportado. Modelo de dados relacional: O SQL Azure ser bem familiar a todos os DBA's e DEV's no quesito armazenamento, porque bem parecido com o SQL Server on-premise, utilizando T-SQL. Conceitualmente, o SQL Azure como uma instncia do SQL Server, s que com algumas restries.

www.codificando.net

Jun / Jul - 2010

29

Comparativo entre o SQL Server e o SQL Azure database

e-magazine

Em cada servidor de SQL Azure, voc pode criar diversos bancos de dados, e em cada banco pode criar vrias tabelas, views, stored procedures, ndices, e vrios outros objetos. Este modelo de dados faz um bom uso do design e codificao dos bancos que j temos onpremises e simplifica o processo de migrao para a nuvem por serem bem similares e suportarem quase tudo um do outro. S lembrando que SQL Azure Database so servidores virtuais e no corresponde exatamente a um SQL Server local (que fsico). Portanto, no exijam o mesmo desempenho, pouco provvel que consiga chegar prximo! Alta disponibilidade e escalabilidade: Quando se pensa em Alta Disponibilidade, estamos pensando em 24X7 (24 horas, 7 dias por semana). A Plataforma Azure baseada em SQL e Windows Server, e flexvel o bastante para variar com relao carga ou utilizao. O servio replica os dados em diversos servidores diferentes para manter os dados redundantes e disponveis para seu negcio, haja o que houver. No caso de um dos servidores carem, o Azure automaticamente faz o loadbalance e aponta para outro server. J com relao escalabilidade, esse um ponto positivo pra Plataforma Azure do ponto de vista da facilidade de se escalar (aumentar o desempenho) sua prpria soluo. No SQL Server, depois de particionar seus dados, a escalabilidade

automtica e o banco vai crescendo de acordo com sua necessidade. Pela forma de licenciamento, voc s pagar pelo que armazenar economizando dinheiro, e caso precise fazer um downgrade (diminuir o desempenho) de seu ambiente, possvel fazer quando achar necessrio. Diego Nogare
Graduado em Cincia da Computao, Ps-Graduado em Engenharia de Computao com nfase em Desenvolvimento Web com .NET. Colaborador do Portal Linha de Cdigo e da revista SQL Magazine, Lder do grupo de usurios Codificando .NET, Lder dos Microsoft Student Partners [MSP] de So Paulo e Microsoft Most Valuable Professional [MVP] em SQL Server, possui certificaes MCP e MCTS em SQL Server 2005, palestrante em eventos da Microsoft, Codificando .NET e INETA BR, mantm o site: www.diegonogare.net.

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

30

e-magazine

Servio de transmisso do PowerPoint2010

Por: Sara Barbosa

O Office 2010 lanado oficialmente no dia 12 de maio de 2010, veio cheio de novidades. Com a correria do dia a dia, as vezes no dispomos do tempo necessrio para reciclar o conhecimento que possumos e aprender os novos recursos. Nesse artigo, vou abordar como fcil fazer uma apresentao no PowerPoint para pessoas que no esto no mesmo local fsico que voc. Com o broadcast slide show do PowerPoint 2010, quando voc fizer uma conferncia, voc poder transmitir o contedo, no ser mais necessrio enviar e-mails volumosos. Pr-requisitos para que vai transmitir: Microsoft Office 2010 Live ID Conexo com a internet

Abra o Microsoft Office 2010.

Figura 1. Iniciando Power Point 2010.

Codificando.net e-magazine

Figura 2. Clique na aba Slide Show.

Pr-requisitos para quem vai assistir: Conexo com a Internet Browser (Firefox, IE, Opera ou Google Chrome)

Figura 3. Clique broadcast da apresentao.

Veja como fcil realizar a transmisso.

Neste ponto, se quiser, poder alterar o servio de transmisso em change broadcast service. No meu exemplo vou usar o PowerPoint Broadcast Service que necessita de autenticao com seu Windows do Live ID:

www.codificando.net

Jun / Jul - 2010

31

Servio de transmisso do PowerPoint2010

e-magazine

Enviado o link, voc pode iniciar apresentao de slides. O interessante que o controle dos slides fica integralmente com voc. A nica limitao que voc no pode editar o contedo do slide durante o broadcast. O menu do PowerPoint2010 fica limitado com apenas algumas opes.
Figura 4. Start Broadcast.

Faa o login com seu ID e senha.


Figura 7. Aba do PowerPoint no momento da transmisso.

Voc pode enviar o link para qualquer interessado, desde que este, como j foi dito,possua conexo com a internet e um navegador. interessante notar que o participante da apresentao consegue visualizar no navegador de sua preferncia.
Figura 5. Conectando ao servio.

Conexo estabelecida, voc ter o retorno do link, esse link pode ser enviado por e-mail, mensagem instantnea caso voc possua o OCS (Office Communicator Server) ativado.

Os testes foram realizados nos seguintes navegadores teste feito no Firefox 3.6, Opera 10, IE 8, Google Chrome. Ambos so os quatro so compatveis com a funo de transmisso do Office 2010. Confira como fica a visualizao da transmisso em diferentes navegadores:

Codificando.net e-magazine

Figura 6. Link para iniciar o compartilhamento.

Figura 8. Google Chrome.

www.codificando.net

Jun / Jul - 2010

32

Servio de transmisso do PowerPoint2010

e-magazine

http://blogs.msdn.com/b/powerpoint/ archive/2009/10/09/introducingbroadcast-slide-show.aspx http://answers.microsoft.com/pt-br/office/ default.aspx#tab=5 Sara Barbosa


Figura 9. Internet Explorer 8.

Membro do Conselho da comunidade WININFO. Revisa artigos para revista online Codificando.NET. Colaborador Infra Solues (Empresa focada em solues de InfraEstrutura Microsoft) Mais detalhes no http://sarajbarbosa.spaces.live.com e Twitter: @sarabarbosa.

Figura 10. Firefox 3.6.

Codificando.net e-magazine

Figura 11. Opera 10.

Concluso
Nesse artigo foi explorado uma das novas funes que temos no Office 2010, facilidade para manter a produtividade e qualidade das tarefas. Espero que a dica seja proveitosa para cada um. Mais detalhes sobre Office 2010, recomendo acompanhar:

www.codificando.net

Jun / Jul - 2010

33

e-magazine

SharePoint 2010: Visual WebParts


Por: Wagner Amorim

Overview Com o lanamento do SharePoint 2010 muita coisa boa veio para os IT Pros e para as equipes de Desenvolvedores que trabalham com tecnologias e produtos SharePoint. Hoje quero explorar um recurso que considerado o modelo mais comum de extensibilidade do SharePoint, vamos explorar como ficaram as WebParts na nova verso do SharePoint . A Microsoft j lanou muito material para os times de IT Pros e Desenvolvedores de SharePoint, abaixo listo alguns links que tenho utilizado: Sharepoint 2010 Beta Developer Training Kit http://www.microsoft.com/downloads/ details.aspx? displaylang=en&FamilyID=bfd1603b7550-4b8e-be85-4215a5069b90 SharePoint 2010 Developer Center http://msdn.microsoft.com/en-us/ sharepoint/ee514561.aspx Microsoft SharePoint Documentation Team Blog Developer

http://blogs.msdn.com/ sharepointdeveloperdocs/ archive/2009/10/19/ SharePoint2010BetaDevDocsLive.aspx Get Started Developing on SharePoint 2010 http://msdn.microsoft.com/en-us/ sharepoint/ee513147.aspx Office 2010 Beta Developer Training Kit http://www.microsoft.com/downloads/ details.aspx?familyid=F1599288-A99F410F-A219F4375DBE310C&displaylang=en Visual Studio 2010 Srie de posts em Portugus.

Codificando.net e-magazine

http://reverb.leandrodaniel.com/reverb/ post/Visual-Studio-2010-e28093-Serie-deposts-chega-ao-fim.aspx Instalando o Windows 7 SharePoint 2010 no

http://www.canalsharepoint.com.br/ tutoriais/Tutoriais/Instalando%20o% 20SharePoint%202010%20no% 20Windows%207.aspx

www.codificando.net

Jun / Jul - 2010

34

SharePoint 2010: Visual WebParts

e-magazine

Soluo Para essa soluo vou trabalhar com as seguintes tecnologias: Windows 2010 SharePoint Foundation

http://msdn.microsoft.com/en-us/ sharepoint/ee513148.aspx h t t p : / / w w w . c a n a ls h a r e p o in t . c o m .b r / tutoriais/Tutoriais/Desenvolvendo% 20WebParts%20no%20SharePoint% 202007.aspx. O modelo de desenvolvimento de WebParts no SharePoint j era dividido em dois tipos desde sua verso 2007, que eram Visual WebParts (utilizando UserControls) e as WebParts conhecidas como Standard WebParts, que eram desenvolvidas e construdas em runtime, ou seja, sem nenhuma interao visual durante o desenvolvimento. Visual WebPart na verdade uma classe que herda a classe base de WebParts ASP.NET: System.Web.UI.WebControls.WebParts.WebPart e com o mtodo LoadControl carrega um controle ASP.NET do tipo UserControl. NOTA: Na verso 2007 os desenvolvedores tinham um pouco de trabalho manual para utilizar controles UserControls como WebPart, o que j no mais necessrio na verso 2010. Esse novo item traz um modelo mais organizado e produtivo para ns desenvolvedores, quando formos utilizar esse tipo de WebPart. Na Standard WebPart no houveram muitas mudanas. Aps o overview desse recurso, vamos entender como implantar e utiliz-lo na prtica.

Beta Microsoft SQL Server 2008 Windows 7 x64 Visual Studio 2010 Beta 2

NOTA: Eu utilizei uma instalao do SharePoint Foundation 2010, mas o artigo tambm se aplica ao SharePoint Server 2010. Como boas prticas de desenvolvimento, vou desenvolver a soluo utilizando o Windows 7 como sistema operacional. Para maiores informaes de instalao e configurao do SharePoint 2010 no Windows 7, veja o artigo citado acima. Antes de iniciarmos nossa soluo na prtica, gostaria de apresentar um overview das WebParts. WebParts no SharePoint 2010

Codificando.net e-magazine

As WebParts so o meio mais comum de se customizar projetos em SharePoint, um dever para qualquer Desenvolvedor SharePoint entender o funcionamento de uma WebPart no SharePoint, para uma apresentao do funcionamento de WebParts no SharePoint 2007 veja:

www.codificando.net

Jun / Jul - 2010

35

SharePoint 2010: Visual WebParts

e-magazine

Esse artigo um pouco extenso, mas faz tempo que estou devendo um artigo mais completo falando sobre WebParts no SharePoint, vou tentar explorar necessidades comuns sobre esse modelo de trabalho. Criando uma Visual WebPart no SharePoint 2010 Vamos utilizar o template Visual WebPart porque esse foi o modelo com maiores mudanas na nova verso do SharePoint. Abra o Visual Studio 2010 e clique em File/New/Project.

Em seguida o Visual Studio abre a janela SharePoint Customization Wizard, onde podemos definir para qual site ser feito o Debug e Deploy, alm de definirmos os nveis de segurana da soluo. Defina o site e o nvel de segurana da aplicao como Deploy as a farm solution e clique em Finish.

Figura 01. Microsoft Visual Studio 2010.

Na janela New Project, clique em Visual C#/SharePoint/2010/Empty SharePoint Project, renomeie o projeto para SharePoint2010.DEV e clique em OK.

Figura 03. Configurando o site e o tipo de deploy que ser utilizado.

Codificando.net e-magazine

Adicionando uma Visual Web Part na soluo. Na janela Solution Explorer, clique com o boto direito no projeto, depois em Add/ New Item. Na janela Add New Item, selecione o item template Visual Web Part. No campo name digite VisualWP Clique em Add.

Figura 02. Escolhendo o tipo de projeto Empty SharePoint Project no Visual Studio 2010.

www.codificando.net

Jun / Jul - 2010

36

SharePoint 2010: Visual WebParts

e-magazine

Alm da WebPart com o User Control, foi adicionado tambm uma feature (Feature1) em uma nova pasta chamada Features, essa pasta faz parte de um novo pacote de recursos disponveis no Visual Studio 2010 para melhorar o desenvolvimento e deploy do SharePoint 2010 no Visual Studio. Bem legal! Vamos rapidamente explorar esse novo item Feature1 adicionado ao projeto entender de forma simples seu funcionamento. Alterando informaes da Feature NOTA: Note na Janela Solution Explorer (Ctrl+W,S) que o SharePoint adicionou trs arquivos (VisualWP.cs, VisualWP.webpart e Elements.xml) relacionados com a WebPart e mais trs arquivos relacionados com o UserControl (VisualWPUserControl.ascx, VisualWPUserControl.ascx.cs e VisualWPUserControl.ascx.designer.cs). Clique com boto direito na Feature1 e a renomeie para Canal SharePoint 2010. D um duplo clique no item Canal SharePoint 2010. No campo Title, digite Canal SharePoint Desenvolvendo no SharePoint 2010. No campo Description, digite Feature criada para ativar a Visual WebPart Demo.

Figura 04. Adicionando Visual WebParts no Visual Studio 2010.

Codificando.net e-magazine

Figura 05. Novo Solution Explorer no Visual Studio 2010.

Figura 06. Configurando Features do SharePoint no Visual Studio 2010.

www.codificando.net

Jun / Jul - 2010

37

SharePoint 2010: Visual WebParts

e-magazine

Alterando o ttulo, a descrio e o grupo da WebPart Clique 2 vezes no arquivo VisualWP.webpart e altere as seguintes linhas:
<property name="Title" type="string">VisualWP</property> <property name="Description" type="string"> My Visual WebPart </property> Para: <property name="Title" type="string">SharePoint 2010 Visual WebPart</property> <property name="Description" type="string">Canal SharePoint Primeira Visual WebPart utilizando o SharePoint 2010</property>

do UserControl est como Design.

Figura 07. Visualizando a Visual WebPart no Modo Design.

Salve e feche VisualWP.webpart.

arquivo

D um duplo clique no arquivo Elements.xml e altere a seguinte linha:


<Property Name="Group" Value="Custom" />

Para simular um exemplo mais prtico, vamos criar uma WebPart demo de Comentrios que vai inserir um registro em uma lista determinada. Adicionando controles ao UserControl Adicione atravs da janela Toolbox do Visual Studio os seguintes controles do tipo Standard: Label ID: lblTitulo TEXT: Canal SharePoint - Visual WebPart Label ID: lblNome Text: Digite seu nome: TextBox ID: txtNome

Para:
Property Name="Group" Value="CanalSharePoint" />

Codificando.net e-magazine

Salve e feche o arquivo Elements.xml. Aps explorar de forma breve as Features no Visual Studio 2010, vamos continuar com o desenvolvimento da Visual WebPart. o trol.ascx. Abra UserControl
VisualWPUserCon-

Certifique-se de que o modo de exibio

www.codificando.net

Jun / Jul - 2010

38

SharePoint 2010: Visual WebParts

e-magazine

Label ID: lblComentario Text: Comentrio: TextBox ID: txtComentario TextMode: MultiLine Button ID: btnComentar Text: Comentar! Seu cdigo HTML, no modelo Source deve ser parecido o da listagem 1:
<asp:Label ID="lblTitulo" runat="server" Text="Canal SharePoint - Visual WebPart" style="font-family: Arial"></asp:Label> <br /><br /> <asp:Label ID="lblNome" runat="server" Text="Digite seu nome:" style="font-family: Arial, Helvetica, sansserif; font-size: small"></asp:Label> &nbsp; <asp:TextBox ID="txtNome" runat="server" Width="161px"></asp:TextBox> <br /><br /> <asp:Label ID="lblComentario" runat="server" Text="Comentrio:" style="font-family: Arial, Helvetica, sansserif; font-size: small"></asp:Label> <br /> <asp:TextBox ID="txtComentario" runat="server" TextMode="MultiLine" Width="274px"></asp:TextBox> <br /> <br /> <asp:Button ID="btnComentar" runat="server" Text="Comentar!" />
Listagem 1. HTML

Figura 08. Criando uma Visual WebPart de Comentrios.

Salve o UserControl. Adicionando propriedades para sua WebPart Vamos criar uma propriedade na WebPart para que o usurio possa definir em qual lista sero armazenados os comentrios. Abra o arquivo VisualWPUserControl.ascx.cs e logo acima do mtodo Page_Load, insira o cdigo:
public string NomeLista {get; set;}

Codificando.net e-magazine

Salve e feche o arquivo. D um duplo no arquivo VisualWP.cs para abrir a classe da WebPart. Logo acima do mtodo CreateChildControls, adicione o cdigo da listagem 2:
string nomeLista = string.Empty; [System.Web.UI.WebControls.WebParts.WebBr owsable(true), Sy-

E sua exibio no modo Design deve ser semelhante a figura 08:

www.codificando.net

Jun / Jul - 2010

39

SharePoint 2010: Visual WebParts

e-magazine

sem.Web.UI.WebControls.WebParts.WebDisp layName("Nome da Lista"), System.Web.UI.WebControls.WebParts.WebD escription(""), System.Web.UI.WebControls.WebParts.Perso nalizable( System.Web.UI.WebControls.WebParts.Perso nalizationScope.Shared), System.ComponentModel.Category ("Configuraes"), System.ComponentModel.DefaultValue ("") ] public string NomeLista { get { return nomeLista; } set { nomeLista = value; } }
Listagem 2. Cdigo inserido

using System; using System.ComponentModel; using System.Runtime.InteropServices; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; namespace SharePoint2010.DEV.VisualWP { [ToolboxItemAttribute(false)] public class VisualWP : WebPart { // Visual Studio might automatically update this path when you change the Visual Web Part project item. private const string _ascxPath = @"~/ _CONTROLTEMPLATES/SharePoint2010.DEV/ VisualWP/VisualWPUserControl.ascx"; public VisualWP() { } string nomeLista = string.Empty;

Altere o mtodo CreateChildControls para o cdigo da listagem 3:


protected override void CreateChildControls() { //Carregando o UserControl pela WebPart VisualWPUserControl userControl = (VisualWPUserControl)this.Page.LoadControl (_ascxPath); userControl.NomeLista = NomeLista; Controls.Add(userControl); base.CreateChildControls(); }
Listagem 3. Mtodo CreateChildControls.

[System.Web.UI.WebControls.WebParts.WebBr owsable(true), System.Web.UI.WebControls.WebParts.WebDispla yName("Nome da Lista"), System.Web.UI.WebControls.WebParts.WebDe scription(""), System.Web.UI.WebControls.WebParts.Persona lizable( System.Web.UI.WebControls.WebParts.Persona lizationScope.Shared), System.ComponentModel.Category ("Configuraes"), System.ComponentModel.DefaultValue("")

Codificando.net e-magazine

Seu arquivo VisualWP.cs deve ficar parecido com o da listagem 4:

www.codificando.net

Jun / Jul - 2010

40

SharePoint 2010: Visual WebParts

e-magazine

} public string NomeLista { get { return nomeLista; } set { nomeLista = value; } } protected override void CreateChildControls() { //Carregando o UserControl pela WebPart VisualWPUserControl userControl = (VisualWPUserControl)this.Page.LoadControl (_ascxPath); userControl.NomeLista = NomeLista; Controls.Add(userControl); base.CreateChildControls(); } protected override void RenderContents (HtmlTextWriter writer) { base.RenderContents(writer); } } }
Listagem 4. Cdigo do VisualWP.cs .

to. Insira o cdigo da listagem 5 no mtodo criado no passo anterior: NOTA: No cdigo abaixo eu utilizo o Object Model do SharePoint para inserir programaticamente os itens do UserControl na minha lista do SharePoint, portanto deve ser importado o namespace Microsoft.SharePoint;
protected void btnComentar_Click(object sender, EventArgs e) { using (SPSite sitec = new SPSite (SPContext.Current.Web.Url)) { using (SPWeb site = sitec.OpenWeb()) { //Adicionando o item na lista SPList Lista = site.Lists[NomeLista]; SPListItem item = Lista.AddItem(); item["Nome"] = txtNome.Text; item["Comentario"] = txtComentario.Text; item.Update();

Codificando.net e-magazine

Salve o arquivo VisualWP.cs. Inserindo programaticamente itens na lista de comentrios Abra o UserControl VisualWPUserControl.ascx. D um duplo clique no boto Comentar (btnComentar). NOTA: O Visual Studio vai gerar automaticamente o mtodo btnComentar_Click que ser acionado no evento OnClick do bo-

//Redirecionando para a lista onde o item foi criado Response.Redirect(String.Format ("{0}/Lists/{1}", SPContext.Current.Web.Url, NomeLista)); } } }
Listagem 5. Cdigo do btnComentar_Click.

NOTA: Vale a pena informar que nesse exemplo no exploramos nenhum dos recursos de validaes de dados para manter in-

www.codificando.net

Jun / Jul - 2010

41

SharePoint 2010: Visual WebParts

e-magazine

tegridade que so necessrias em nossas aplicaes. Realizando o Deploy Nesse ponto o desenvolvimento da aplicao est concludo e podemos iniciar o deploy, antes disso, compile a aplicao (Ctrl+Shift+B) e resolva qualquer erro ou conflito que possa ocorrer. Execute o Deploy via Visual Studio (Build/ Deploy Solution). NOTA: Repare que o Visual Studio executa os seguintes passos de forma automtica: 1. Compila a aplicao. 2. Recycle no App Pool da aplicao. 3. Retract da Solution, caso exista no farm. 4. Adiciona Solution. 5. Deploy Solution. 6. Ativa Features. Verificando se a Solution e as Features foram instaladas corretamente.

Figura 09. Visualizando o WSP na Central Administration do SharePoint 2010.

No caso das features, feche a Central Administration e abra o site que escolheu fazer o deploy no passo criando uma Visual WebPart no SharePoint 2010 . Com o site aberto, clique no item de menu Site Actions, depois em Site Settings.

Codificando.net e-magazine

Acesse a Central Administration do SharePoint 2010. Clique no item System Settings do menu vertical da esquerda. Na seo Farm Management, clique em Manage farm solutions. Na pgina de Solution Management deve aparecer sua solution, como mostra a figura 9:
Figura 10. Site Actions no SharePoint 2010.

www.codificando.net

Jun / Jul - 2010

42

SharePoint 2010: Visual WebParts

e-magazine

Na pgina Site Settings, na seo Site Collection Administration clique no item Site collection features. Nessa pgina deve aparecer a feature que criamos na figura 11.

Figura 14. Visual WebPart de Comentrios adicionada.

Figura 11. Gerenciando Features no SharePoint 2010.

NOTA: Veja que a WebPart que adicionamos j veio com as propriedades que configuramos no passo 1.6. Clique em Add. Aps o SharePoint ter adicionado a WebPart na pgina, clique selecionando a WebPart que acabou de ser adicionada e note que o Ribbons mudou, foi adicionado um novo item Web Part Tools.

Adicionando a Visual WebPart para o site Volte para a home do site. Utilizando as Ribbons, clique no item Page, depois em Edit Page da pgina principal do site.

Codificando.net e-magazine

Clique em Options nesse novo item do Ribbons e veja as novas opes disponveis no Ribbons para WebParts.

Figura 12. Ribbons no SharePoint 2010.

Com a pgina aberta em modo de edio, clique em Add WebPart. Note que a Ribbons vai adicionar uma nova caixa com as propriedades da WebPart.
Figura 13. Adicionando a Visual WebPart de Comentrios.

www.codificando.net

Jun / Jul - 2010

43

SharePoint 2010: Visual WebParts

e-magazine

Clique em Web Part Properties. Na nova janela de propriedades que vai abrir, defina os seguintes campos: Appearance Title : Envie-nos seus comentrios Configuraes Nome da Lista : Digite o nome de uma lista que voc ir utilizar como lista dos comentrios (ex: Comentrios). IMPORTANTE: A lista informada no passo acima j deve existir no site atual da WebPart, lembrando que essa lista tambm deve conter os campos citados no passo Realizando o Deploy .

Clique em OK. Saia do modo de edio da pgina. Finalizando e Testando Para finalizar e testar sua WebPart, basta inserir informaes nos campos apresentados e clicar no boto Comentar.

Figura 16. Testando a Visual WebPart de Comentrios.

Voc ser redirecionado para a lista, verifique se o item foi inserido corretamente.

Codificando.net e-magazine

Figura 15. Alterando as propriedades da Visual WebPart.

Figura 17. Verificando a lista de Comentrios.

www.codificando.net

Jun / Jul - 2010

44

SharePoint 2010: Visual WebParts

e-magazine

Lembrando que o foco desse artigo no aprofundar nas regras de negcio. Facilmente um desenvolvedor consegue customizar esse exemplo com regras de negcio interessantes. Concluso Nesse artigo exploramos de forma ampla o funcionamento das Visual WebParts no SharePoint, alm de conseguirmos apresentar uma boa experincia de navegao pelo produto, passando um pouco pelas Ribbons e pela nova Central Administration.

Wagner Amorim
Lder da Maior Comunidade de SharePoint do Brasil (CanalSharePoint), participante de diversos projetos para mdias e grandes empresas utilizando tecnologias Microsoft, tm se especializado nas Tecnologias SharePoint e .NET desde 2003. Atualmente trabalha como Consultor Especialista SharePoint por todo o Brasil, com participao focada no desenvolvimento e customizao dos Produtos e Tecnologias SharePoint, tambm participa como membro ativo das comunidades TechNet e MSDN.

www.codificando.net

Jun / Jul - 2010

Codificando.net e-magazine
45

e-magazine

Por que Visual Studio Team System mudou de nome?


Por: Ramon Dures

Com o lanamento do Visual Studio 2010 a Microsoft mudou o nome dos produtos voltados para ALM(Application Lifecycle Management) de forma a unificar o Visual Studio uma nica viso facilitando o entendimento dos clientes. No Visual Studio Team System ns tnhamos 4 verses especificas do Visual Studio (Team Edition for Software Architects, Team Edition for Software Developers, Team Edition for Database Professionals, Team Edition for Software Testers) alm o Visual Studio Team Suite que englobava todos os recursos anteriores. Agora no Visual Studio 2010 teremos apenas uma verso do Visual Studio (Express, Professional, Premium, Ultimate) iniciando pela primeira express que gratuita e tendo como verso padro o Visual Studio 2010 Professional que um dos mais conhecidos do mercado e j traz poderosos recursos como testes unitrios. Na seqncia a prxima verso Visual Studio 2010 Premium com funcionalidades como: cobertura de cdigo, analise esttica de cdigo, mtricas de codificao, TDD, Integrao com banco de dados, Test Impact e UI Test para automao de testes de tela e na sequencia vem o Visual Studio 2010 Ultimate com suporte a diagramas UML, ferramentas de arquitetura, testes de carga e gerencia de casos de testes com o Test Professional.

Na prtica o que aconteceu foi a simplificao dos nomes e distribuio dos recursos existentes nas verses anteriores nessas trs novas vises do Visual Studio 2010 (Professional, Premium, Ultimate). O nome Visual Studio Team System representava toda a infra estrutura de ALM. Em funo disso outros produtos estavam presentes como o Team Foundation Server que a base para todos os projetos de desenvolvimento de software. Um nome como Microsoft ALM seria o mais indicado para cobrir toda a infra estrutura de recursos que temos a disposio para o desenvolvimento do nosso projeto do inicio ao fim com o apoio de novas ferramentas como: Visual Studio Test Professional 2010, Visual Studio Lab Management 2010 e Visual Studio Load Test Virtual User Pack. Um resumo geral do Microsoft ALM seria algo assim: Visual Studio 2010 (Professional, Premium, Ultimate) (Codificao, Arquietura, Testes) Visual Studio Team Foundation Server 2010 (Team Build, Source Control, Processo)

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

46

Por que Visual Studio Team System mudou de nome?

e-magazine

Visual Studio Test Professional 2010 (Gesto de testes manuais) Visual Studio Lab Management 2010 (Laboratrio de testes) Visual Studio Load Test Virtual User Pack (Licenas de uso teste de carga) O que mais mudou? - O Team Foundation Server 2010 agora pode ser instalado no seu Windows Vista, Windows 7 e custa em sua verso bsica. -U$ 500 para 05 usurios sem precisar de CAL (Client Access License) com a opo de adicionar mais usurios. - Agora d para gravar telas de aplicaes Windows Forms e reproduzir depois - Se voc comprar o Visual Studo 2010 com o contrato de atualizao (SA) Software Assurance que o MSDN Subscription voc leva um Team Foundation Server completo e uma CAL de acesso.

Codificando.net e-magazine

Ramon Dures
Possui mais de 10 anos de experincia na rea de desenvolvimento de software onde atua como consultor em projetos por todo o Brasil. Certificado em Visual Studio/ALM como Microsoft Most Valuable Professional, PROFESSIONAL SCRUM MASTER e PROFESSIONAL SCRUM DEVELOPER pela SCRUM.ORG com experincia em Project Management, Software Architecture, Application Lifecycle Management,Technical Sales, Technical Evangelism

www.codificando.net

Jun / Jul - 2010

47

e-magazine

Impresso com Silverlight 4

Por: Anderson Castro

O que veremos a seguir uma dentre as vrias novas features do Silverlight 4, o acesso a dispositivos de impresso. A API de impresso do Silverlight 4 permite a impresso do que est na tela, trechos de textos selecionados e mltiplas impresses. A classe responsvel pela impresso a PrintDocument que faz parte do namespace System.Windows.Printing. O mtodo usado para disparar a impresso o mtodo Print() . Abaixo temos uma breve descrio de cada um dos eventos da classe PrintDocument: StartPrint Ocorre sempre aps a tela de escolha da impressora e antes da impresso da primeira pgina. PrintPage Ocorre quando a pgina impressa alm de permitir o que ser impresso como tamanho da rea de impresso e pginas a serem impressas. EndPrint Ocorre aps a impresso mesmo que o usurio tenha cancelado a impresso.

Para este tutorial iremos usar: Visual Studio 2010 Sdk Silverlight 4

Vamos iniciar um novo projeto Silverlight. Veja na figura 1 a janela de criao de um novo projeto no Visual Studio.

Codificando.net e-magazine

Figura 1. Novo Projeto Silverlight.

Vamos selecionar o Silverlight 4, conforme a figura 2, como verso de desenvolvimento.

www.codificando.net

Jun / Jul - 2010

48

Impresso com Silverlight 4

e-magazine

Figura 2. Escolhendo a verso de desenvolvimento.

Vamos primeiramente criar uma interface simulando uma tela de contatos. Vamos definir nosso layout com cinco linhas e duas colunas. Podemos conferir o cdigo XAML na listagem 1.

Figura 3. Layout Concludo.

Vamos adicionar cdigo em nosso boto Print. Inicialmente vamos adicionar o namespace System.Windows.Printing e logo aps, vamos instanciar um objeto do tipo PrintDocument. Dentro do construtor da pgina iremos setar o evento PrintPage. No primeiro momento vamos configurar para que seja impresso o contedo de toda a tela atravs da propriedade PageVisual. Em nosso boto iremos chamar o mtodo Print e vamos passar como parmetro o nome de nosso trabalho a ser impresso.

Codificando.net e-magazine

Listagem 1. Construindo a Interface.

O cdigo do arquivo MainPage.cs est contido na listagem 2.

Vamos adicionar trs Labels, dois TextBox, um Image e um Button. Seu layout deve ficar semelhante ao da figura 3.

www.codificando.net

Jun / Jul - 2010

49

Impresso com Silverlight 4

e-magazine

Figura 5. Tela de seleo de impressoras. Listagem 2. MainPage.cs.

Vamos executar nossa aplicao e ver o resultado (Figura 4).

Para esse tutorial irei usar o Microsoft XPS Document para mostrar o resultado da impresso. Na figura 6, podemos ver o gerenciador de impresso. Perceba que o nome do documento a string que passamos como parmetro para o mtodo Print().

Codificando.net e-magazine

Figura 6. Gerenciador de impresso. Figura 4. Aplicao em execuo.

Na figura 7 podemos ver o resultado da impresso. O contedo impresso exatamente o apresentado na tela. Pressionando o boto Print ser exibida a tela de impresso conforme a figura 5.

www.codificando.net

Jun / Jul - 2010

50

Impresso com Silverlight 4

e-magazine

Figura 7. Resultado da impresso.

Listagem 4. Imprimindo o controle selecionado.

Agora digamos que voc queira imprimir somente um dos controles exibidos em nossa tela. Vamos imprimir o contedo do TextBox com a url de nosso contato. Lembre-se de dar uma identificao ao nosso controle, veja o trecho de cdigo XAML em que declaramos um objeto na listagem 3. Execute novamente nossa aplicao e pressione o boto Print. Como podemos ver na figura 8, foi impresso somente o contedo do controle selecionado.

Codificando.net e-magazine

Figura 8. Resultado de nossa impresso. Listagem 3. Identificando Controle.

Em nosso MainPage.cs ser necessrio uma pequena modificao. Iremos setar o nome de nosso controle a ser impresso. Veja o cdigo do evento PrintPage modificado na listagem 4.

Vamos dar um toque final a nossa aplicao, acrescente em nosso layout mais um controle button e um controle rectangle. Podemos ver o novo layout do aplicativo em execuo na figura 9.

www.codificando.net

Jun / Jul - 2010

51

Impresso com Silverlight 4

e-magazine

O cdigo da listagem 5 implementa o uso da WebCam e agora, vamos imprimir o contedo exibido por ela. Vamos modificar novamente nosso evento PrintPage e setar a propriedade PageVisual com nosso controle rectangle como podemos ver na listagem 6.

Figura 9. Novos Controles.

No evento click do nosso novo button vamos adicionar o cdigo da listagem 5.

Listagem 6. Modificando o evento PrintPage.

Vamos novamente executar nossa aplicao, ao pressionar o boto Start Capture ser solicitado permisso de acesso ao hardware, como podemos ver na figura 10. Clique em Sim.

Codificando.net e-magazine

Listagem 5. Implementando a captura da WebCam.

Obs. :Para ver mais detalhes sobre como implementar o uso da webcam com Silverlight 4 veja o artigo Usando WebCam e Microfone com Silverlight 4 e Visual Studio 2010 no seguinte link: http://comunidade.codificando.net/ profiles/blogs/usando-webcam-emicrofone-com

Figura 10. Permitindo acesso ao hardware.

www.codificando.net

Jun / Jul - 2010

52

Impresso com Silverlight 4

e-magazine

Para saber mais: Site oficial: http://www.silverlight.net/ Hospedagem gratuita para sua aplicao Silverlight (4gb): http://silverlight.live.com/ Blog Ren de Paula (User Experience Evangelist Microsoft): http://blogs.msdn.com/renedepaula/ Comunidades SilverlightCodificando: http:// comunidade.codificando.net/group/ silverlight
Figura 11. Visualizando a WebCam.

Comunidades SilverlightDesenvolvendo Para Web: http:// www.desenvolvendoparaweb.net/ group/silverlight Comunidades Silverlight-Silverlightbrasi: http://silverlightbrasil.ning.com/ Anderson Castro
Graduado em Analise e Desenvolvimento de Software atua no mercado de tecnologia a mais de trs anos com foco na plataforma .Net, desenvolvedor em C# Windows Forms e Asp.net. Alm disso, scio da Ronnin Software, empresa de desenvolvimento integrante do BizSpark da Microsoft e trabalha em um grande clube na cidade de So Paulo. Atualmente aprofundando seus conhecimentos em WPF, WCF e Silverlight. Siga-me: @andersonCastro Escrevo e participo atualmente nas seguintes comunidades e blogs: www.codificando.net WWW.blog.ronnin.com.br www.desenvolvendoparaweb.net www.silverlightbrasil.ning.com

A imagem comear a ser exibida direto de sua WebCam e ao pressionar o boto Print iremos imprimir o contedo de nossa WebCam (Figura 12).

Codificando.net e-magazine

Figura 12. Visualizando a Impresso.

Essa foi uma pequena demonstrao da API de impresso do Silverlight 4, espero que tenham gostado e at breve.

www.codificando.net

Jun / Jul - 2010

53

e-magazine

LINQ to SharePoint no SharePoint 2010

Por: Wagner Amorim

Overview Uma das grandes novidades do SharePoint 2010 para os desenvolvedores foi sem dvida o LINQ to SharePoint. Nesse artigo vamos explorar essa novidade que permite aos desenvolvedores construir querys utilizando o LINQ (Language Integrated Query) em nossas aplicaes SharePoint 2010. Esse novo recurso sem dvida representa um grande ganho de produtividade aos times de desenvolvimento, ao utilizar sintaxe LINQ, que parecida com a sintaxe SQL, os desenvolvedores criaro querys poderosas com suporte a objetos fortemente tipados (strongly typed objects), reduzindo os erros e aumentando a qualidade de desenvolvimento nos seus projetos SharePoint. O LINQ uma das novidades do .NET Framework 3.5 e do Visual Studio 2008, foi criado basicamente para ser o canal entre as camadas de dados e objetos nos projetos desenvolvidos com o Framework .NET, com suporte total ao IntelliSense e ao compilador do Visual Studio. Voc pode escrever consultas LINQ no Visual Basic ou C# acessando banco de dados SQL, documen-

tos XML, ADO.NET datasets e qualquer coleo de objetos que oferea suporte IEnumerable ou a interface genrica IEnumerable<(Of <(T>)>). O foco desse artigo no explorar o LINQ e sim o LINQ to SharePoint, no entanto considero estritamente recomendvel aos leitores que no possuem familiaridade com o LINQ que se aprofundem no assunto. O namespace Microsoft.SharePoint.Linq a base utilizada pelo Provider do LINQ to SharePoint, ele o responsvel por traduzir consultas LINQ para as conhecidas consultas CAML (Collaborative Application Markup Language). No mais necessrio para os desenvolvedores saberem escrever consultas CAML, as consultas LINQ so processadas no servidor, mas podemos utilizar o REST (Representational State Transfer) no SharePoint 2010 para consultas no lado cliente, para isso leia mais sobre o suporte do SharePoint para ADO.NET Data Services. No posso me estender no Overview desse artigo, mesmo assim abaixo listo

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

54

LINQ to SharePoint no SharePoint 2010

e-magazine

alguns links para referncia e estudo posterior: Language-Integrated Query (LINQ) http://msdn.microsoft.com/pt-br/library/ bb397926(VS.90).aspx Introduo ao LINQ http://msdn.microsoft.com/pt-br/library/ bb397897(VS.90).aspx Using LINQ to SharePoint (SDK) http://msdn.microsoft.com/en-us/library/ ee535491(office.14).aspx SharePoint 2010 Developer Training Kit http://www.microsoft.com/downloads/ details.aspx?FamilyID=83a80a0f-09064d7d-98e1-3dd6f58ff059&displaylang=en SharePoint 2010 Advanced Developer Training http://blogs.msdn.com/randalli/ archive/2010/05/13/sharepoint-2010advanced-developer-training-now-liveon-msdn.aspx SharePoint 2010 Developer Center http://msdn.microsoft.com/en-us/ sharepoint/ee514561.aspx Get Started Developing on SharePoint 2010 http://msdn.microsoft.com/en-us/ sharepoint/ee513147.aspx

Instalando Windows 7

SharePoint

2010

no

http://www.canalsharepoint.com.br/tutoriais/Tutoriais/ Instalando%20o%20SharePoint%202010%20no%20Windows% 207.aspx

Soluo

Para essa soluo vou trabalhar com as seguintes tecnologias:

SharePoint Foundation 2010 RTM Microsoft SQL Server 2008 Windows 7 x64 Visual Studio 2010 Ultimate NOTA: Eu utilizei uma instalao do SharePoint Foundation 2010, mas o artigo tambm se aplica ao SharePoint Server 2010. Como boas prticas de desenvolvimento, vou trabalhar com meus exemplos utilizando o Windows 7 como sistema operacional. Para maiores informaes de instalao e configurao do SharePoint 2010 no Windows 7, veja o artigo citado acima. A Microsoft criou uma ferramenta chamada SPMetal, que tem como objetivo criar as entidades utilizadas pelo LINQ de forma amigvel e produtiva. O SPMetal gera automaticamente classes ou entidades com todos os metadados das listas e bibliotecas existentes no site determinado que sero utilizadas pelas consultas do LINQ. DICA: Uma alternativa ao SPMetal o LINQ to SharePoint DSL, uma extension do Visual Studio 2010 que permite aos desenvolvedores e principalmente aos Arquitetos de Desenvolvimento utilizar um novo item no Visual Studio chamado SharePoint Data Model para gerar de forma visual as entidades de um site de-

Codificando.net e-magazine
|

www.codificando.net

Jun / Jul - 2010

55

LINQ to SharePoint no SharePoint 2010

e-magazine

terminado ou mesmo de templates de site padro, veja mais em: http:// code.msdn.microsoft.com/linq2spdsl/ . Para iniciar nossos exemplos, vamos criar uma lista em nosso site do SharePoint 2010 para armazenar um cadastro de clientes, nesse caso crie uma lista chamada Clientes com os campos Nome e Telefone, ambos do tipo texto. NOTA: Para maiores informaes sobre Listas e Campos no SharePoint, confiram os artigos relacionados no CanalSharehttp:// Point na seo Artigos, www.canalsharepoint.com.br/tutoriais/ default.aspx. Criando uma Soluo com o LINQ to SharePoint A ferramenta SPMetal fica armazenada na pasta de instalao do SharePoint 2010, %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\BIN. Abra o Prompt de Comando (start/cmd) e navegue at a pasta %ProgramFiles% \Common Files\Microsoft Shared\web server extensions\14\BIN.

DICA: Uma dica de produtividade para a execuo desse procedimento inserir o caminho "%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\BIN" nas variveis de ambiente (set path=%path%;c:\program files\common files\microsoft shared\web server extensions\14\bin), para que no seja mais necessrio navegar at a pasta de instalao do SharePoint, essa varivel de ambiente tambm vai servir para a utilizao da ferramenta STSADM. Execute o seguinte comando SPMetal no prompt de comando.
SPMetal.exe /web:http://wagnera/sites/ sp2010 / namespace:SharePoint2010.DEV.LINQ / code:C:\Entities.cs /language:csharp

Codificando.net e-magazine

Figura 02: Utilizando o SPMetal no SharePoint.

NOTA: Veja uma referncia completa da ferramenta SPMetal e das suas respectivas opes em http:// msdn.microsoft.com/en-us/library/ ee538255(office.14).aspx . DICA: O nome do arquivo .cs atribuido no passo acima vai refletir diretamente no nome do DataContext gerado, por exemplo, no caso acima o nome ser Entities-

Figura 01: Pasta de instalao do SharePoint 2010 no Prompt de Comando.

www.codificando.net

Jun / Jul - 2010

56

LINQ to SharePoint no SharePoint 2010

e-magazine

DataContext. Aps a execuo do passo acima, o SPMetal vai gerar um arquivo chamado Entities.cs na raiz da pasta C:\, nesse arquivo foram extrados todos os metadados presentes nas listas e bibliotecas do site determinado, gerando classes e entidades. Nesse passo vamos criar uma Visual WebPart para exibir dados do SharePoint utilizando o LINQ to SharePoint para realizar as consultas. Crie um Projeto no Visual Studio 2010 do tipo Visual WebPart, abra o Visual Studio 2010 e clique em File/New/Project.

Figura 04: Escolhendo o tipo de projeto Empty SharePoint Project no Visual Studio 2010.

Em seguida o Visual Studio abre a janela SharePoint Customization Wizard, onde podemos definir para qual site ser feito o Debug e Deploy, alm de definirmos os nveis de segurana da soluo. Defina o site e o nvel de segurana da aplicao como Deploy as a farm solution e clique em Finish.

Codificando.net e-magazine

Figura 03: Microsoft Visual Studio 2010.

DICA: Recentemente publiquei um artigo completo sobre Visual WebParts no SharePoint 2010, vejam: http://www.canalsharepoint.com.br/ tutoriais/Tutoriais/SharePoint 2010 - Visual WebParts.aspx Na janela New Project, clique em Visual C#/SharePoint/2010/Empty SharePoint Project, renomei o projeto para SharePoint2010.DEV.LINQ e clique em OK.

Figura 05: Configurando o site e o tipo de deploy que ser utilizado.

Adicionando o arquivo Entities.cs na nova soluo. Na janela Solution Explorer, clique com o boto direito no projeto, depois em Add/Existing Item.
Jun / Jul - 2010

www.codificando.net

57

LINQ to SharePoint no SharePoint 2010

e-magazine

Figura 06: Adicionando o Entities.cs no projeto do Visual Studio 2010.

Navegue at a pasta C:\ e selecione o arquivo Entities.cs gerado pelo SPMetal. Clique em Add.
Figura 08: Adicionando referncia ao assembly Microsoft.SharePoint.Linq.

Importe para essa classe os seguintes namespaces:


using Microsoft.SharePoint.Linq; using System.Linq;

Adicionando uma Visual WebPart na soluo. Na janela Solution Explorer, clique com o boto direito no projeto, depois em Add/New Item.
Figura 07: Entities.cs adicionado no projeto.

DICA: Deve ser lembrado que esse arquivo Entities.cs esttico, portanto toda vez que a estrutura do site for alterado o Entities.cs dever ser gerado novamente. Por esse motivo nunca alterem esse arquivo, no caso de haver essa necessidade, criem classes parciais (partial class) para implementar as extenses aos objetos do Entities. Adicione referncia para a assembly Microsoft.SharePoint.Linq, clique com o boto direito em References/Add Reference e selecione o componente Microsoft.SharePoint.Linq na guia .NET.

Na janela Add New Item, selecione o item template Visual Web Part.

Codificando.net e-magazine
|

No campo name digite VisualWPe clique em Add.

Figura 09: Adicionando uma nova Visual WebPart ao projeto.

www.codificando.net

Jun / Jul - 2010

58

LINQ to SharePoint no SharePoint 2010

e-magazine

NOTA: Note na Janela Solution Explorer (Ctrl+W,S) que o SharePoint adicionou trs arquivos (VisualWP.cs, VisualWP.webpart e Elements.xml) relacionados com a WebPart e mais trs arquivos relacionados com o UserControl (VisualWPUserControl.ascx, VisualWPUserControl.ascx.cs e VisualWPUserControl.ascx.designer.cs).

renomeie para CanalSharePoint 2010. D um duplo clique CanalSharePoint 2010. no item

No campo Title, digite CanalSharePoint LINQ to SharePoint. No campo Description, digite Feature criada para ativar a Visual WebPart da Demo.

Figura 10: Novo Solution Explorer no Visual Studio 2010. Figura 11: Configurando Features do SharePoint no Visual Studio 2010.

Alm da WebPart com o User Control, foi adicionado tambm uma feature (Feature1) em uma nova pasta chamada Features, essa pasta faz parte de um novo pacote de recursos disponveis no Visual Studio 2010 para melhorar o desenvolvimento e deploy do SharePoint 2010 no Visual Studio. Bem legal! Vamos rapidamente explorar esse novo item Feature1 adicionado ao projeto entender de forma simples seu funcionamento. Alterando informaes da Feature Clique com boto direito na Feature1 e a

Codificando.net e-magazine

Alterando o ttulo, a descrio e o Grupo da WebPart Clique 2 vezes no arquivo VisualWP.webpart e altere as seguintes linhas:
<property name="Title" type="string">VisualWP</property> <property name="Description" type="string"> My Visual WebPart </ property>

Para:
<property name="Title" type="string">SharePoint 2010 LINQ to SharePoint</property>

www.codificando.net

Jun / Jul - 2010

59

LINQ to SharePoint no SharePoint 2010

e-magazine

<property name="Description" type="string"> CanalSharePoint LINQ to SharePoint no SharePoint 2010</property>

Salve e feche VisualWP.webpart.

arquivo

Para simular um exemplo mais prtico, vamos criar uma WebPart que apenas exibe os dados da lista Clientes, criada no incio do artigo. Altere o mode de exibio para do UserControl para Source.

D um duplo clique no arquivo Elements.xml e altere a seguinte linha:


<Property Name="Group" Value="Custom" / >

Para:
Property Name="Group" Value="CanalSharePoint" />

Salve e feche o arquivo Elements.xml. Aps explorar de forma breve as Features no Visual Studio 2010, vamos continuar com o desenvolvimento da Visual WebPart que vai utilizar o LINQ to SharePoint. Abra o UserControl chamado VisualWPUserControl.ascx. Certifique-se de que o modo de exibio do UserControl est como Design.
Figura 13: Visualizando a Visual WebPart no Modo Source.

Insira o cdigo abaixo logo aps a ltima linha de cdigo.


<%@ Import Namespace="Microsoft.SharePoint.WebContr ols" %> <SharePoint:SPGridView id="gridClientes" runat="server" AutoGenerateColumns="false"> <HeaderStyle HorizontalAlign="Left" ForeColor="Navy" Font-Bold="true" /> <Columns> <SharePoint:SPBoundField DataField="Nome" HeaderText="Nome"></ SharePoint:SPBoundField> <SharePoint:SPBoundField DataField="Telefone" HeaderText="Telefone do Cliente"></SharePoint:SPBoundField> </Columns> </SharePoint:SPGridView>

Codificando.net e-magazine

Figura 12: Visualizando a Visual WebPart no Modo Design.

www.codificando.net

Jun / Jul - 2010

60

LINQ to SharePoint no SharePoint 2010

e-magazine

Abra o arquivo que contm o CodeBehind do UserControl VisualWPUserControl.ascx.cs. Adicione os seguintes namespaces:
using System.Linq; using Microsoft.SharePoint; using Microsoft.SharePoint.Linq;

Realizando o Deploy Nesse ponto o desenvolvimento da aplicao est concludo e podemos iniciar o deploy, antes disso, compile a aplicao (Ctrl+Shift+B) e resolva qualquer erro ou conflito que possa ocorrer. Execute o Deploy via Visual Studio (Build/ Deploy Solution). NOTA: Repare que o Visual Studio executa os seguintes passos de forma automtica: Compila a aplicao. Recycle no App Pool da aplicao. Retract da Solution, caso exista no farm. Adiciona Solution. Deploy Solution. Ativa Features.

Insira o cdigo abaixo no mtodo Page_Load.


protected void Page_Load(object sender, EventArgs e) { using (SPSite sitec = new SPSite (SPContext.Current.Web.Url)) { using (SPWeb site = sitec.OpenWeb ()) { EntitiesDataContext dc = new EntitiesDataContext (SPContext.Current.Web.Url); //Query Expressions var qClientes = (from item in dc.Clientes where item.Nome != string.Empty orderby item.Id descending select new { item.Nome, item.Telefone }).ToList(); gridClientes.DataSource = qClientes; gridClientes.DataBind(); } } }

Verificando se a Solution e as Features foram instaladas corretamente. Acesse a Central Administration do SharePoint 2010. Clique no item System Settings do menu vertical da esquerda. Na seo Farm Management, clique em Manage farm solutions. Na pgina de Solution Management deve aparecer sua solution, como mostra a figura 14:

Codificando.net e-magazine

Salve o UserControl.

www.codificando.net

Jun / Jul - 2010

61

LINQ to SharePoint no SharePoint 2010

e-magazine

Na pgina Site Settings, na seo Site Collection Administration clique no item Site collection features. Nessa pgina deve aparecer a feature que criamos acima, conforme figura 16.

Figura 14: Visualizando o WSP na Central Administration do SharePoint 2010.

No caso das features, feche a Central Administration e abra o site que escolheu fazer o deploy no passo 1.3. Com o site aberto, clique no item de menu Site Actions, depois em Site Settings.
Figura 16: Gerenciando Features no SharePoint 2010.

Adicionando a Visual WebPart para o site Volte para a home do site. Utilizando as Ribbons, clique no item Page, depois em Edit da pgina principal do site.

Codificando.net e-magazine

Figura 17: Ribbons no SharePoint 2010.

Ainda nas Guias do Ribbons, clique em Insert, depois em WebPart Com a pgina aberta em modo de edio, clique em Add WebPart. Note que a Ribbons vai adicionar uma nova caixa com as propriedades da Web-

Figura 15: Site Actions no SharePoint 2010.

www.codificando.net

Jun / Jul - 2010

62

LINQ to SharePoint no SharePoint 2010

e-magazine

Part.

Concluso Nesse artigo conseguimos explorar a nova funcionalidade do SharePoint, LINQ to SharePoint de uma forma mais simples e prtica, para maiores informaes, dicas & truques, acessem o site da Comunidade CanalSharePoint: http://www.canalsharepoint.com.br.

Figura 18: Adicionando minha Visual WebPart de LINQ to SharePoint.

Wagner Amorim
Lder da Maior Comunidade de SharePoint do Brasil (CanalSharePoint), participante de diversos projetos para mdias e grandes empresas utilizando tecnologias Microsoft, tm se especializado nas Tecnologias SharePoint e .NET desde 2003. Atualmente trabalha como Consultor Especialista SharePoint por todo o Brasil, com participao focada no desenvolvimento e customizao dos Produtos e Tecnologias SharePoint, tambm participa como membro ativo das comunidades TechNet e MSDN.

Clique em Add. No menu superior do Ribbons, clique no boto Save & Close.

Finalizando e Testando Para finalizar e testar sua WebPart com o LINQ to SharePoint, basta inserir registros na lista Clientes.

Figura 19: Exibio de WebPart sem registros na lista Clientes.

Codificando.net e-magazine

Figura 20: Exibio de WebPart com registros na lista Clientes.

www.codificando.net

Jun / Jul - 2010

63

e-magazine

O Futuro do Home Office


Por: Ramon Dures

A IBM saiu na frente incentivando esse modelo de trabalho entre os funcionrios. Outras grandes empresas seguiram na mesma linha e hoje conseguimos ver esse modelo at nas mais formais. Tinha um tempo que os administradores de redes falavam que no era possvel liberar o acesso externo do e-mail e logo sugiram os Web Mails e acesso externo normal como padro do dia a dia alm de toda a infraestrutura de acesso remoto. J faz alguns anos que conversando com um amigo ele me contou como era o seu trabalho no Home Office e rimos bastante sobre o que a famlia dele comentava. Pois na poca viam ele todos os dias em casa, saia algumas vezes e voltava e conseguia manter um bom padro de vida e j chegaram at a suspeitar que ele estava envolvido com algo ilcito pois era a nica forma de justificar que ele ganhava dinheiro trabalhando em casa. Eu sempre achei interessante esse modelo de trabalho. A cerca de dois anos eu consegui implementar na minha empresa permitindo que os profissionais pudessem trabalhar de qualquer lugar aumentando a flexibilidade, satisfao e resultados. Nas principais cidades grandes do Brasil em horrios de alto fluxo de trafego de carros acabamos por perder muito tempo entre o trajeto de caso ao escritrio. Em tempos de tecnologia sustentvel o

Home Office aparece cada vez mais como um diferencial economizando no consumo de combustvel e at no stress. Abrir uma empresa hoje j demanda um investimento inicial principalmente para o pequeno empreendedor no Brasil que inicia a Startup na maioria das vezes com seus recursos prprios e a melhor opo inicial usar o espao em casa que j conta com toda a infraestrutura de telefone, internet para iniciar o seu negcio. Eu diria que a nova verso das famosas garagens americanas que deram inicio a grandes empresas que conhecemos hoje. Durante o dia a dia do Home Office algumas questes so importantes para que voc possa usufruir do espao da melhor forma possvel. Eu considero uma misso para todos os profissionais, pois ser um grande exerccio de organizao e auto gesto e provocar pra os que conseguirem ultrapassar esse desafio ganhos nicos em sua carreira profissional pela capacidade desenvolvida de focar e gerenciar o seu tempo. 1) O Home Office oferece a oportunidade de se trabalhar com horrios altamente flexveis permitindo que se trabalhe mais tarde ou mais cedo ficando a seu cargo controlar o seu horrio de trabalho alm de incrementar em seu tempo todo o desperdcio do dia a dia com locomoo.

www.codificando.net

Jun / Jul - 2010

Codificando.net e-magazine
64

O Futuro do Home Office

e-magazine

2) Convivncia com outros membros da casa no primeiro momento ser um grande estagio de adaptao. Por mais que a cultura desse tipo de trabalho seja bastante difundida ainda encontrar resistncias e pequenas confuses com a interferncia da famlia. uma etapa de adaptao de todos para que tomem conhecimento que naquele horrio voc est trabalhando. Algumas pessoas brincam falando que usam um bon para sinalizar a todos da casa. 3) Algumas pessoas adoram trabalhar de pijama. Eu pessoalmente tenho algumas rotinas tipo me preparar como se fosse ao trabalho, porm com uma roupa mais confortvel para ficar no escritrio. 4) Apesar dos horrios flexveis importante que voc estabelea sua rotina. Eu acordo cedo todos os dias, pois s o fato de no precisar sair j ganhamos mais de uma hora de sono no mnimo da d para perfeitamente acordar cedo. Outro ponto importante fazer um balanceamento para no trabalhar demais uma vez que acaba sendo um vicio. 5) As reunies so muito importantes mas acabam tomando muito o nosso dia a dia na empresa e tornando at improdutivo. Quando estou no Home Office conduzo as mesmas via conferncias por fone/vdeo com pautas definidas e sem muita conversa. 6) A principal vantagem usar a mesma estrutura de casa para reduzir seus custos. Em alguns casos convm ter uma linha adicional privada do seu escritrio para

evitar que outras pessoas da casa atendam. Eu fui alm uso uma linha VOIP que me acompanha em qualquer lugar e mais uma flexibilidade da tecnologia atual. 7) O meu negcio depende da internet ento alm da banda larga eu uso um modem 3G de backup para continuar o trabalho em caso de necessidade. 8) Por mais que esteja protegido sempre vai ter algum tipo de distrao em casa que venha a tentar desviar a sua ateno. Nesse ponto voc precisa ser muito focado para criar uma barreira e evitar que esses impedimentos atrapalhem a sua concentrao. No entanto nada comparado com o ambiente de trabalho com vrios telefones tocando e mais de 30 pessoas querendo falar com voc. 9) Em casa a geladeira o seu frigobar privado e sempre ter uma coisa para comer. Esse outro ponto importante que deve ficar atento para no exagerar na alimentao e ganhar alguns quilos a mais. Como ter mais tempo eu recomendo dedicar a uma atividade fsica. 10) Voc o seu chefe. Portanto a sua disciplina de organizar as suas tarefas fundamental para conseguir duplicar a sua produo s economizando o tempo perdido durante todo o dia. Eu recomendo fortemente montar e registrar suas tarefas em Post-IT e colar os mesmos em um quadro estilo SCRUM/KABAN com as colunas: Tarefas; Executando; Pronto; Pendncias. Atualmente estamos usando um modelo misto de trabalho a depender o papel de ca-

www.codificando.net

Jun / Jul - 2010

Codificando.net e-magazine
65

O futuro do Home Office

e-magazine

da um no projeto ele pode optar por toda essa flexibilidade que j comentamos. Existem empresas que j contratam profissionais inclusive aqui no Brasil j para trabalho em Home Office. importante que voc esteja preparado para encarar mais esse desafio. Participe nos comentrios com a sua experincia. Para saber mais: Stay Home and Work Ramon Dures
Possui mais de 10 anos de experincia na rea de desenvolvimento de software onde atua como consultor em projetos por todo o Brasil. Certificado em Visual Studio/ALM como Microsoft Most Valuable Professional, PROFESSIONAL SCRUM MASTER e PROFESSIONAL SCRUM DEVELOPER pela SCRUM.ORG com experincia em Project Management, Software Architecture, Application Lifecycle Management,Technical Sales, Technical Evangelism

www.codificando.net

Jun / Jul - 2010

Codificando.net e-magazine
66

Cobertura Codificando2010
Por: Diego Nogare
Em Junho de 2010 o Codificando .Net realizou mais um evento presencial em So Paulo, fazia mais de 1 ano e meio que no organizvamos um evento desta magnitude na regio. No o fazamos por questes de logstica (contratao de buffet para o coffee-break, liberao do espao para realizar as palestras, conseguir agenda livre de todos palestrantes, etc) e pela falta de interesse da comunidade. Acredito que pela grande quantidade de eventos presenciais que aconteceram em 2008 e 2009, com o lanamento de diversos produtos, a comunidade no estava comparecendo em peso nos eventos. J no era novidade ir pra um evento. Se pegar a agenda daquela poca era possvel encontrar um evento a cada 15 dias (ou menos) em So Paulo. Nos ltimos eventos que o Codificando .net realizou em 2008, tnhamos uma mdia de 300 inscritos e compareciam por volta de 100. Era um numero considervel, visto o cenrio da poca e quantidade de informao que se conseguia com muita facilidade, mas ficava difcil gerenciar todos os preparativos de um evento para 300 pessoas e comparecerem somente 100. Praticamente depois de 1 ano e meio, decidimos realizar outro evento e ver se a comunidade voltaria a participar de encontros presenciais organizador por ns. Quanto mais divulgvamos o evento, mais ansiosos ficvamos. Cada vez que um de ns consultava o numero de inscritos no evento encontrvamos o numero crescendo bastante. Isso nos motivou a trazer os mais renomados palestrantes de cada rea para realizar as palestras, conseguimos patrocnios importantes para ajudar com o espao fsico (Unip Tatuap), com o CoffeeBreak (F|Camara) e com confeces de camisetas para presentear os participantes (Daruma Community Developers e Microsoft Answers). Toda essa logstica nos consumiu vrias horas de trabalhos em conjunto para conseguir fazer do evento um novo ponto central de conhecimento. Mas deu tudo certo e conseguimos. Com quase 700 inscritos e mais de 300 presentes divididos nas 4 tracks simultneas, conseguimos alcanar nosso objetivo. Conseguimos trazer novamente vocs para um evento presencial e trocar conhecimentos. Esses eventos so uma fonte inesgotvel de aprendizado, se conseguir aproveitar o network que se pode fazer em um evento desses, sua vida mudar completamente. Isso fato, aconteceu comigo! Grande abrao, Diego Nogare

www.codificando.net

Jun Jul - 2009 Abril // Maio 2010

||

67

www.codificando.net

Jun Jul - 2009 Abril // Maio 2010

||

68

www.codificando.net

Jun Jul - 2009 Abril // Maio 2010

||

69

www.codificando.net

Jun Jul - 2009 Abril // Maio 2010

||

70

e-magazine

O TechEd Brasil 2010 vem ai. Vale a pena o investimento?


http://www.teched.com.br
Por: Alexandre Tarifa
Vem ai mais um TechEd aqui no Brasil e muitas dvidas a respeito do evento. Participo das edies do TechEd desde 2005, naquele tempo ainda existia uma diviso entre TechEd e PDC. Hoje o TechEd um evento nico da Microsoft no Brasil para todos os pblicos: desenvolvimento e infraestrutura. O evento gigantesco e com uma infraestrutura nica, deve ser um dos maiores eventos de TI do pais. Alm da grandiosidade o evento marcado pela ampla quantidade de contedo, tanto para o pessoal de desenvolvimento como infraestrutura. Essa juno dos eventos para mim uma grande oportunidade, pois cada dia mais, o pessoal de desenvolvimento precisa conhecer de infraestrutura. Recomendo a todos os desenvolvedores assistirem palestras de IIS, appFabric, Windows azure e SQL Server pois so assuntos que teoricamente no precisamos conhecer profundamente, mas j passou do tempo de conhecermos muito bem esses assuntos. O IIS 7.5 oferece muitos recursos, na realidade desde o IIS 7 ns desenvolvedores podemos implementar diversos recursos que s conseguamos trabalhar direto no cdigo ou em arquivos de configurao. Um grande exemplo disso o Outputcache, que pode ser totalmente implementado pelo IIS. Mdulos de SEO, desempenho, etc tambm so disponveis... e aonde descobri isso? Em um TechEd, assistindo uma palestra de infraestrutura (que teve piadinhas de desenvolvedores, mas pacincia) Alm da grande diversidade de contedo, contamos com os principais assuntos de desenvolvimento com os profissionais que se destacam em cada tecnologia. Recomendo muito a participao de palestras de ASP.NET 4, ASP.NET MVC, AppFabric, EF, Visual Studio 2010, C# e VB, etc. Alm de todo conhecimento tcnico a rede de relacionamento do evento impagvel! Voc conhece muitas pessoas, empresas, MVPs, funcionrios da Microsoft, pessoal da comunidade em geral, etc. Eu mesmo em TechEds j: mudei de emprego, conheci pessoas que sou amigo at hoje, conheci o programa MVP, fui convidado para escrever artigos para MSDN Magazine (na poca do Renato Haddad), etc. O investimento muito baixo comparado com o potencial de retorno que este evento nos oferece. Invista em voc! Participe do TechEd e no se arrependera em momento algum. Abraos e at o TechEd 2010!

www.codificando.net

Jun Jul - 2009 Abril // Maio 2010

||

71