Escolar Documentos
Profissional Documentos
Cultura Documentos
49:. Uso do Microsoft Project descrevendo suas caractersiticas 55:. Novidades em Desenvolvimento no Sharepoint 2010
04:. Editorial
www.codificando.net
96:. .Close ( )
Editorial
Fala galera, essa edio da revista marca mais um divisor de guas no Codificando .Net! Seguindo o esprito da nossa comunidade de promover os membros ativos e que acreditam que o compartilhamento de conhecimento altrusta algo que engrandece nosso pas e faz a diferena entre ns, profissionais de tecnologia da informao. Digo que esta edio diferenciada, porque marca a transio da Editorao da revista Codificando .Net e-Magazine para a Fernanda Sallai. Ela vem desenvolvendo um trabalho fantstico com a revista, e nada mais justo do que retribuir o trabalho dela junto nossa comunidade colocando-a a frente das atividades que faz. No deixarei completamente a edio da revista, vou me manter no time, mas s auxiliando a Fernanda no que for preciso (no farei praticamente nada). Bom, depois de fazer a comunicao oficial desta mudana na revista, vou comentar sobre outro fator bem interessante desta edio: A Copa Microsoft de Talentos. A Copa foi realizada por mais de 8.000 participantes em todo o territrio nacional, ainda estamos nas quartas-de-final, mas agora s 120 participantes passaram. Essa Copa foi criada para divulgar os novos produtos lanados este ano e as pessoas que forem assistindo as apresentaes e realizando as provas vo acumulando pontos. Aconteceram vrios eventos atravs de Webcast inclusive fui moderador na apresentao de SQL Server 2008 R2 e tambm realizaram 17 eventos presenciais em vrios estados. Esta edio da revista trs fotos e relatos de como foram esses eventos presenciais nos estados, feitos por membros da comunidade que acompanharam de perto o evento. Quero deixar um agradecimento especial a todos eles, que colaboraram para permitir que pessoal de outros estados pudessem sentir como foram os eventos. Pra finalizar, no menos importante, os artigos que foram aprovados nesta edio esto com um nvel bastante elevado. Praticamente todos os artigos so de membros da comunidade que nos procuraram para publicar os materiais. Se voc tiver algum artigo e quiser publicar com a revista, pode nos enviar um e-mail para revista@codificando.net
Diego Nogare revista@codificando.net
e-magazine
Nesse artigo, veremos como efetuar a implementao de um evento que indique o progresso de um processamento efetuado dentro de uma classe. O que um evento? Um evento uma mensagem disparada por um objeto indicando alguma ao executada. Por exemplo, temos o evento Click de um objeto Button que disparado sempre que um usurio pressiona e solta esse objeto, ou o evento Shown de um objeto Form, que indica que o Form est sendo mostrado pela primeira vez. Da mesma forma que podemos responder a esses eventos, podemos criar nossos prprios eventos e o usurio de nossa classe pode respond-los. Projeto que ser criado Imagine um caso em que o usurio seleciona vrios arquivos de texto e clica em um boto em que os arquivos selecionados sero processados. Dependendo do tamanho de cada arquivo, da quantidade de arquivos selecionados, do computador do usurio, etc., essa tarefa pode demorar. Com a tela do aplicativo parada, o usurio pode imaginar que o aplicativo travou e pode tentar fech-lo ou tentar reiniciar o computador.
Isso pode ser evitado se, durante o processamento dos arquivos, ns informarmos ao usurio o que est ocorrendo internamente atravs do formulrio da aplicao. Ento, vamos criar um aplicativo que simula o processamento de arquivos e indica ao usurio o status desse processamento. Vamos ao exemplo prtico? Escrevendo a classe que dispara o evento Crie um projeto no Visual Studio do tipo Class Library com o nome de Arquivos e adicione uma classe ao projeto com o nome de Arquivos como podemos ver nas Figuras 1 e 2. O escopo dessa classe ser public. Veja a declarao da classe na Listagem 1.
Codificando.net e-magazine
www.codificando.net
e-magazine
Na Listagem 4, criamos o mtodo que simula o processamento dos arquivos, efetuamos um looping no objeto arquivos, percorrendo cada string e inclumos uma chamada ao mtodo Sleep(), simulando um tempo de processamento em cada arquivo.
Na Listagem 2, vamos declarar um membro da classe do tipo StringCollection que conter o nome dos arquivos a serem processados e no construtor da classe, vamos preencher esse objeto com nomes de arquivos para fazermos a simulao.
Listagem 4 Primeira verso do mtodo de processamento.
Codificando.net e-magazine
Antes de escrever o cdigo do nosso evento, vamos criar a classe que conter os dados do nosso evento. Essa classe herda da classe EventArgs. Essa classe conter uma varivel que vamos utilizar para passar o nome do arquivo que ser processado para a classe que vai responder ao nosso evento. Essa varivel ser privada e incluiremos uma propriedade para acess-la. Notem na Listagem 5 que a nossa propriedade contm o mtodo set declarado
Abr / Mai - 2010
Tambm teremos nessa classe, uma propriedade que retorna o nmero de arquivos a serem processados. Isso mostrado na Listagem 3.
www.codificando.net
e-magazine
com o escopo internal. Quando declaramos um membro como internal, impedimos que esse membro seja acessado fora do assembly em que a classe foi criada. Fizemos isso para impedir que o mtodo que responde ao nosso evento possa modific-la.
gate nesse caso, utilizado como uma ponte entre o objeto que disparou o evento e o objeto que tratar esse evento.
Agora vamos declarar o delegate e o evento da classe. Veja na Listagem 6 que o delegate contm uma assinatura, seu retorno void, e os parmetros so do tipo object e CarregandoArquivoEventArgs. No parmetro do tipo object, passaremos uma referncia da classe que disparou o evento e no parmetro do tipo CarregandoArquivoEventArgs, passaremos uma referncia a um objeto criado na nossa classe e que conter o nome do arquivo que ser processado. Mas o que um delegate? Para capturarmos um evento e efetuarmos alguma ao com base nesse evento, precisamos de um delegate. Um delegate uma classe que contm uma referncia para um mtodo. Basicamente, um dele-
Estamos quase finalizando a classe arquivo. Agora teremos que revisitar o mtodo CarregarArquivos() para disparar o evento quando um arquivo estiver prestes a ser processado. Veja a nova verso do mtodo na Listagem 7. Primeiro criamos um objeto do tipo CarregandoArquivoEventArgs, e atribumos a string com o nome do arquivo a propriedade NomeArquivo do objeto. Depois verificamos se o evento nulo e caso ele no seja nulo, disparamos o evento passando o objeto que est disparando o evento e o objeto do tipo CarregandoArquivoEventArgs que contm o nome do arquivo. Por que tenho que verificar se um evento nulo? Caso o usurio de sua classe no tenha criado nenhum mtodo que responda ao evento, o evento ser nulo e quando tentarmos dispar-lo, ocorrer uma exceo NullReferenceException.
Codificando.net e-magazine
www.codificando.net
e-magazine
Criando o formulrio que vai capturar o evento Adicione a soluo um projeto Windows Forms Application (figura 3), clique nesse projeto com o boto direito e clique em Set as StartUp Project.
Tipo: Button Propriedades: Name btnProcessarArquivos Text Processar Tipo: Label Propriedades: Name lblNomeArquivo Text - <vazio> Tipo: ProgressBar Propriedades: Name pbProgresso O seu form deve ficar semelhante ao da figura 5.
Para trabalharmos com a classe Arquivos, precisamos adicionar uma referncia ao projeto Arquivos. Podemos fazer isso clicando com o boto direito no nosso projeto do tipo Windows Forms Application -> Add Reference. Aps isso, clique na Aba Projects, selecione o projeto Arquivos e clique em OK (figura 4).
Na Listagem 8, adicionamos um mtodo de captura ao evento Click do boto btnProcessarArquivos. Voc pode adicionlo clicando duas vezes no boto. Nesse evento, configuramos a propriedade TopMost para true para que o form fique sempre frente dos outros forms que no estejam configurados da mesma forma. Desabilitamos o boto para que o usurio veja que o mesmo no pode ser pressionado. Criamos uma instncia da nossa classe Arquivos e configuramos a propriedade Maximum do nosso objeto do tipo ProgressBar com a quantidade de arquivos que temos para processar. Veja a seguinte linha de cdigo:
Codificando.net e-magazine
www.codificando.net
e-magazine
Com ela indicamos que o mtodo arquivos_CarregandoArquivo responder ao evento quando ele for disparado e o seu cdigo ser executado. Para finalizar, chamamos o mtodo que processa os arquivos e ao final de todo o processamento, resetamos o valor do ProgressBar e da Label, habilitamos o boto e configuramos TopMost para false.
Agora precisamos escrever o cdigo do mtodo que responder ao evento. Podemos ver o cdigo na Listagem 9. Esse mtodo atualiza a label com o nome do arquivo que ser processado e incrementa o valor da barra de progresso. Ao final disso o form atualizado para que possamos visualizar os novos valores dos objetos.
Execute o aplicativo e voc ver o progresso da nossa simulao, tanto na Label que indica qual arquivo est sendo processado, como na barra de progresso.
Codificando.net e-magazine
Mas o meu form fica travado. E agora? possvel deixar o form livre para que o usurio continue fazendo outras tarefas durante o processamento dos arquivos atravs de threads e com a utilizao do
www.codificando.net
e-magazine
mtodo Invoke para a atualizao dos objetos do formulrio quando um arquivo comea a ser processado, mas isso foge do escopo do artigo. Concluso Com poucas linhas de cdigo podemos criar um evento para o nosso aplicativo enviar respostas durante o processamento para que o usurio no fique com a impresso de que o aplicativo travou e pare o processo forando o seu encerramento. Leandro Alves Santos
Bacharel em Sistemas de Informao. Atua a 4 anos com desenvolvimento e manuteno de sistemas. Tem experincia na Plataforma .NET (VB.NET e C Sharp), Visual Basic 6, Crystal Reports, Sql Server e MySql.
Codificando.net e-magazine
|
www.codificando.net
10
e-magazine
O Silverlight chegou a sua terceira verso, com novos recursos e melhorias, e nesse artigo iremos aprender a utilizar o Expression Blend, ferramenta que usamos para desenvolver nossas aplicaes e animaes. Podemos comprar ou baixar um Trial do Expression Blend 3, no link: http:// www.microsoft.com/expression/products/ Blend_Overview.aspx. A instalao simples e segue o padro Next Next Finish. Se voc seguiu a instalao padro, o blend vai estar no menu Iniciar -> Microsoft Expression -> Expression Blend 3 (figura 1).
Quando iniciamos o Blend pela primeira vez, veremos a tela de boas vindas com as opes para abrir Exemplos (Samples), Help e Projetos (Projects). Iremos clicar em Projets e depois New Project. A tela para criao de projetos aparecer conforme figura abaixo, nela temos as opes de Silverlight e WPF (Windows Presentation Fundation), ambos os projetos trabalham com o padro XAML (Extensible Application Markup Language). O Padro Silverlight para ambiente Web, enquanto o WPF para aplicaes Desktop. Selecionada a opo Silverlight vamos marcar a opo Silverlight 3 Application + Website. Essa uma melhoria em relao a verso 2 que cria alm de criar o projeto do Silverlight, cria outro projeto com um Web Site. Para finalizar selecionaremos a linguagem que iremos trabalhar, no nosso exemplo iremos manter o C#. Aps clicar em OK, os dois projetos sero criados conforme a figura 2.
Codificando.net e-magazine
www.codificando.net
11
e-magazine
Vamos desenhar um quadrado, que ser utilizado futuramente na nossa animao. Clique na imagem da Caneta e segure por 2 segundos, isso far com que as duas ferramentas fiquem visveis (Figura 4). Iremos trabalhar com a caneta (Pen), clique nela e no espao em branco da tela clique em quatro pontos da tela at formar um retngulo de quatro lados, no ltimo ponto posicione o mouse em cima do primeiro ponto, o mouse ir mudar indicando o fechamento do retngulo.
Agora vamos criar nossa animao, o primeiro passo definir o tipo de Layout que iremos trabalhar. Clique em LayoutRoot com o boto direito (Figura 3), depois em Change Layout Type e selecione a opo Canvas. Essa a opo ideal para trabalharmos com desenhos e animaes.
Agora vamos alterar nosso retngulo para transform-lo em um quadrado. Pressione F11 duas vezes para exibir em modo SPLIT exibindo o cdigo do XAML e o visual e pressione F4 para ampliar a rea de trabalho do Blend (Figura 5). Tudo o que desenhado, escrito ou adicionado no modo visual codificado em XAML. No nosso exemplo duas tags foram criadas: <CANVAS> que a rea onde sero adicionados os nossos desenhos e <PATH> que o nosso retngulo. Iremos modificar a propriedade Data da TAG <PATH> para transformar nosso retngulo em um quadrado. A letra M significa MoveTo e a letra L significa LineTo, a letra z indica o fechamento do Path. A
Abr/ Mai - 2010
Codificando.net e-magazine
www.codificando.net
12
e-magazine
referncia completa para a sintaxe do Path encontra-se em http:// msdn.microsoft.com/en-us/library/ ms752293.aspx. Altere a propriedade para Data="M145,218 L260,218 L260,310 L145,310 z".
Vamos executar diversos tipos de animaes bsicas que o Blend permite. Vamos pressionar F4 novamente para exibir as guias Objects and Timeline e Properties. Na primeira gerenciamos o tempo das animaes, na segunda estaremos alterando as propriedades a serem alteradas durante a animao. Em Objects and Timeline clique no Path e altere a cor para azul. Agora clique no + em para criar um Storyboard (Figura 6), que nossa linha de tempo onde definimos todas as animaes, o blend trabalha com tempo em segundos, d o nome de Animacao para o nosso Storyboard e pressione OK.
Clique no 10 segundo, posio 10 da linha de tempo e vamos comear nossas animaes. A primeira mudar a cor para Vermelho. Na aba de Propriedades, no grupo Brushes digite 0 no B (Blue) e 255 no R (Red) (Figura 7). Essa animao que fizemos ColorAnimationUsingKeyFrames, voc pode verificar a modificao no XAML pressionando F11.
Codificando.net e-magazine
www.codificando.net
13
e-magazine
No sculo XVII Ren Descartes definiu os primeiros estudos sobre geometria cartesiana, estudos que definiam as transformaes bi-dimensionais, que so muito importantes para a computao grfica e que iremos ver na nossa animao. Vamos fazer agora o quadrado se movimentar para a direita 100 pixels. Esse tipo de animao definido como translao, que o deslocamento de um objeto no eixo x e/ou y a partir do seu ponto original. Vamos para o grupo transform, clique nas setas ao lado dos nomes dos grupos para faz-los encolher ou expandir, o grupo transform fica l em baixo, voc pode tambm usar a barra de rolagem. Digite 100 no X da propriedade Translate (Figura 8).
seu tamanho em 20%, para isso adicionamos o fator de 1,2 nos eixos x e y conforme figura 9. Finalmente clique no Play para ver a animao executando.
Pressione a tecla F11 para ver o cdigo XAML e observe a animao que criamos ela do tipo DoubleAnimationUsingKeyFrames e serve para alterar as propriedades do tipo Double e o cdigo que ir executar nossas animaes. Vimos aqui as trs animaes bidimensionais bsicas, explore as abas adicionais para descobrir outras possibilidades de animao. Estaremos explorando nas prximas matrias, outras tcnicas de animao com o StoryBoard e C#.
Codificando.net e-magazine
No prximo passo iremos fazer nosso objeto rotacionar. Clique na setinha da aba de rotao e informe 720 no campo de ngulo que ir fazer o nosso objeto girar no sentido horrio sobre o seu prprio eixo 720 graus. Finalmente iremos reduzir fazer a transformao de escala, que aumenta ou diminui um objeto usando o fator sobre o seu prprio tamanho, ou seja voc informa quanto quer multiplicar o tamanho atual pelo fator, no nosso exemplo iremos aumentar o
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
www.codificando.net
14
e-magazine
Com o lanamento do SQL Server 2008 R2 previsto para os prximos meses, nada mais justo do que explorar algumas de suas funcionalidades. Algumas coisas que esto bem interessantes no SQL Server 2008 R2 sua customizao para trabalhar com BI, um ponto que a Microsoft est investindo pesado para o lanamento da plataforma do SQL Server 2008 R2. Vendo esse investimento em Self-Service BI, pensei em escrever um artigo sobre o PowerPivot utilizando como dados as temperaturas que enfrentarei no MVP Global Summit 2010, na Microsoft em Redmond. Vou juntar a informao irrelevante das temperaturas dos lugares que visitarei, com um exemplo de criao e utilizao do PowerPivot e Excel 2010. No vou reescrever com as minhas palavras o que o PowerPivot, justamente porque o Zavaschi fez isso muito bem neste artigo e neste outro. Recomendo a leitura! Pra comear, os links que utilizei pra montar isso foram:
Montei tambm uma tabela no SQL Server 2008 R2, pra armazenar diretamente (isso significa que a forma mais rpida, e mais burra) de guardar estes dados. Eles sero utilizados s pra isso e no serviro pra mais nada. Mas como o objetivo s mostrar esses dados hoje, ento vou fazer assim mesmo! Fazendo um select simples na tabela, tenho o seguinte RowSet (figura 1):
Codificando.net e-magazine
timo, j tenho a tabela e j tenho os dados das temperaturas. Agora abrir o Excel 2010 e montar meu grfico das temperaturas.
www.codificando.net
15
e-magazine
Com o PowerPivot instalado, vou abrir o Excel 2010 j com o plugin instalado, e procurar a opo PowerPivot [1] no menu superior. Ao acessar esse menu, procurar o item PowerPivot window [2].
Agora esperar o ambiente de Workspace do PowerPivot carregar e comear a configurar as coisas. Quando se abre o PowerPivot Windows, essa tela abaixo apresentada, e onde se monta a brincadeira. Selecionamos a origem dos dados vindo do SQL Server, que o primeiro item do menu que aparece na figura 3.
Depois de preencher as credenciais e avanar pra prxima tela, existe a possibilidade de escrever uma query e testar, pra ver o retorno dela. Fazendo isso corretamente, um resultado como esse apresentado na figura 5.
Codificando.net e-magazine
Uma tela pra colocar as credenciais do banco, e demais informaes de acesso apresentada (figura 4).
Aps essa validao, s confirmar no boto OK e depois em Finish. O PowerPivot vai analisar a sua query e montar um relatrio em seu Workspace te apresentando o RowSet que retornou do banco com a facilidade de se trabalhar com o Excel 2010. Com os dados apresentados, possvel montar alguns relatrios com poucos cliques do mouse, utilizando todos os benefcios do Excel 2010. No exemplo vou montar
www.codificando.net
16
e-magazine
um nico grfico, selecionando Single PivotChart, que a segunda opo do item PivotTable.
Neste momento, o PowerPivot pergunta em qual Worksheet quero colocar o grfico que est selecionado, e ento, o grfico (sem nenhum dado ainda) apresentado, e as informaes que vieram do SQL Server 2008 R2 (ou qualquer outra fonte de dados selecionada) mostrado no TaskPanel. Agora que as informaes j esto de volta ao Worksheet do Excel 2010, s trabalhar normalmente. Isso timo pros Gerente / Diretores e Presidentes (no o da republica, mas os de verdade) veja na figura 7.
A informao da temperatura importante pra mim, pra eu me planejar com a quantidade de roupas que vou levar, mas a do PowerPivot bem legal pra quem trabalha com desenvolvimento de relatrios gerenciais. Fica ai a dica! 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
17
e-magazine
Aplicaes em n camadas so desenvolvidas de forma distribuda, onde cada camada tem sua responsabilidade dentro do contexto. Para um modelo de aplicao Web so comumente usadas 3 camadas: Presentation(Apresentao), Business (Lgica do negcio) e Data(Responsvel pelas transaes com o banco da dados). Para finalizar esta srie de artigos, vamos desenvolver agora a camada de apresentao(Presentation), que ser a aplicao web que vai utilizar os recursos das camadas criadas para fazer o gerenciamento de clientes.
Esse novo projeto no ser mais do tipo Class Library, e sim um projeto do tipo ASP.NET Web Application, que ser nossa aplicao. Como o foco desse artigo o entendimento de aplicaes em N camadas, vamos desenvolver a camada de apresentao utilizando um projeto do tipo ASP.NET Web Application, mas a mesma poderia ser desenvolvida utilizando outros tipos de projetos oferecidos pela tecnologia.
Codificando.net e-magazine
Iremos adicionar a camada Presentation em nosso projeto da mesma maneira que aprendemos a adicionar as outras camadas. Para adicionar a camada ao projeto, vamos clicar com o boto direito na soluo e adicionar um novo projeto.
Figura 3: projeto do tipo ASP.NET Web Application.
www.codificando.net
18
e-magazine
Figura 6: adicionando referncias das camadas Entity e Business na camada Presentation(Add Reference > Projects > OK).
Para evitar erros na hora da execuo da aplicao, vamos seta-l como StartUp de nosso projeto.
A camada Presentation no precisa de uma referncia da camada Data, j que a camada Business responsvel pela comunicao entre elas. Listando dados
Codificando.net e-magazine
A primeira coisa a ser feita construirmos uma pgina onde sero listados todos os clientes cadastrados no banco de dados. Essa pgina ser o WebForm Default.aspx que foi criado junto com o projeto, nesse WebForm vamos adicionar um componente GridView que ir receber como DataSource o mtodo listar da classe Clientes pertencente a camada Business.
Para a camada Presentation reconhecer uma entidade da camada Entity, assim como os objetos da camada Business, necessrio adicionar as referncias das cama-
www.codificando.net
19
e-magazine
Para implementar a codificao da pgina tecle F7 com o WebForm Default.aspx aberto, a janela com o Code-Behind ser aberta.
Figura 7: adicionando o componente GridView ao WebForm Default.aspx (Tollbox > Data > GridView).
Para que as colunas do GridView no sejam criadas automaticamente vamos atribuir na propriedade AutoGenerateColumns o valor "False". Vamos ento, customizar o GridView adicionando um BoundField para o Nome e outro para o Email, vamos adicionar um LinkButton com um link para edio do registro, para isso vamos utilizar o TemplateField. Vamos utilizar tambm no WebForm, um Button para adicionar um novo Cliente a base de dados. Depois disso o cdigo deve ficar assim:
Codificando.net e-magazine
Vamos rodar a aplicao e se deu tudo certo at aqui, a pgina ser exibida:
www.codificando.net
20
e-magazine
Visualizao detalhada do dados Para a edio e visualizao dos registros, vamos criar um novo WebForm, onde vamos ter os detalhes de cada Cliente cadastrado no banco.
Codificando.net e-magazine
Figura 11: Adicionando um novo WebForm ao projeto (Add > New Item > Web Form).
Com o WebForm criado, podemos adicionar os componentes que vamos utilizar na edio dos dados.
www.codificando.net
21
e-magazine
Page_Load
Alterar
Codificando.net e-magazine
Salvar
www.codificando.net
22
e-magazine
Excluir
Tratamento de erros, o uso de boas prticas e outras funcionalidades que voc usaria no desenvolvimento de sua aplicao em N camadas. Participe, escreva seu artigo e compartilhe conhecimento.
Aprofunde seus conhecimentos sobre esse tema na comunidade ASP.NET Para saber mais:
Viso geral de aplicativo de dados n camadas
Figura 18: implementao do mtodo btnExcluir_Click.
Confira tambm:
Aplicaes em N Camadas com ASP.NET - PARTE I Aplicaes em N Camadas com ASP.NET - PARTE II Aplicaes em N Camadas com ASP.NET - PARTE III
Conclumos que ao final de mais uma etapa, teremos todas as camadas implementadas e funcionando de forma independente. Lembrando que o objetivo desse artigo foi demonstrar o funcionamento de aplicaes em N camadas, alguns detalhes como tratamento de erros e outras funcionalidades foram deixadas de lado para no perdermos o foco do entendimento. Fica aqui ento a dica: Como voc implementaria cada camada de seu projeto?
Graduado em Cincia da Computao pela Universidade Jos do Rosrio Vellano (UNIFENAS), em Alfenas MG, trabalha com desenvolvimento de aplicaes Web e Windows Forms utilizando a tecnologia .Net. Moderador da comunidade Desenvolvendo para Web, colaborador da comunidade Codificando.Net e editor da revista eletrnica Codificando .Net e-Magazine.
Codificando.net e-magazine
|
www.codificando.net
23
e-magazine
Introduo
Entendendo ORM Quando usar ORM? Como escolher um ORM? Por que criar seu prprio ORM? Como criar seu prprio ORM O que fazer aps criar seu prprio ORM?
guagem SQL. Outros problemas so incompatibilidade de tipos entre a linguagem e o SQL, diferenas estruturais, manipulativas e no tratamento de transaes. Entenda melhor as diferenas: Encapsulamento Sistemas usando OOP so projetados para encapsular os dados dentro de objetos, escondendo o seu funcionamento interno. Quando estes sistemas utilizam DBMS, os dados ficam expostos de forma que o encapsulamento quebrado, pois o banco de dados exposto publicamente, sem restries de acesso (geralmente s se utiliza proteo por login / senha, tornando todas as tabelas pblicas para usurios autenticados). Diferenas de tipos de dados A maior diferena entre sistemas que desenvolvidos com OOP e o uso de DBMS, est no sistema de tipos. No h suporte por parte dos DBMS para tipos por referncia (ponteiros), enquanto a maioria das linguagens usadas em OOP faz de ponteiros um de seus recursos essenciais (algumas deixam ponteiros apenas para uso interno como o Java, outras oculAbr / Mai - 2010
Objetivo Capacitar o leitor a decidir qual ferramenta de ORM deve usar e se necessrio, criar sua prpria ferramenta de ORM Introduo O Mapeamento Objeto-Relacional (ORM Object-relational Mapping ou O/R Mapping) uma tcnica usada para solucionar o problema da impedncia entre sistemas usando programao orientada a objetos (OOP Object Oriented Programming) e gerenciadores de bancos de dados relacionais (DBMS Data Base Management System). A impedncia causada porque sistemas que usam OOP, quando acessam um DBMS, precisam usar de tcnicas procedurais (o que quebra boa parte do conceito de OOP) devido s limitaes da lin-
Codificando.net e-magazine
|
www.codificando.net
24
e-magazine
tam boa parte dos ponteiros como o .NET e o Delphi, e uma boa parte usa explicitamente ponteiros como o C++). A implementao de tipos bsicos ou escalares (como int, char, long, bool) varia de linguagem para linguagem e, algumas vezes, pode ser complicado traduzir entre tipos na linguagem de OOP e no DBMS. Diferenas estruturais e de integridade Acesso aos dados em OOP geralmente so feitos por meio de interfaces que provem acesso aos dados encapsulados, enquanto os DBMS usam de views para restringir o acesso a dados e manter a integridade. A manuteno de integridade diferente nos dois modelos, em OOP so utilizadas excees com escopos protegidos (geralmente com try ... catch) e eventos, enquanto em DBMS usa de restries (constraints) e chaves estrangeiras (foreign keys) para manter a integridade. Enquanto um sistema usando OOP aplica conceitos de classes, herana e polimorfismo, estas caractersticas no so suportadas por DBMS. H tambm o problema de que em OOP os dados so organizados hierarquicamente e em DBMS so organizados em tuplas com relaes no hierrquicas. Diferenas na manipulao Algumas das maiores diferenas esto na manipulao de dados, pois DBMS tm um conjunto pequeno de operadores para usar em operaes de busca e so otimizados para buscar tuplas de da-
dos. As linguagens de OOP, por sua vez, trabalham os dados em listas, colees e hash-tables utilizando-se de manipulao de baixo-nvel atravs de operaes imperativas e sub-linguagens para busca (como o LinQ). Diferenas nas transaes No aspecto de transaes, temos que as linguagens que suportam OOP, geralmente, no trabalham com transaes no modelo ACID, visto que a maioria das transaes envolve manipulao de dados simples em campos ou propriedades nos objetos. Uma das tcnicas para minimizar estes problemas o uso de ferramentas de Mapeamento Objeto-Relacional que permitam o programador aproveitar os recursos de OOP, mas de forma que no seja preciso preocupar-se com o funcionamento interno do DBMS ou com comandos em SQL. Entendendo ORM
Codificando.net e-magazine
As ferramentas de ORM geralmente se apresentam como bibliotecas que so usadas durante o desenvolvimento e elas usam diversas abordagens para resolver os problemas de impedncia ObjetoRelacional. As principais abordagens so as que seguem:
A abordagem de gerao de SQL a mais simples de todas. H uma classe ou funo de persistncia que deve ser usada para gerar um SQL a partir de par-
www.codificando.net
25
e-magazine
metros que sero colocados no template escolhido. Esta abordagem simplesmente esconde o cdigo SQL no sistema, reservando todos os comandos de banco de dados a alguns arquivos de configurao, mas no h mapeamento entre os objetos e os templates.
Mapeamento definido pelo usurio via arquivo de configurao
nas nos objetos. uma abordagem no invasiva pois permite que os objetos tenham sua prpria linha de herana, no interferindo no modelo do sistema.
Herana
Trabalhando um pouco mais no cdigo de gerao de SQL, e incluindo arquivos de configurao para o mapeamento, temos a possibilidade de no precisar escolher qual template usar quando chamamos as funes ou classes de persistncia. Esta abordagem facilita a codificao, pois partir do prprio objeto a biblioteca pode inferir quais so os parmetros.
Mapeamento definido pelo usurio em cdigo via atributos ou anotaes
Esta abordagem rpida e simples de implementar, mas por obrigar os objetos que sero persistidos a herdarem suas caractersticas de um objeto comum, muito do modelo do sistema OOP perdido. Em compensao, se ganha em facilidade ao codificar, pois as funes de persistncia tambm so herdadas e desta forma no h a necessidade de chamar funes ou classes especficas para persistir os dados.
Reflexo em POCOs (Plain Old C# Objects) ou POJOs (Plain Old Java Objects)
Alguns programadores evitam usar arquivos de configurao, especialmente em XML e, com o surgimento de funcionalidades como atributos em .NET e anotaes em Java, surgiu a necessidade de mapeamento de objetos sem arquivos de configurao. Estas bibliotecas usam recursos de reflexo para identificar o mapeamento de objetos e podem usar trs abordagens para isto:
Utilizando-se dos recursos da linguagem no seu limite, algumas abordagens conseguem fazer com que tenhamos POCOs ou POJOs, sendo persistidos sem muitas vezes nem precisar dos atributos ou anotaes. Estas bibliotecas mostram-se as mais flexveis em relao a modelagem usada em OOP, pois h a possibilidade de unir o mapeamento seguindo padres, sem precisar herdar de uma classe comum e ainda chamar a funo de persistncia diretamente do prprio objeto.
Mapeamento seguindo um padro prdefinido
Codificando.net e-magazine
Nesta abordagem a funo ou classe de persistncia fazem uso de reflexo procurando por atributos especficos que identificam quais so as tabelas e colu-
Algumas bibliotecas preferem definir um padro de nomenclatura para as classes e campos de forma que fique simples mapear para tabelas e colunas. Caso haja excees, necessrio definir o
www.codificando.net
26
e-magazine
mapeamento de forma manual via arquivo ou anotaes e propriedades. Nota do autor Os POCOs e POJOs so objetos simples, que no herdam de nenhuma classe da biblioteca em questo nem implementam nenhuma interface especfica para a persistncia. Quando usar ORM?
Pessoalmente, sempre que fao uma aplicao que usa banco de dados, eu fao questo de usar uma ferramenta de ORM. Eu gosto de manter a estrutura do modelo usando OOP nas aplicaes em que trabalho. Mas, opinies pessoais parte, ferramentas ORM devem ser usadas apenas quando h a necessidade de manter ou criar uma hierarquia de classes em OOP mais complexa, e ainda assim persisti-la usando DBMS com SQL. importante notar, que sempre que o desempenho for um requisito essencial, prudente evitar o uso de ferramentas ORM, pois elas agregam certa quantidade de processamento a mais, em cada ao que tomar no banco de dados. Como escolher um ORM?
Alguns recursos podem ser essenciais para sua aplicao, assim, essencial uma boa escolha antes de comear a usar uma ferramenta de ORM. Alguns recursos so importantes de serem avaliados no processo de escolha da ferramenta certa para cada projeto. importante perguntar-se:
A ferramenta suporta polimorfismo e herana? Quaisquer tipos de relao podem ser mapeados (1-1, 1-n, m-n ou nn)? H como usar transaes? Funes agregadoras como SUM, AVG, MIN, MAX e COUNT tm seus equivalentes na ferramenta de ORM? Agrupamento e ordenamento so passveis de ser controlados? Quais DBMS so suportados? H como enviar diretamente comandos SQL se for necessrio (pode-se precisar de queries mais complexas ou usar funes especficas do DBMS)? Store Procedures e views so mapeadas? A ferramenta usa uma linguagem prpria de buscas de objetos (OQL, OPath ou LinQ)? A ferramenta suporta Databinding? JOINS e WHERE so suportados? Como a ferramenta trata a concorrncia no acesso aos dados? H alguma espcie de cache de dados em memria? Como o suporte para tipos de dados especficos do DBMS (como identity, sequences, generators, GUIDs, auto-incrementos)? H como mapear mltiplos objetos a partir de uma mesma tabela? A ferramenta implementa lazy loading? Tem como enviar mais de um comando para o DBMS (algumas ferramentas implementam o sistema de commits e rollbacks em memria ou bulk updates para otimizar o envio de comandos ao DBMS)?
Abr / Mai - 2010
Codificando.net e-magazine
|
www.codificando.net
27
e-magazine
Como o desempenho da ferramenta? Como a ferramenta trata referncias circulares? A ferramenta suporta objetos serializveis?
estes recursos em C#, fiquei curioso e me senti desafiado a desenvolver minha prpria ferramenta de ORM. Desta forma criei o C# Data Objects ( CsDO http://www.codeplex.com/CsDO ). Como criar seu prprio ORM
Por que criar seu prprio ORM? Levando em considerao as opes de ORM mais difundidas em .NET, logo aps o lanamento do Framework .NET 2.0, surgiu uma necessidade e uma curiosidade, qual a dificuldade produzir minha prpria biblioteca de ORM de acordo com o que eu considerava mais produtivo em OOP. Levei em considerao os seguintes recursos que no encontrei nas ferramentas ORM da poca (pelo menos no todos na mesma ferramenta):
O primeiro passo para criar seu prprio ORM decidir qual abordagem ir seguir. Para criar o C# Data Objects (CsDO), eu e a equipe que me auxiliou no desenvolvimento decidimos por usar a abordagem de Herana com reflexo para termos configuraes em Properties do C#. Em seguida importante modelar a estrutura de Interfaces e Classes para fazer o controle do Mapeamento Objeto Relacional (Veja Figuras 1.1 a 1.4).
Configurao da conexo de banco de dados por meio do web.config ou app.config Mapeamento automtico dos nomes das classes para tabelas Mapeamento automtico dos nomes de propriedades pblicas para colunas Possibilidade especificar propriedades que no devem ser mapeadas propriedades Configurao de mapeamento de por meio de atributos do .NET Possibilidade de executar no .NET 1.x / 2.0 e no Mono Mapeamento transparente de Foreign Keys Otimizao de buscas por meio da Primary Key
Codificando.net e-magazine
Como no foi possvel, na poca, encontrar uma biblioteca de ORM com todos
www.codificando.net
28
e-magazine
DO optamos por criar um classe usando o padro Singleton ( http:// pt.wikipedia.org/wiki/Singleton ). Agora toda a base est pronta, e devidamente testada o CsDO usou a metodologia TDD ( http://en.wikipedia.org/ wiki/Test-driven_development ) no desenvolvimento e teve muitos testes unitrios para garantir a integridade das aplicaes que o usam. Chegou o momento de criar o mapeamento propriamente dito. Como a escolha no CsDO foi de usar a herana para definir que classes devem ser mapeadas, a implementao resumiu-se em codificar um gerador de comandos SQL partir das propriedades do objeto por meio de reflexo ( http:// pt.wikipedia.org/wiki/Reflexo_ (programao) ).
Assim, definimos uma Interface para o acesso ao DBMS ( IDataBase ) onde possvel manter a conexo ( getConnection, open e close ) e executar comandos ( getCommand e getDataAdapter ). Para cada DMBS ser criado um Driver que implementa as especificidades de cada servidor. Em seguida, necessrio definir como as configuraes do mapeamento seriam inseridas no sistema, a escolha no CsDO foi de usar atributos em classes para mapear tabelas e em propriedades para mapear colunas e chaves primrias. Para evitar uma quantidade muito grande de configuraes desnecessrias, foi adotado o padro de que classes que descendem de DataObject automaticamente tm mapeado seu nome para o nome da tabela e o nome de suas propriedades pblicas para o nome das colunas, qualquer exceo deve ser configurada usando atributos. O prximo passo criar uma forma de acessar diretamente o DBMS para fazer queries mais complexas, caso haja necessidade (usadas geralmente em relatrios, grficos ou em anlise de dados). No Cs-
Codificando.net e-magazine
|
Figura 2. Comparao de performance entre concatenao de Strings (linha azul), StringBuilder com construtor padro (linha vermelha) e StringBuilder alocando memria no tamanho correto (linha verde).
Para gerar os comandos SQL muitas strings precisam ser concatenadas, assim, a escolha natural usar StringBuilder (Ver Figura 2) para minimizar o consumo de memria e aumentar a performance da biblioteca. As Listagens 1.1 a 1.5 mostram uma verso simplificada do
Abr / Mai - 2010
www.codificando.net
29
e-magazine
cdigo necessrio para gerar o SQL de cada comando DML ( http:// pt.wikipedia.org/wiki/ Linguagem_de_manipulao_de_dados ). Os comandos devem ser usados da seguinte forma:
O delete e o update devem ter sempre a chave primria com contedo no zerado, caso contrrio ser feito um WHERE com todos os campos, para garantir que apenas aquele objeto ser atualizado; O insert deve ter pelo menos a chave primria com contedo no zerado; Para encontrar um objeto deve-se preencher um objeto novo com os campos a serem buscados e chamar o mtodo find, se retornar verdadeiro h registros vlidos para esta busca, em seguida deve-se chamar fetch enquanto ele retornar verdadeiro (como num DataReader) para preencher o objeto em questo com o valor de cada registro da busca.
1. 2. 3. 4. 5.
Para finalizar, algumas funes de suporte precisam ser desenvolvidas: getColumnProperties, formatValue, assertField e loadFields . Estas funes servem respectivamente para carregar as configuraes de uma coluna, formatar os dados para colocar na string SQL, validar os dados de uma coluna e carregar os dados das queries nos objetos e podem ser vistas nas Listagens 2.1 a 2.4 . Alguns desafios devero ser superados para a primeira verso de seu prprio ORM, seguem os desafios com as solues implementadas no CsDO:
Mapear objetos nulos para o banco de dados A Listagem 2.2 mostra como o CsDO resolve o problema, identificando Nullable Types e mapeando para NULL no DBMS; Mapear nulos do banco de dados para tipos que no aceitam nulos Tipos como int, long, float, double, char, string, DateTime e bool no aceitam nulos como padro e as solues foram as seguintes: int, long, float e double : mapear para 0; char : mapear para o caractere 0x0; string : mapear para String.Empty; bool : mapear para false; DateTime : mapear para 01-01-01 00:00:00; Mapear datas mapear usando ToString("yyyyMMdd HH:mm:ss"); Otimizar as queries identificamos campos ativos (no-nulos) e apenas estes formam as queries, desta forma dmininuimos o processamento no DBMS e no ORM; Identificar objetos alterados Atualemente apenas identifica campos nulos e preenchidos; Mapear chaves estrangeiras As chaves estrangeiras, no CsDO, so mapeadas automaticamente para as classes, desde que o tipo da propriedade seja o tipo da classe da tabela em questo. Ao gravar, o CsDO grava a chave primria da tabela secundria no campo de chave estrangeira e ao ler, carrega o objeto em questo com o registro da tabela secundria; Evitar redundncia, principalmente quando a tabela faz auto-referncia O CsDO tem uma propriedade
Codificando.net e-magazine
|
www.codificando.net
30
e-magazine
pblica no persistida chamada Depth que tem como valor padro 3, a cada leitura de chave estrangeira ele debita 1 do nvel de profundidade, o que limita em 4 nveis de reentrncia (isto pode ser configurado objeto a objeto se necessrio); Comparao entre objetos mapeados Optou-se por comparar apenas as chaves primrias, por isto, foi feita a sobrecarga dos operadores de comparao e as funes ToString, Copy e GetHashCode;
&& !data.Equals("NULL")) { values.Append(data); values.Append(","); } } values.Remove(values.Length -1, 1); values.Append(")"); sql.Append(" ("); sql.Append(ActiveFields); sql.Append(")"); sql.Append(values); int i=0; Persisted = (i == 1); return (Persisted);
Codificando.net e-magazine
PropertyInfo [] props = GetType ().GetProperties(); foreach (PropertyInfo propriedade in props) { bool primaryKey = false; bool persist = true; string name = null; getColumnProperties(propriedade, ref name, ref persist, ref primaryKey); if (!persist) continue; if (name == null)
www.codificando.net
31
e-magazine
sql.Append(clausule);
bool result = false; if (propriedade.PropertyType == typeof (System.String)) { operador = " LIKE "; } search = formatValue(propriedade); if (primaryKey && (search != null) && !search.Equals("'00010101 00:00:00'") && !search.Equals("NULL")) { StringBuilder item = new StringBuilder(); item.Append("("); item.Append(name); item.Append(operador); item.Append(search); item.Append(")"); hasWhere = true; clausule.Append(item); clausule.Append(" AND "); } else { values.Append(name); values.Append("="); values.Append(search); values.Append(","); } } if (!values.ToString().Equals("")) values.Remove(values.Length - 1, 1); if (hasWhere) { clausule.Remove(clausule.Length - 4, 4); sql.Append(Table); sql.Append(" SET "); sql.Append(values); sql.Append(" WHERE "); if (hasWhere) { int i = DataBase.New().Exec(sql.ToString()); Persisted = (i >= 1); result = (i >= 1); } else result = false; return result;
Codificando.net e-magazine
|
www.codificando.net
32
e-magazine
if (propriedade.PropertyType == typeof (System.String)) operador = " LIKE "; search = formatValue(propriedade); if ((search != null) && !search.Equals("0")) { StringBuilder item = new StringBuilder(); item.Append("("); item.Append(name); item.Append(operador); item.Append(search); item.Append(")"); hasWhere = true; clausule.Append(item); clausule.Append(" AND "); } if (primaryKey) break; } if (hasWhere) { clausule.Remove(clausule.Length - 4, 4); sql.Append("FROM "); sql.Append(Table); sql.Append(" WHERE "); sql.Append(clausule); } bool result = false;
StringBuilder sb = new StringBuilder ("SELECT "); StringBuilder clausule = new StringBuilder (); string search = ""; string operador = ""; bool hasWhere = false; PropertyInfo [] props = GetType ().GetProperties(); foreach (PropertyInfo propriedade in props) { bool primaryKey = false; bool persist = true; string name = null; getColumnProperties(propriedade, ref name, ref persist, ref primaryKey); if (!persist) continue; if (name == null) name = propriedade.Name; if (propriedade.PropertyType == typeof (bool) || propriedade.PropertyType == typeof (System.Boolean)) continue; operador = " = ";
Codificando.net e-magazine
if (hasWhere) { int i = DataBase.New().Exec(sql.ToString()); result = (i == 1); } else result = false; return result;
if (propriedade.PropertyType == typeof (System.String)) operador = " LIKE "; search = formatValue(propriedade); if (search != null && !search.Equals("0") && !search.Equals("'00010101 00:00:00'") && !search.Equals("NULL"))
www.codificando.net
33
e-magazine
{ StringBuilder item = new StringBuilder(); item.Append("("); item.Append(name); item.Append(operador); item.Append(search); item.Append(")"); hasWhere = true; clausule.Append(item); clausule.Append(" AND "); } if (primaryKey && (search != null) && ! search.Equals("0") && !search.Equals("00010101 00:00:00")) break; } if (hasWhere) { clausule.Remove(clausule.Length - 4, 4); sb.Append(Fields); sb.Append(" FROM "); sb.Append(Table); sb.Append(" WHERE "); sb.Append(clausule); } else { sb.Append(Fields); sb.Append(" FROM "); sb.Append(Table); } dt = DataBase.New().QueryDT(sb.ToString ()); return true;
Codificando.net e-magazine
www.codificando.net
34
e-magazine
{ valueObj = (property.GetValue(this, null) != null) ? property.GetValue(this, null) : "NULL"; } if (valueObj != null) { CultureInfo culture = new CultureInfo("enUS"); IFormatProvider formatNumber = culture.NumberFormat; StringBuilder sb; switch (valueObj.GetType().ToString()) { case "System.Boolean": case "System.Nullable`1 [System.Boolean]": return ((Boolean)valueObj ? "'T'" : "'F'"); case "System.Char": case "System.Nullable`1[System.Char]": sb = new StringBuilder("'"); sb.Append(((Char)valueObj).ToString()); sb.Append("'"); return sb.ToString(); case "System.DateTime": case "System.Nullable`1 [System.DateTime]": sb = new StringBuilder("'"); sb.Append(((DateTime) valueObj).ToString("yyyyMMdd HH:mm:ss")); sb.Append("'"); return sb.ToString(); case "System.Int16": case "System.Nullable`1[System.Int16]": return ((Int16)valueObj).ToString (formatNumber); case "System.Int32": case "System.Nullable`1[System.Int32]": return ((Int32)valueObj).ToString (formatNumber); case "System.Int64": case "System.Nullable`1[System.Int64]": return ((Int64)valueObj).ToString (formatNumber); case "System.Decimal": case "System.Nullable`1 [System.Decimal]": return ((Decimal)valueObj).ToString (formatNumber); case "System.Double": case "System.Nullable`1[System.Double]" : return ((Double)valueObj).ToString (formatNumber); case "System.Single": case "System.Nullable`1[System.Single]": return ((Single)valueObj).ToString (formatNumber); case "System.String": sb = new StringBuilder("'"); sb.Append(valueObj.ToString()); sb.Append("'"); return sb.ToString(); default: if (valueObj.GetType().IsSubclassOf (typeof(DataObject))) return formatObject(((DataObject) valueObj).getPrimaryKey()); else return valueObj.ToString(); } } return "NULL";
Listagem 2.3 Cdigo do loadFields
Codificando.net e-magazine
www.codificando.net
35
e-magazine
} else { val = assertField(null,
bool persist = false; foreach (PropertyInfo propriedade in props) { string name = null; getColumnProperties(propriedade, ref name, ref persist); if (!persist) continue; if (String.IsNullOrEmpty(name)) name = propriedade.Name; object val = dr[name]; if (propriedade != null) { #region Property holds a Foreign Key if (propriedade.PropertyType.IsSubclassOf (typeof(DataObject)) && !val.GetType().IsSubclassOf(typeof (DataObject))) { if (val == null || val.ToString().Equals ("0") || val.GetType() == typeof(DBNull)) { propriedade.SetValue(this, null, null); continue; } DataObject obj = (DataObject) propriedade.GetValue(this, null); if (obj == null) { if (depth > 0) { obj = (DataObject) Activator. CreateInstance (propriedade.PropertyType); obj.depth = this.depth - 1;
propriedade); propriedade.SetValue(this, val, null); continue; } } if (obj.PrimaryKeys.Count > 0) { ((PropertyInfo)obj.PrimaryKeys[0]). SetValue(obj, val, null); obj.find(); obj.fetch(); PropertyInfo propriedade = obj.PrimaryKeys[0]; bool nullObject = false; if (propriedade != null) { object col = propriedade.GetValue(this, null); if (col != null) nullObject = col.ToString(). Equals(val.ToString()); else return nullObject = col == val; } else throw new CsDOException ("Field '" + obj.PrimaryKeys[0].Name + "' not found!"); if (!nullObject)
Codificando.net e-magazine
|
www.codificando.net
36
e-magazine
propriedade.SetValue(this, null, null); else propriedade.SetValue(this, obj, null); } else throw new CsDOException("Class '" + propriedade.PropertyType + "' has no Primary Key!"); continue; } #endregion else #region Property holds data { val = assertField(val, propriedade); propriedade.SetValue(this, val, null); continue; } #endregion } } Persisted = true; return true; } return false;
if (val != null && (val.GetType ().IsSubclassOf(typeof(DBNull)) || val.GetType() == typeof(DBNull))) { val = null; } else if (nullableType == typeof(bool)) { if (val.ToString().ToUpper().Equals("T") || val.ToString().ToUpper().Equals ("TRUE")) val = (Boolean)true; else val = (Boolean)false; } else if (nullableType == typeof(float) && val.GetType() == typeof(double)) { val = float.Parse(((double)val).ToString()); } else if (nullableType == typeof(int) && val.GetType() == typeof(long)) { val = int.Parse(((long)val).ToString()); } return val;
Codificando.net e-magazine
Atualmente o projeto do CsDO (que tem o cdigo aberto) est estvel e tem tido poucas atualizaes mas aps a construo do ORM, e alguns projetos reais usando a biblioteca que voc construir, algumas necessidades surgiro. Este o momento que voc deve reavaliar o seu projeto tendo em vista as tecnologias que esto surgindo. No caso do CsDO, aps algum tempo, surgiram algumas tecnologias como LinQ, a cache de objetos Velocity, Nulable Types, Extension Methods e o Entity Framework. Reavaliando o projeto, h
www.codificando.net
37
e-magazine
Desobrigar a herana, para possibilitar o uso de POCOs; Usar o modelo de deteco de alteraes similar ao do Entity Framework; Dar suporte ao LinQ e LINQ to SQL; Dar suporte completo a Nullable Types (atualmente h suporte parcial); Dar suporte cache de objetos Velocity (atualmente h uma cache implementada no prprio projeto); Dar suporte a DataSources, DataSets e Transfer Objects; Permitir o uso de transaes; Permitir o envio de vrios comandos em Batch ao DBMS;
Concluso Apesar de termos inmeras opes para fazer Mapeamento Objeto-Relacional, algumas vezes, preciso criar sua prpria soluo. O grande desafio saber quando optar por construir uma ferramenta ao invs de usar uma pronta e compreender como tomar as decises crticas para o projeto ter sucesso. Neste artigo tentei passar um pouco do conhecimento neste domnio de aplicao para que outros possam, eventualmente, criar suas ferramentas de ORM proprietrias ou novos projetos de cdigo aberto. Quaisquer dvidas ou sugestes, sinta-se livre para comentar e / ou entrar em contato.
Codificando.net e-magazine
|
www.codificando.net
38
e-magazine
Ol pessoal, como prometido hoje apresentaremos, como consumir os relatrios, bem como apresentaremos outros exemplos com funcionalidades incrveis, imperdvel. 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/, bom divertimento. Parte V remote mode consumindo relatrios Consumindo o relatrio Relatrios hospedados no RS podem ser consumidos sob demanda, ou entregues via servio um de delivery. No cenrio mais comum, consumo sob demanda, o RS disponibiliza via Report Manager (URL, http://<servidor>/Reports, onde <servidor> corresponde ao nome ou endereo IP, da estao no qual o reporting services se encontra, se for na sua estao de trabalho localhost, tambm funciona.) os relatrios para visualizao, outra maneira de visualizao dos relatrios atravs do nosso j conhecido controle ReportViewer. Para o servio de entrega dos relatrios, o RS dispe de um servio de assinatura que vere-
mos mais adiante. Controle reportviewer Para interao dos relatrios com os clientes, temos o controle ReportViewer, disponvel no visual Studio, em duas verses uma para web e outra para Windows forms. Com ele possvel disponibilizar para as aplicaes um conjunto de funcionalidades tais como:
Exportao dos dados nos formatos Excel, PDF, CSV, TIFF, XML Suporte a impresso e visualizao de impresso do relatrio Rica Interatividade com navegao, document map, bookmarks e ordenao Pesquisa de texto no corpo do relatrio Zoom Permite validaes de parmetros customizados
Codificando.net e-magazine
Exemplos de relatrios A seguir implementaremos alguns relatrios para exemplificar o que j vimos at ento, bem como alguns recursos que veremos com os relatrios que criareAbr/ Mai - 2010
www.codificando.net
39
e-magazine
mos. Nossos exemplos so baseados no modelo de dados apresentado na figura 2.3 que relaciona pedidos, itens de pedido, produtos e vendedores. Tentaremos aqui construir alguns exemplos de modo a complementar os exemplos criados nos relatrio Local Mode, com algumas funcionalidades especificas tais como parmetros multivalorados com datasets, bem como funcionalidades no exploradas tais como relatrios Matrix e uso de parmetros na formatao dos relatrios. Relatrio tabular - com uso de parmetros para formatao Nesse exemplo criaremos um relatrio que nos permite visualizar a relao de produtos, seu total em estoque e valor unitrio. A grande novidade aqui fazer uso de parmetros para formatao do relatrio, onde o usurio, de duas formas distintas, especifica quais colunas gostaria de visualizar. O relatrio tambm faz uso de formatao condicional atravs de uma funo do relatrio (tab Code, das propriedades do relatrio) para selecionar que imagem exibir conforme o valor da quantidade em estoque do produto. Criando o Relatrio Esse relatrio exibe as colunas com o nome, total em estoque (com uma imagem) e valor unitrio de cada produto. Primeiro Passo: Construo do DataSet. Para criao do DataSet, acessamos a tab Data do nosso ambiente de desenvolvimento e criamos um novo DataSet com as seguintes propriedades:
Segundo Passo: Criao e modelagem do Relatrio. Incluiremos um novo relatrio em nosso projeto chamado TBEstoqueProdutos, Usando um objeto Table da toolbox dos relatrios criaremos a estrutura do relatrio formatado conforme a figura 3.15 (destaque para o objeto Image):
Nas propriedades do relatrio, tab Code,criaremos uma funo que ser utilizada para formatao da nossa imagem, essa funo tem o seguinte codificao (listagem 1):
Public Shared Function GetImage(ByVal Estoque As Integer) As String If Estoque > 100 GetImage= "happy.jpg" Else GetImage= "sad.jpg" End If End Function
Listagem 1 - Funo de formatao da imagem.
Codificando.net e-magazine
|
Certifique-se de incluir as duas imagens no projeto. E especificar no objeto image a propriedade Source igual External, e
Abr/ Mai - 2010
www.codificando.net
40
e-magazine
Value igual seguinte expression : =Code.GetImage(Fields! QT_ESTOQUE.Value) Terceiro Passo: Criar os parmetros Nosso relatrio disponibiliza para os usurios a possibilidade de exibir/ocultar suas colunas, para tal criamos os parmetros ExibePreco e coluna com as propriedades descritas na tabela a seguir:
Nome: Data Type: Prompt Nome: Data Type: Prompt Atributo: Available values ExibePreco Boolean Exibe Valor Unitrio ? Coluna String Exibir Colunas Multi-value Non-queried: Produto (1) Estoque(2)
Nesse exemplo criaremos um relatrio que correlaciona por dia, os vendedores e suas respectivas vendas, apresentando por produto, a quantidade em estoque, bem como o valor da venda. Aqui usaremos um dos recursos mais poderosos dos relatrios que o componente Matrix da caixa de ferramentas, utilizado para agrupamentos e totalizaes das informaes. Primeiro Passo: Construo do DataSet. Para criao DataSet, acessamos a tab Data do nosso ambiente de desenvolvimento e criamos um novo DataSet com as seguintes propriedades:
Nome: Comm and Type: Query string: Vendas Text
Quarto Passo: Configurar Colunas Finalmente, configuramos as colunas do nosso relatrio para serem exibidas conforme os parmetros anteriormente criados. Para tal especificamos as propriedades Visibility Hidden das colunas de Produto e Estoque respectivamente com as seguintes instrues em nosso editor de expressions:
=InStr(Join(Parameters!coluna.Value,", "),"1") = 0 e =InStr(Join(Parameters!coluna.Value,", "),"2") = 0
Codificando.net e-magazine
Select p.id_pedido, p.dt_pedido, p.id_vendedor, v.no_vendedor , pr.ds_produto ,sum(pr.qt_estoque) as 'em estoque' ,sum(pr.vl_preco*qt_produto) as 'valor venda' from tb_pedido p inner join tb_itens_pedido i on p.id_pedido = i.id_pedido inner join tb_produto pr on i.id_produto = pr.id_produto inner join tb_vendedor v on v.id_vendedor = p.id_vendedor group by p.id_pedido, p.id_vendedor, v.no_vendedor,pr.ds_produto,p.dt_pedido order by p.id_vendedor Abr/ Mai - 2010
www.codificando.net
41
e-magazine
Segundo Passo: Criao e modelagem do Relatrio. Incluiremos um novo relatrio em nosso projeto chamado MxVenda.Usando um objeto Matrix da toolbox (que o chamaremos de mtx), criaremos a estrutura do relatrio formatado conforme a figura 3.17.
maticamente um grupo em coluna chamado mtx_dt_pedido. Em seguida criaremos um segundo e terceiro grupos, esses em linha, respectivamente com o nome do vendedor e a descrio do produto, nomeados de mtx_no_vendedor e mtx_ds_produto (Para criar um segundo grupo, basta clicar com o boto direito sobre um dos grupos e selecionar a opo Insert Group...). Devemos garantir que os textbox dos nossos grupos tenham os seguintes nomes dt_pedido, no_vendedor e ds_produto. Finalmente adicionamos as duas colunas na sesso Data da matrix, com os campos em_estoque e valor_venda (observe que o RS utiliza a funo de agregao SUM, automaticamente para os campos da sesso Data), nossa matrix ter a aparncia parecida figura 3.19.
Iniciaremos a formatao desse relatrio, apresentando alguns conceitos do componente matrix. Uma matriz composta por linhas e colunas (Rows e Columns, vide figura 3.18) e como j dissemos, por um ou mais grupos associados s linhas e colunas que podemos criar e/ou editar nas propriedades da matriz (tab Groups).
Codificando.net e-magazine
Proveremos um recurso interessante que a capacidade de exibir/ocultar o agrupamento em linha dos produtos, para isso editaremos o grupo mtx_ds_produto modificando sua visibilidade (tab Visibility) para oculto, e a sua visibilidade poder ser habilitada/desabilitada no campo no_vendedor como mostra a figura 3.20:
Criaremos nosso primeiro agrupamento em coluna pelo campo de data do pedido. Para isso, arrastamos e formatamos o campo data do pedido (dt_pedido) para a posio da coluna, o que gerar auto-
www.codificando.net
42
e-magazine
Figura 3.21 Matrix em ao. Figura 3.20 Matrix visibilidade dos grupos.
Outro recurso muito interessante do componente matrix a possibilidade de criar totalizadores por grupos. No nosso exemplo incluiremos um subtotal no grupo do nome do vendedor (para isso, basta clicar com o boto direito sobre a caixa de texto no_vendedor, selecionar a opo Subtotal). E finalmente, para preenchermos com o 0 (zero) os campos sem valor, usamos as seguinte instrues nos campos, Total Estoque e Valor da Venda:
=IIF(IsNothing(Fields!em_estoque.Value),0,Sum (Fields!em_estoque.Value)) =IIF(IsNothing(Fields!valor_venda.Value),0,Sum (Fields!valor_venda.Value))
Nesse exemplo criaremos um relatrio que nos permite visualizar a relao de produtos, suas respectivas categorias, total em estoque e valor unitrio. At ai nada diferente do que j fizemos em outros relatrios, no entanto faremos uso de um recurso at ento no utilizado, que so os parmetros multivalorados para o filtro dos produtos a serem exibidos. Nosso relatrio disponibilizar uma coleo de categorias para os usurios, e uma vez selecionadas essas categorias, sero disponibilizados os produtos dessas categorias, sendo que o prprio relatrio selecionar por padro os produtos das categorias anteriormente selecionadas que tenha sido parte integrante de algum pedido. Os parmetros multivalorados no so interpretados por stored procedures somente por instrues T-SQL do tipo text, uma vez que eles so repassados com a seguinte formatao: param1,param2,param2,...,paramN utilizadas na clausula IN do SQL, no entanto quando utilizadas em stored procedures o SQL no interpreta corretamente esses valores, sendo necessrio criar artifcios para remediar a situao como veremos
Codificando.net e-magazine
Formatando as caixas de texto para valores moeda e numrico, temos nosso relatrio com a seguinte forma figura 3.21.
www.codificando.net
43
e-magazine
em nossos exemplos. Primeiro Passo: Construo dos DataSets. Criaremos um conjunto de DataSets que sero usados, tanto para parametrizar os dados do relatrio como para criar um conjunto de valores possveis para os campos multivalorados. Nosso primeiro DataSet o primeiro de nossos parmetros que a relao de categorias, esse DataSet tem as seguintes caractersticas:
Nome: Command Type: Query string: dsCategorias Text SELECT * FROM TB_CATEGORIA
Uma matriz composta por linhas e colunas (Rows e Columns, vide figura 3.18) e como j dissemos, por um ou mais grupos associados s linhas e colunas que podemos criar e/ou editar nas propriedades da matriz (tab Groups).
Segundo Passo: Criao e modelagem do Relatrio. Incluiremos um novo relatrio em nosso projeto chamado MxVenda.Usando um objeto Matrix da toolbox (que o chamaremos de mtx), criaremos a estrutura do relatrio formatado conforme a figura 3.17.
Criaremos nosso primeiro agrupamento em coluna pelo campo de data do pedido. Para isso, arrastamos e formatamos o campo data do pedido (dt_pedido) para a posio da coluna, o que gerar automaticamente um grupo em coluna chamado mtx_dt_pedido. Em seguida criaremos um segundo e terceiro grupos, esses em linha, respectivamente com o nome do vendedor e a descrio do produto, nomeados de mtx_no_vendedor e mtx_ds_produto (Para criar um segundo grupo, basta clicar com o boto direito sobre um dos grupos e selecionar a opo Insert Group...). Devemos garantir que os textbox dos nossos grupos tenham os seguintes nomes dt_pedido, no_vendedor e ds_produto. Finalmente adicionamos as duas colunas na sesso Data da matrix, com os campos em_estoque e valor_venda (observe que o RS utiliza a funo de agregao SUM, automaticamente para os campos da sesso Data), nossa matrix ter a aparncia parecida figura 3.19.
Codificando.net e-magazine
www.codificando.net
44
e-magazine
Proveremos um recurso interessante que a capacidade de exibir/ocultar o agrupamento em linha dos produtos, para isso editaremos o grupo mtx_ds_produto modificando sua visibilidade (tab Visibility) para oculto, e a sua visibilidade poder ser habilitada/ desabilitada no campo no_vendedor como mostra a figura 3.20:
Relatrio tabular - com uso de parmetros multivalorados Nesse exemplo criaremos um relatrio que nos permite visualizar a relao de produtos, suas respectivas categorias, total em estoque e valor unitrio. At ai nada diferente do que j fizemos em outros relatrios, no entanto faremos uso de um recurso at ento no utilizado, que so os parmetros multivalorados para o filtro dos produtos a serem exibidos. Nosso relatrio disponibilizar uma coleo de categorias para os usurios, e uma vez selecionadas essas categorias, sero disponibilizados os produtos dessas categorias, sendo que o prprio relatrio selecionar por padro os produtos das categorias anteriormente selecionadas que tenha sido parte integrante de algum pedido. Os parmetros multivalorados no so interpretados por stored procedures somente por instrues T-SQL do tipo text, uma vez que eles so repassados com a seguinte formatao: param1,param2,param2,...,paramN utilizadas na clausula IN do SQL, no entanto quando utilizadas em stored procedures o SQL no interpreta corretamente esses valores, sendo necessrio criar artifcios
Outro recurso muito interessante do componente matrix a possibilidade de criar totalizadores por grupos. No nosso exemplo incluiremos um subtotal no grupo do nome do vendedor (para isso, basta clicar com o boto direito sobre a caixa de texto no_vendedor, selecionar a opo Subtotal). E finalmente, para preenchermos com o 0 (zero) os campos sem valor, usamos as seguinte instrues nos campos, Total Estoque e Valor da Venda:
=IIF(IsNothing(Fields!em_estoque.Value),0,Sum (Fields!em_estoque.Value)) =IIF(IsNothing(Fields!valor_venda.Value),0,Sum (Fields!valor_venda.Value))
Codificando.net e-magazine
www.codificando.net
45
e-magazine
para remediar a situao como veremos em nossos exemplos. Primeiro Passo: Construo dos DataSets. Criaremos um conjunto de DataSets que sero usados, tanto para parametrizar os dados do relatrio como para criar um conjunto de valores possveis para os campos multivalorados. Nosso primeiro DataSet o primeiro de nossos parmetros que a relao de categorias, esse DataSet tem as seguintes caractersticas:
Nome: Command Type: Query string: dsCategorias Text SELECT * FROM TB_CATEGORIA
das que j constarem em pelo menos um pedido. Para resolvermos a limitao do RS com parmetros multivalorados em stored procedures, criamos a funo Split. Esse dataSet tem as seguintes caractersticas:
Nome: Command Type: Query string: dsProdutosDefaultValue StoredProcedure getProdutosinItensPedido, cujas instrues T-SQL so: SELECT DISTINCT ped.ID_PRODUTO FROM tb_itens_pedido ped INNER JOIN tb_produto pro ON ped.id_produto = pro.id_produto ,Split('I',@idCategorias, ',') as CategoriasId
O prximo DataSet retorna um conjunto de todos os produtos, provenientes da tabela de produtos, dado as categorias anteriormente selecionadas. Esse DataSet tem as seguintes caractersticas:
Nome: Command Type: Query string: dsProdutosinCategorias Text SELECT * FROM tb_Produto prod INNER JOIN TB_CATEGORIA cate ON [prod].ID_CATEGORIA = [cate].ID_CATEGORIA WHERE [prod].ID_CATEGORIA in (@idCategorias )
Finalmente criaremos o DataSet para preenchimento do relatrio em uma consulta simples tendo como parmetro as identificaes dos produtos. Novamente utilizaremos a funo Split. Esse DataSet tem as seguintes caractersticas:
Nome: Command Type: Query string: dsDetalhesdoProduto StoredProcedure getProdutosporCategoria, cujas instrues T-SQL so: SELECT [prod].DS_PRODUTO, [cate].DS_CATEGORIA, [prod].QT_ESTOQUE , [prod].VL_PRECO from TB_PRODUTO prod INNER JOIN TB_CATEGORIA cate ON [prod].ID_CATEGORIA = [cate].ID_CATEGORIA, Split('I',@idProdutos, ',') as ProdutosId WHERE [prod].ID_PRODUTO in (Convert(int, ProdutosId.ValorIni)) ORDER BY [prod].DS_PRODUTO Abr/ Mai - 2010
Codificando.net e-magazine
Agora o DataSet que carrega os valores default para os produtos na lista de produtos. Nosso critrio sero os produtos das categorias anteriormente seleciona-
www.codificando.net
46
e-magazine
Segundo Passo: Criao e modelagem do Relatrio. Incluiremos um novo relatrio em nosso projeto chamado TBProdutosporCategoria, Usando um objeto Table da toolbox dos relatrios, criaremos a estrutura do relatrio formatado conforme a figura 3.22:
O prximo parmetro a relao de produtos com valores default, todos com dados provenientes de DataSets, e que configurado conforme a figura 3.24.
Figura 3.24 parmetro multivalorado com Figura 3.22 Formatao. valores default.
Terceiro Passo: Criar os parmetros Como j dissemos nosso relatrio permite que os usurios selecionem um ou mais produtos a partir de um filtro prvio das categorias. Ambos os parmetros so exibidos em dropdowns, cujos valores so provenientes dos datasets previamente criados. O primeiro parmetro a relao de categorias, que configurado conforme a figura 3.23.
Codificando.net e-magazine
Deploy dos relatrios Uma vez criados faremos o deploy dos nossos relatrios. Para tal, basta selecionar no Visual Studio o menu Build Deploy <<nome do projeto>>. Uma vez que o projeto esteja configurado (ver sesso Configuraes das Propriedades do Projeto, figura 3.8), nossos relatrios estaro disponveis na url: http://<servidor>/ Reports, onde <servidor> corresponde ao nome ou endereo IP, da estao no qual o reporting services se encontra, se for na
www.codificando.net
47
e-magazine
sua estao de trabalho localhost, tambm funciona, que corresponde ao aplicativo Report Manager (figura 3.26).
funcionalidades adicionais do reporting services muito teis tais como servios de delivery, cache e os importantssimos aspectos de segurana, grande abrao e at l. 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, tecnocolunista 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/
Nossos relatrios esto disponveis na pasta Treinando. Limitaes Os relatrios Remote-mode suprem com grande eficincia uma demanda muito comum e pouco explorada que so os relatrios, especialmente em ambientes web, no entanto temos algumas limitaes que esperamos serem sanadas em prximas verses. Abaixo relacionamos alguns dos itens que apontamos como limitaes desse modelo de relatrios.
Codificando.net e-magazine
Dependncia do IIS Requer uma infra-estrutura mais sofisticada A API OLEDB, de acesso a dados possui algumas restries funcionais Interface padro com restries no Firefox
www.codificando.net
48
e-magazine
1. Introduo Microsoft Project um software de gesto de projetos (ou gerncia de projetos) produzido pela Microsoft.Criado pela Microsoft em 1985 (primeira verso). Nos anos posteriores sofreu profundas mudanas, de layout at funcionais, aumentando a oferta de servios e recursos relacionados gesto de projetos. So vrios os focos do Ms Project: tempo (datas, durao do projeto, calendrio de trabalho), Grfico de Gantt, modelo probabilstico (para clculos relacionados planejamento), Diagrama da Rede, Custos (fixos, no fixos, outros) e uma gama de relatrios. A ltima verso, Microsoft Project Professional 2007 ainda possui mais recursos. Um timo software para gestores, administradores e coordenadores. A interface padronizada da Microsoft (similar a outros produtos da empresa) facilita para os iniciantes a familiarizao com o produto. Ainda carece de maior conhecimento dos profissionais envolvidos com gesto de negcios.Com o decorrer dos anos, o Microsoft Office Project tornou-se numa das principais ferramentas de gesto de projetos para usurios que desejam fazer a diferena no seu trabalho mediante o planejamento, gesto e comunicao eficazes das informaes dos projetos.O Microsoft Office Project fornece ferramentas de gesto de projetos robustas em conjunto com a combinao ideal de usabilidade, capaci-
dade e flexibilidade, para que possa gerir os projetos diretamente a partir do seu computador. O objetivo do Microsoft Project desenvolver a capacidade de planejar e gerenciar projetos de qualquer natureza utilizando o MS Project, uma das ferramentas mais adequadas e exigidas para Gerentes, Engenheiros, ou Lderes de projetos.O Microsoft Project possui vrios recursos que podem ser utilizados pelo Gerente de Projeto, no entanto, so poucos os profissionais que realmente sabem utilizar a maioria destes recursos. O Microsoft Project lembra bastante uma planilha em Excel basicamente os menus e botes Microsoft Project segue o padro do Microsoft Office apesar de parecer uma ferramenta de simples manuseio como um Excel ou Word, o Microsoft Project uma ferramenta complexa e seu manuseio no to simples assim. Seguem-se as principais razes para utilizar o Microsoft Project: 2. Caractersticas do Microsoft Project
2.1 Estimativa e Agendamento Realistas
Codificando.net e-magazine
|
A definio de expectativas realistas junto das equipes de projeto, gerncia e clientes depende, muitas vezes, de uma es-
www.codificando.net
49
e-magazine
timativa hbil de agendas, necessidades de recursos e oramentos. O Project no s ajuda a gerir o processo de criao de agendas cronolgicas e de estimativas dos custos, como ainda ajuda a compreender o impacto que as alteraes ou atrasos aplicados a tarefas especficas podero exercer sobre o projeto como um todo (figura 1).
um dos relatrios personalizados, prontos para utilizar, listados. A criao de relatrios claros e simples permite-lhe informar a sua equipa e a gerncia do estado do projeto de forma eficaz, e, ao mesmo tempo, controlar o andamento do projeto atravs de clculos do valor estimado, do caminho crtico e de vrios clculos base. Exemplos de relatrios existentes no Project na figura 3:
Os crculos se referem ao numero dado aquela etapa do projeto, lembrando que PRODECESSORAS significa que para se fazer uma etapa necessrio que a etapa prodecessora esteja finalizada.
Codificando.net e-magazine
2.4 Melhorando a Atribuio de Recursos 2.3 Criando Relatrios e Controlando Projetos em Tempo
Com o Project, podemos atribuir recursos a tarefas com facilidade e ajustar o respectivo mtodo de atribuio para resolver conflitos e sobre atribuies. Desta forma, teremos
www.codificando.net
50
e-magazine
um maior controle e flexibilidade sobre a gesto dos recursos, agendas de projetos e custos.
O Project pode ser facilmente integrado em outros programas do Microsoft Office System. Com algumas combinaes de teclas, poder converter listas de tarefas existentes em planos de projeto do Microsoft Office Excel e Microsoft Office Outlook. Tambm possvel adicionar recursos a projetos a partir do servio de diretrio Microsoft Active Directory ou do livro de endereos do Microsoft Exchange Server.
2.7 Usabilidade
Os gestores de projetos podero apresentar as informaes, rpida e facilmente, num vasto leque de formatos. Atravs de um novo assistente, poder formatar e imprimir agendas numa nica pgina com facilidade. Tambm poder exportar facilmente os dados do projeto para o Microsoft Word, para obter documentos formais, para o Microsoft Excel, para obter grficos ou folhas de clculo personalizadas, para o Microsoft PowerPoint, para obter apresentaes inovadoras, ou para o Microsoft Visio, para obter diagramas na figura 5.
Uma interface melhorada, consistente com as Edies do Microsoft Office, facilita a aprendizagem do Project e o acesso s ferramentas e funcionalidades de que necessita. As barras de ferramentas e menus intuitivos, assim como outras funcionalidades, permitem-lhe dominar rapidamente os conceitos fundamentais da gesto de projetos, mesmo que nunca tenha utilizado o Project antes (figura 6).
Codificando.net e-magazine
2.8 Ajuda
www.codificando.net
51
e-magazine
principiantes como para experientes. O Project inclui um mecanismo de busca de ajuda robusto, etiquetas inteligentes e assistentes, integrando ainda o acesso online, caso tenhamos uma conexo com a Internet, a cursos de formao, modelos, artigos, entre outros (figura 7).
tomatizar seu processo de relacionamento com cerca de 65 distribuidores exclusivos que atuam em todo o Brasil, comercializando implementos para transporte rodovirio, vages ferrovirios e silos, entre outros itens. A empresa buscava maior sinergia com sua rede para potencializar as vendas, o que implicava em obter uma viso completa do processo de negcio, desde a fase de prospeco. Tais ganhos s foram conquistados aps a implementao do Microsoft Dynamics CRM. Agora, alm de acompanhar melhor o trabalho, a Randon Implementos est mais segura de ter fortalecido sua parceria com os revendedores.
3.2 Dimebel
Um conjunto de vrias funcionalidades personalizveis permite adaptar o Project de modo a refletir as necessidades especficas do projeto. Escolha um dos campos de apresentao personalizados listados que passam a fazer parte da agenda do projeto. Tambm pode modificar barras de ferramentas, frmulas, indicadores grficos e relatrios. Para ter acesso a uma flexibilidade acrescida, o formato de arquivo XML (Extensible Markup Language), o Microsoft Visual Basic for Applications (VBA) e os suplementos COM (Component Object Model) facilitam a partilha de dados e a criao de solues personalizadas. 3. Exemplos de Empresas que utilizam o Microsoft Project
3.1 Randon Implementos
Empresa de distribuio de produtos farmacuticos, a Dimebel tinha o desafio comum a vrias empresas: lidar com um ambiente de tecnologia heterogneo, o que dificulta o gerenciamento e gera problemas de segurana. Para mudar esse cenrio, a Dimebel decidiu renovar seu ambiente de TI para extrair mais de cada software. Atualizou suas estaes com o Windows Vista e assim garantiu mais estabilidade s suas aplicaes de negcios. Com o Microsoft Windows Server 2008, a Dimebel ganhou vrios recursos que facilitam processos gerenciais rotineiros. E instalando o Microsoft Forefront em suas estaes de trabalho, assegurou maior proteo s suas
3.3 Empro
Codificando.net e-magazine
A Empro ganhou produtividade e controle com Office 2007 e Microsoft Project. A heterogeneidade do ambiente e a falta de ferramentas que permitissem maior controle so-
www.codificando.net
52
e-magazine
bre os projetos levaram a Empresa de Processamento de Dados da Prefeitura de So Jos do Rio Preto a promover mudanas na sua estrutura tecnolgica. A companhia implementou o Microsoft Office system 2007 e o Microsoft Project. Alm da reduo dos chamados de help desk, graas ao fim das falhas por incompatibilidade, a Empro observou aumento de produtividade. A gesto dos projetos tambm foi aprimorada e possvel acompanhar as iniciativas de TI em tempo real e realizar ajustes ao longo do processo de desenvolvimento. 4. Concluso Considerando o risco de fracasso de um projeto, adotar uma ferramenta que facilite o planejamento e o acompanhamento imprescindvel. O MS Project uma ferramenta da Microsoft que possui diversos recursos que podem ser usados para aumentar s chances de sucesso de um projeto, controlando os gastos, o uso de matria-prima, a mo-de-obra utilizada em cada tarefa, o tempo previsto para concluso, o tempo real de concluso e vrias outras informaes importantes para o desenvolvimento. O Microsoft Project uma aplicao informtica que gere uma base de dados onde so Introduzidas todas as informaes correspondentes a um projeto. Estas informaes Referem-se principalmente a tarefas e suas duraes e relaes, recursos, custos, horrios de trabalho e atribuies de recursos a tarefas. Todas estas informaes so submetidas a um programa de clculo baseado em agendas, o que permite dar ao utilizador elementos exato e refe-
renciados no tempo, das variveis caractersticas do projeto. Tendo em conta a interdependncia entre tempo, custo e trabalho, o Project permite aos gestores de projetos tantas simulaes quantas necessrias para decidir quais as condies mais favorveis para a execuo desses projetos. Paralelamente tambm possvel produzir documentao que permite aos decisores de topo, mesmo que no tenham conhecimentos especficos sobre a utilizao deste software, avaliar quais as condies de planejamento impostas ao desenvolvimento dos trabalhos e, a Posteriores avaliar o desempenho dos intervenientes mo desenrolar do projeto. Usando o Microsoft Office Project, podemos estimar e controlar informaes de custo (custo: o custo agendado total de uma tarefa, de um recurso, de uma atribuio ou de um projeto inteiro. s vezes chamado de custo atual. No Project, os custos da linha de base so geralmente denominados "oramento".) bsicas para seu projeto. Podemos usar uma variedade de tipos de custos, e o Project calcula esses custos para o usurio medida que o projeto avana. O uso do Ms Project d uma notvel contribuio para a produo da documentao e os seus recursos so suficientemente vastos para que ele possa constituir uma espinha dorsal de todo o sistema de informao do Projeto. Na base de dados do Project est contida toda a informao referente a trabalho, datas, tempos, recursos humanos, recursos materiais e custos envolvidos no projeto.
www.codificando.net
Codificando.net e-magazine
53
e-magazine
REFERNCIAS: Project 2003 verso 7, Dados obtidos: ltimo acesso: 08/12/2009. Site: Microsoft, http://office.microsoft.com/pt-br/project/ HA101672711046.aspx Rodrigo Jos Santi
Aluno de Tecnologia em Anlise e Desenvolvimento de Sistemas FATEPA Faculdade de Tecnologia Unianchieta Centro Universitrio Anchieta Jundia, SP
www.codificando.net
Codificando.net e-magazine
54
e-magazine
Neste artigo mostrarei um overview das novidades em desenvolvimento para o Sharepoint 2010 no que diz respeito a novas ferramentas que podemos utilizar para o desenvolvimento de solues em Sharepoint. O objetivo principal do time de Sharepoint da Microsoft foi de criar uma nova plataforma atrativa para desenvolvimento, de maneira que possamos identificar o Sharepoint 2010 como um ambiente para criao de aplicaes. Dessa forma ao escolher uma plataforma para criao de aplicaes, arquitetos e desenvolvedores decidam por criar uma soluo no Sharepoint, pois este apresenta um cenrio favorvel ao desenvolvimento. Para tornar o Sharepoint atrativo a desenvolvedores, a Microsoft investiu em 3 reas conforme figura 1:
Veremos a seguir o que cada uma dessas reas traz de novidades para o desenvolvimento no Sharepoint 2010. Para facilitar o entendimento, as explicaes esto ilustradas com imagens pertinentes ao assunto. Produtividade O Sharepoint 2007 uma plataforma poderosa para criao de aplicaes, porm para que um desenvolvedor se inicie no desenvolvimento de solues Sharepoint, o tempo despendido no aprendizado de certa forma penoso. Se voc j desenvolve para o Sharepoint, quantos macetes voc j teve que aprender para agilizar o desenvolvimento? A utilizao de ferramentas disponibilizadas no Codeplex uma delas, e isso voc s aprende em campo de batalha. Agora temos o Sharepoint Designer 2010 e o Visual Studio 2010 que vieram para facilitar o nosso trabalho! Vejamos suas novidades: Sharepoint Designer 2010 O Sharepoint Designer 2010 sofreu mudanas para aumentar a produtividade, comeando pela aparncia da ferramenta
Codificando.net e-magazine
www.codificando.net
55
e-magazine
que, assim como outros produtos da linha 2010, possui uma barra de ferramentas (Ribbon) mais intuitiva. Agora no mais somente uma ferramenta que possibilita customizaes de pginas e criao de workflows, trata-se uma ferramenta nova que possibilita a customizao/criao de artefatos no Sharepoint. Em outras palavras, dos objetos do Sharepoint. Para quem j estava acostumado com o Sharepoint Designer 2007, a nova verso diferente e traz novos recursos para desenvolver solues rapidamente:
de contedo. Visual Studio 2010 Quando precisamos obter um resultado diferente do que o Sharepoint Designer 2010 pode nos oferecer, atravs da codificao o Visual Studio 2010 traz novas ferramentas para facilitar o desenvolvimento para o Sharepoint 2010.
Business Connectivity Services (BCS) oferece suporte a conexes e definies de outros databases.
O Visual Studio 2010 nos oferece suporte a ferramentas Out-Of-The-Box (OOTB), que nos permitem a criao de web parts utilizando o Web Part Designer, a criao de custom Entities para conexo a datasources externos, a construo de workflows utilizando cdigo para a adio de actions e activities, permitindo a criao de uma soluo completa para nossas necessidades.
Custom Actions - suporte criao de custom actions para serem incorporados ao Ribbon do Sharepoint.
Task/Approval
suporte a novas Actions, incluindo Assign Item for Approval, Assign Item for Feedback e General Task Process.
Designer
Agora quando criarmos um projeto no Visual Studio 2010 para o Sharepoint 2010, automaticamente teremos a criao de Features e pacotes WSP para deploy.
Codificando.net e-magazine
Podemos controlar o deploy das Features e customizar o contedo dos pacotes WSP, utilizando novos editores que o Visual Studio 2010 nos oferece.
Page Editor - oferece uma nova user interface (UI) para customizao
www.codificando.net
56
e-magazine
mente com 4 GB de RAM para instalao do SharePoint Foundation, e de 6 a 8 GB de RAM para o SharePoint Server. Para mais detalhes de como realizar a criao de seu ambiente de desenvolvimento, acesse o link: http://msdn.microsoft.com/enus/library/ee554869(office.14).aspx.
Como exemplo da utilizao das novas ferramentas acima, disponibilizei um vdeo ilustrativo no link: http:// www.youtube.com/watch? v=nmxCAYbngp8 O mesmo vdeo tambm est disponvel com mais qualidade no link: http://www.screencast.com/t/ YWZjOGY5MWUt OBS: O cdigo criado no vdeo e o prprio videocast esto disponveis para download no link: http://sharepoint4developers.spaces.live.com/blog/cns! 419BF2880E221BB9!478.entry
Agora temos suporte conexo de sites do Sharepoint pelo Server Explorer, o que nos d maior agilidade na identificao dos objetos do site durante o desenvolvimento.
Inerente ao Visual Studio 2010 tambm temos a integrao com o Team Foundation Server (TFS), que permite o gerenciamento do ciclo de desenvolvimento das aplicaes. Podemos inclusive importarmos do Sharepoint Designer 2010 pacotes WSP para Visual Studio 2010, o que nos d maior flexibilidade ao trabalharmos com as duas ferramentas juntas. Ambiente de Desenvolvimento Como desenvolvedores temos agora 2 opes para criao do ambiente de desenvolvimento:
Codificando.net e-magazine
Windows Server 2008 Service Pack 2 x64 (ou Windows Server 2008 R2 x64). Windows 7 x64, Windows Vista Service Pack 1 x64, or Windows Vista Service Pack 2 x64.
OBS: Lembrando apenas que devemos possuir um computador com capacidade de processamento em 64 bits, com pelo menos 2 gigabytes (GB) e preferencial-
www.codificando.net
57
e-magazine
Novos blocos e componentes para a criao de solues foram disponibilizados. De acordo com a Figura 2, os blocos em laranja e vermelho trazem novidades, as quais estarei comentando nesse artigo.
clusas numa hierarquia de Sites, e estes em Site Collections. Para saber mais detalhes sobre Listas e Libraries, acesse o link: http:// sharepoint4developers.spaces.live.com/ blog/cns!419BF2880E221BB9!217.entry Para saber mais detalhes sobre Sites e Site Collections, acesse o link: http:// sharepoint4developers.spaces.live.com/ blog/cns!419BF2880E221BB9!173.entry As listas e libraries possuem as seguintes novidades no SharePoint 2010:
Na camada de UI, as pginas ASP.NET foram estendidas para suportar Silverlight e XSLT views. Na camada inferior, as APIs foram estendidas para permitirem que o desenvolvimento no SharePoint seja mais padronizado. As APIs que executam no servidor incluram algumas melhorias no modelo de objetos e o suporte ao LINQ foi adicionado. Agora as APIs que executam no lado cliente suportam REST, e o modelo de objetos cliente facilita o trabalho com dados no SharePoint. Na camada mais abaixo o application model, que incluem os Sites e Listas no sofreram muitas mudanas, os mesmos conceitos utilizados no SharePoint 2007 continuam sendo vlidos no SharePoint 2010.
Relashionships
As Listas e Libraries possibilitam a construo de relacionamentos e estruturas de dados mais sofisticados. Os relacionamentos entre listas podem ser criados para reforar uma Integridade dos dados.
Novo recurso de JOIN entre as Listas e Libraries. possvel criarmos no mesmo lookup referncias a mltiplas colunas da mesma lista ou library.
Codificando.net e-magazine
Validation
Validaes com frmulas em colunas foram adicionadas. Utilizando frmulas do Excel podemos adicionar validaes a colunas e exibirmos mensagens aos usurios.
O modelo de dados do SharePoint composto por Listas e Libraries, que esto in-
www.codificando.net
58
e-magazine
Server APIs
SPLinq
Como desenvolvedores, precisamos estar cientes dos problemas que podem ocorrer ao lidarmos com um processamento que pode exigir bastante do servidor. Agora tais importantes questes podem ser melhor gerenciadas pelos administradores no lado administrativo do SharePoint. External Data Lists Com o objetivo de integrao de mltiplos datasources ou mesmo da utilizao da UI para navegao no SharePoint 2010, estruturas de dados externas como databases legados ou outros databases no SQL Server, dados que retornam de web services ou de cdigo .Net podem ser adicionados ao SharePoint como External Data Lists. No ponto de vista dos usurios como se trabalhar com listas, utilizando views e forms. Podendo ser estendido para trabalhar com o SharePoint Workspace 2010 no lado cliente.
Como exemplo de utilizao dos objetos acima, disponibilizei um vdeo ilustrativo no link: http://www.youtube.com/watch? v=y1sBMazMAwY
Com o modelo de objetos podemos manipular os dados, porm via SPLinq temos uma outra alternativa. Esse um novo recurso do Sharepoint 2010, que traz um Linq provider para manipulao dos dados. Tais manipulaes so realizadas no lado do servidor. Quais os benefcios da utilizao do SPLinq?
Programao (Entities)
com
Entidades
Ao invs de trabalharmos diretamente com itens e listas, podemos trabalhar com os objetos que representam tais itens e listas, como: Produtos (Products) e Fornecedores (Vendors) por exemplo. Isso bem mais prtico, rpido e fcil na criao de queries, pois podemos utilizar o intellisense do Visual Studio. Exemplo de query feita com o SPLinq:
Codificando.net e-magazine
O mesmo vdeo tambm est disponvel com mais qualidade no link: http:// www.screencast.com/t/NDlmODQxZGY
Por trs dos panos a query acima traduzida em Collaborative Application Markup Language (CAML), que uma linguagem baseada em XML utilizada para construir e customizar web sites no Sharepoint. Essa linguagem foi estendida de modo que tambm podemos realizar joins entre listas e
www.codificando.net
59
e-magazine
O suporte a eventos de Lista e Itens foram estendidos no SharePoint 2010. Geralmente tais eventos so criados para validar dados. Novos eventos foram adicionados, vejam as novidades:
Podemos controlar como a interface do usurio retornar quando os eventos de cancelamento ou validao de dados ocorrerem, podendo redirecionar para pginas de erro ao invs de retornar mensagens simples do tipo String. Connected Client APIs
Client Object Model
No SharePoint 2007 os eventos ocorriam antes que os dados sofressem modificaes e aps um tempo que os dados j haviam sido persistidos. Esse novo evento foi disponibilizado para interceptar o que ocorre entre os dois eventos, justamente no meio da operao, para que o desenvolvedor garanta que seu cdigo seja executado antes que o Form que contm a Lista/Item seja retornado ao usurio.
Um novo recurso para manipulao de dados atravs do novo modelo de objetos cliente, que uma verso cliente de um subset do modelo de objetos de servidor, tais como: Webs, Lists, ListItems, etc. Podendo ser utilizado diretamente no Silverlight, .Net (aplicaes console, winform) ou Javascript, pois se trata do mesmo modelo de objetos. Esse novo modelo de objetos foi criado para o batch de comandos e eficincia das operaes. Por exemplo, quando trabalhamos com web services do SharePoint, temos que tratar os dados recuperados em XML, o que bem trabalhoso. Dependendo do tipo de operao a ser realizada precisamos criar um web service para obtermos os dados, porm com esse novo modelo as chamadas so diretas e com uma nica query podemos obter o que precisamos. Alm disso podemos usufruir do tratamento assncrono dos dados e de um tratamento de escopo de excees e de lgica condicional.
Codificando.net e-magazine
Workflow events - Podemos customizar como os workflows podem ser executados. Temos os eventos Starting, Started, Postponed e Completed para manipularmos suas execues.
www.codificando.net
60
e-magazine
REST Uma nova maneira de trabalharmos com dados de listas e Excel no Sharepoint atravs de integraes utilizando protocolos REST e ATOM. Utilizando o ADO.NET Data Services com o Visual Studio 2010, podemos integrar facilmente nossas aplicaes. Tambm podemos utilizar novas tecnologias como o ASP.NET AJAX e o PowerPivot - projeto Gemini (utilizado para anlise de dados no Excel) para integrar nossas aplicaes.
Como exemplo da utilizao das novas APIs acima, disponibilizei um vdeo ilustrativo no link: http://www.screencast.com/t/OGQ0MGJm OBS: Os cdigos criado no vdeo e o prprio videocast esto disponveis para download no link: http://sharepoint4developers.spaces.live.com/blog/ cns!419BF2880E221BB9!481.entry
Site-scoped workflows
Workflows so disparados sobre Itens/ Documentos, e se desejarmos disparar workflows sobre um conjunto de Itens/ Documentos ou sobre todos os Itens/ Documentos? Com site-scoped workflows podemos fazer isso dentro do Site Collection.
Visualizao no browser
Com o SharePoint Server 2010, entre todas as aplicaes do pacote Office, o Visio 2010 traz a possibilidade de criarmos workflows no servidor a partir de diagramas. Um dos benefcios para os usurios a possibilidade de que os mesmos visualizem o progresso dos workflows, com todas as aes e pontos de deciso, uma vez que os diagramas estaro vinculados aos workflows.
Content Management
Workflow
Os workflows OOTB sofreram mudanas em seu design para serem melhor reutilizados atravs de "building boxes", que permitem que estes sejam estendidos mais facilmente. Pages and User Interface
Ribbon e Dialogs
Codificando.net e-magazine
Performance e Escalabilidade
Agora os profissionais de Infra podem definir servidores dedicados para a execuo de workflows. Isso possibilita que workflows sejam executados mais rapidamente e que os mais crticos possam ser executados em servidores exclusivos.
O Ribbon representa a nova barra de tarefas no Sharepoint 2010. Proveniente do Office 2007, ele veio para ficar. Sua customizao possvel atravs da criao de Custom Actions pelo Sharepoint Designer 2010 ou pelo Visual Studio 2010.
www.codificando.net
61
e-magazine
O Status Bar ou Barra de Status nos traz informaes do contexto em que estamos. Utilizado para exibir informaes persistentes, tais como: status da pgina ou verso. Enquanto que a Notification Area ou rea de Notificao nos traz informaes transitrias de durao de 5 segundos e depois desaparecem.
Padronizao e Compatibilidade
As pginas do Sharepoint 2010 esto mais amigveis para os desenvolvedores. As masterpages foram criadas no padro XHTML 1.1, deixando as pginas mais limpas e padronizadas. Os browsers Mozilla e Safari so suportados sem restries, ou seja, todas as funcionalidades executam em tais browsers. Da perspectiva de acessibilidade, o padro WCAG 2.0 nvel AA foi implementado. Para mais informaes, acesse o link: http:// www.w3.org/TR/WCAG/ A linguagem XSLT foi largamente utilizada para a customizao de views, devido a seu padro na transformao de dados XML. Mais uma novidade de que a UI agora oferece suporte multilngue, ou seja, a Lngua das pginas podem ser trocadas. No ponto de vista de desenvolvimento, durante a construo de solues, dependendo dos requisitos, devemos pensar na possibilidade do usurio mudar a UI para suportar Ingls ou Portugus por exemplo.
Os Dialogs so representados por modal pop-ups, que congelam a edio dos campos do plano de fundo e s permitem a edio dos campos em evidncia. Bastante conhecido por desenvolvedores Web.
Codificando.net e-magazine
Silverlight
O Silverlight possibilita ricas visualizaes de contedo e o Sharepoint 2010 traz consigo templates de Silverlight webparts. Isso possibilita uma maneira mais simples de realizarmos o upload de arquivos xaps (aplicaes Silverlight) e utiliz-los no SharePoint. Vale lembrar que o Client Object Model oferece total suporte ao desenvolvimento de aplicaes Silverlight.
www.codificando.net
62
e-magazine
Flexibilidade no Deploy Para efetivamente gerenciarmos o ciclo de desenvolvimento de aplicaes necessitamos de ferramentas que nos auxiliem. O Visual Studio 2010 se integra inteiramente com o Team Foundation Server, que fornece uma soluo completa para o gerenciamento do ciclo de desenvolvimento e automatizao do processo de entrega de aplicaes. Apenas dessa maneira que temos um deploy com 100% de sucesso. Uma vez finalizada uma soluo, basta realizarmos o deploy dela! assim que funciona em seu ambiente de trabalho? Na grande maioria dos casos acredito que no, primeiramente necessrio verificar o impacto que sua soluo pode trazer ao ambiente de produo. Para isso necessria a realizao de testes (funcionais e no-funcionais) em ambientes de prproduo. Testes de performance so extremamente necessrios para se evitar dores de cabea indesejadas. por isso que somente aps o aval da equipe de Infra que as solues so disponibilizadas em produo. Geralmente isso leva tempo e traz custos indesejados aos projetos. Para facilitar esse meio-de-campo, Sandboxed Solutions foram disponibilizadas no Sharepoint 2010.
Sandboxed Solutions
um subset de APIs e dentro do mesmo Site Collection. Estas solues so monitoradas e caso alguma delas traga alguma instabilidade so automaticamente finalizadas, o que traz mais segurana estabilidade do farm. O objetivo principal da utilizao de Sandboxed Solutions de agilizar os negcios, permitindo que as solues sejam criadas e disponibilizadas rapidamente, sem que haja a relutncia do deploy por Administradores do Farm uma vez que so solues mais seguras.
Tipos de soluo
Vrios tipos de solues podem ser criados, desde que a soluo esteja dentro do escopo do Site Collection em que se encontra. O subset de APIs do Sharepoint inclui a maioria das classes, incluindo SPSite, SPWeb, SPList e SPListItem. A lista completa de classes disponveis no subset de APIs do Sharepoint est disponvel no link: http:// msdn.microsoft.com/en-us/library/ee537860 (office.14).aspx Sandboxed Solutions podem ser criadas a partir de objetos do Sharepoint, tais como: Web Parts, Modules, Lists, Content Types, Event Receivers, Feature Activation Events, Custom Workflow Actions e InfoPath Forms.
Formato dos Pacotes
Codificando.net e-magazine
Sandboxed Solutions so solues seguras que so executadas em um processo separado do servidor. Tais solues so restringidas a serem executadas somente com
Atravs da criao de pacotes WSPs as solues foram unificadas. Dessa forma os prprios Administradores do Site Collection
www.codificando.net
63
e-magazine
Alguns componentes se fazem necessrios para que as Sandbox Solutions sejam executadas. A Figura 7 mostra os componentes essenciais e o fluxo de execuo das Sandboxed Solutions.
Sandbox Solutions limitada a um subset das APIs do Sharepoint (4). Caso o cdigo desenvolvido se enquadre no subset do modelo de objetos ento o proxy chamado. O Sandbox Worker Process Proxy (SPUCWorkerProcessProxy.exe) chamado (5) para permitir a execuo do cdigo da Sandbox Solution contra o modelo completo de APIs do Sharepoint.
Concluso Atravs da unio das 3 partes: Produtividade com a utilizao de novas ferramentas, nova plataforma de servios e nova forma de deploy, as solues em SharePoint sofreram um grande upgrade, pela integrao entre plataforma e as ferramentas. Isso possibilitar a ingresso de novos desenvolvedores no mercado mundial para suprir as demandas existentes, que tendem a crescer pelos benefcios que a plataforma oferece e pelas facilidades na customizao desse novo ambiente, citados nesse artigo. Marcel Medina
Especialista em desenvolvimento .Net/Sharepoint, atua como Consultor Microsoft nas tecnologias .Net/ Sharepoint. Tambm Microsoft Trainer nas tecnologias citadas. Atualmente vive em Auckland, New Zealand e gosta de esportes radicais, msica e jogos. Como desenvolvedor Snior coordenou e participou de vrios projetos grandes de desenvolvimento, incluindo os jogos Pan-americanos Rio 2007 nas plataformas web, windows e mobile. Possui 10 anos de experincia no mercado de TI e as seguintes certificaes: MCP, MCDBA, MCAD, MCSD, MCTS, MCPD e MCT. contato: marcel_medina@hotmail.com blog tcnico portugus: http://sharepoint4developers.spaces.live.com blog tcnico ingls: http://sharepoint4developersnz.spaces.live.com
outro objeto que contenha uma Sandbox Solution no Front End. Internamente o IIS identifica a solicitao (1) e atravs do Application Pool (2) a solicitao enviada ao Back End. O User Code Service (SPUCHostService.exe) precisa estar ativo para que a execuo de Sandbox Solutions seja garantida (3). Este servio pode existir em vrios servidores que desejam dividir a execuo de Sandbox Solutions. O Sandbox Worker Process (SPUCWorkerProcess.exe) o processo real em que Sandboxed Solutions so executadas. A execuo de
Codificando.net e-magazine
|
www.codificando.net
64
e-magazine
Ol pessoal, hoje vou escrever sobre a nova verso do JQuery verso 1.4. Vejamos o que melhorou nesta verso. Uma coisa que podemos notar que depois que a Microsoft comeou a apoiar, a FrameWork vem crescendo bastante e ns que ganhamos com isso!!! No incio do ms eu j dei uma Twitada sobre a nova verso, que foi lanada no dia 14 de janeiro, achei bem legal o que foi feito, pois no dia do aniversrio do JQuery, para celebrar eles lanaram um site http:// jquery14.com/. Nota Oficial do Site: Ns estamos empolgados em trazer por 14 dias consecutivos novas liberaes para celebrar a verso 1.4 do jQuery. Voc observar que ns estamos empolgados com o nmero 14 desde que a verso 1.4 do jQuery foi liberada no aniversrio do jQuery (14 de janeiro). Por isso no deixe de voltar a cada dia porque outro anncio feito e um novo contedo liberado. Tem coisas bem legais nesse site, pretendo explorar mais artigos falando dessas mudanas. Uma das principais mudanas foi a melhoria de performance dos principais mtodos do FrameWork, se voc j achava rpido, imagine agora...
Nota Oficial do Site: Muitos dos principais mtodos do jQuery sofreram alteraes significantes na nova verso. Quando analisamos o cdigo descobrimos que estvamos aptos fazer alguns significantes ganhos de performance comparados com a verso anterior. Vendo quantas chamadas para funes internas estavam sendo feitas e o trabalho para reduzir a complexidade do cdigo. (* Ref 01) Outro ponto em que a equipe de DEV de preocupou bastante foi com a cobertura de testes e o suporte a uma quantidade maior de browsers. (* Ref 02) Nota Oficial do Site: Na verso 1.4 corrigimos cerca de 207 bugs (comparados com 97 na verso 1.3). (* Ref 03). Adicionalmente ns melhoramos nossa cobertura de testes de 1504 testes no jQuery 1.3.2 para 3060 testes na verso 1.4. A suite de testes do jQuery est passando 100% na maioria dos browsers (Safari 3.2, Safari 4, Firefox 2, Firefox 3, Firefox 3.5, IE 6, IE 7, IE 8, Opera 10.10, e Chrome). Outro ponto muito importante foi a reescrita de toda a documentao oficial (* Ref 04 ) do jQuery 1.4 e a liberao de
Abr / Mai - 2010
Codificando.net e-magazine
|
www.codificando.net
65
JQuery1.4 - Novidades
e-magazine
um novo frum de discusso. (*Ref 05) Nota Oficial do Site: Ns utilizamos listas de discusses, e posteriormente Grupos do Google, ao longo dos 4 anos para gerenciar as discusses e comunidades em volta do jQuery. Essa soluo em particular no tem sido capaz de escalar nossas discusses tanto em termos de participao e no gerenciamento de spam. (*Ref 06) Voc j pode baixar a nova verso acessando qualquer um dos links a seguir: Jquery: http://code.jquery.com/jquery1.4.js Google: http://code.google.com/apis/ ajaxlibs/documentation/index.html Microsoft: http://ajax.microsoft.com/ajax/ jQuery/jquery-1.4.min.js Referncias: Ref 01 : http://ejohn.org/blog/function-callprofiling/
Ref 08 : http://code.google.com/intl/ptBR/apis/ajaxlibs/documentation/ index.html Ref 09 : http://ajax.microsoft.com/ajax/ jQuery/jquery-1.4.min.js Bons Cdigos... Fabiano Belmonte
Lder de Projetos da Compugraf foi senior Architect da InfoMoney.com, especialista em aplicaes eBusiness com larga experincia em B2B (Submarino.Com e Saraiva.Com). Trabalha h 5 anos com a tecnologia .Net, aplicando conhecimentos nas diversas reas: instituies financeiras (sistema SPB), e-Commerce, gerenciamento logstico entre outras. Trabalhando com Visual Studio desde suas primeiras verses, responsvel pela implementao de uma Metodologia de trabalho e melhoras significativas no resultados e na qualidade do time de Desenvolvimento de muitas empresas por onde passou como (Saraiva.Com) e ferramentas como TFS (Team Foundation Server). Foi palestrante em eventos como Codificando. NET 2008 e outros eventos sobre Tecnologia .NET.
Codificando.net e-magazine
Ref 02 : http://jquery14.com/day-01 Ref 03 : http://dev.jquery.com/report/34 Ref 04 : http://api.jquery.com/ Ref 05 : http://jquery14.com/day-07 Ref 06 : http://ejohn.org/blog/googlegroups-is-dead/ Ref 07 : http://code.jquery.com/jquery1.4.js
www.codificando.net
66
e-magazine
Ol Pessoal, h algum tempo comecei a escrever sobre C# 4.0, acho que j passou da hora de voltar a escrever sobre o assunto. Hoje vou escrever sobre uma funcionalidade bem legal, na minha opinio ajudar bastante nosso dia a dia, que Dynamic Typed Objects. Uma feature bem legal do C# 4.0 e o suporte programao dinmica, isso feito atravs da criao de tipos dinmicos de objetos, o que acontece que esses tipos so resolvidos em tempo de execuo e no em tempo de compilao. O que muda? Na declarao da varivel utilizamos a palavra "dynamic". A palavrachave informa o compilador que o objeto foi declarado de forma dinmica, deve ser tipado em tempo de execuo usando o Dynamic Language Runtime (DLR). Mais no confunda o "dynamic" com o "var", pois eles no so a mesma coisa. O "var" tipado em tempo de compilao diferente do "dynamic", que tipado em tempo de execuo.
Vamos fazer alguns exemplos: Veja um cenrio onde voc precisa definir propriedades de um objeto, uma dll, e voc vai fazer isso utilizando Reflection:
Assembly objLib= Assembly.LoadFile (@"C:\projects\Testes\bin\Debug\Testes.dll"); Type TesteObjType = objLib.GetType ("Teste.TesteClassLib"); object Classobj= Activator.CreateInstance (TesteObjType); PropertyInfo pInfo= TesteObjType.GetProperty("Nome"); pInfo.SetValue(Classobj, "Fabiano", null);
Codificando.net e-magazine
Cdigo que faz o load de uma dll via reflection e atribui um valor para a propriedade nome do objeto Agora vou fazer a mesma coisa utilizando "dynamic" basta mudar a terceira e a ltima linha para:
dynamic dynamicTesteObj = Activator.CreateInstance(Classobj); dynamicTesteObj.Name = "Fabiano";
www.codificando.net
67
e-magazine
da DLL utilizando dynamic. Simples no ? Vamos ver um slide da palestra do Anders Hejlsberg's no PDC 2008.
Fabiano Belmonte
Lder de Projetos da Compugraf foi senior Architect da InfoMoney.com, especialista em aplicaes eBusiness com larga experincia em B2B (Submarino.Com e Saraiva.Com). Trabalha h 5 anos com a tecnologia .Net, aplicando conhecimentos nas diversas reas: instituies financeiras (sistema SPB), e-Commerce, gerenciamento logstico entre outras. Trabalhando com Visual Studio desde suas primeiras verses, responsvel pela implementao de uma Metodologia de trabalho e melhoras significativas no resultados e na qualidade do time de Desenvolvimento de muitas empresas por onde passou como (Saraiva.Com) e ferramentas como TFS (Team Foundation Server). Foi palestrante em eventos como Codificando. NET 2008 e outros eventos sobre Tecnologia .NET. Twitter.com/fabianobelmonte
Como podemos ver na figura acima, voc pode chamar o mtodo (s), tais como x.ToString (), y.ToLower (), z.Add (1) e ele ir funcionar sem problemas. Esta mais uma feature que nos oferece muita flexibilidade.
Codificando.net e-magazine
Quero explorar mais o C# 4.0, pretendo fazer isso separando por features. Espero que gostem! Bons Cdigos...
www.codificando.net
68
No ltimo dia 15/04 foi a vez de Ribeiro Preto, cidade localizada no interior de So Paulo, a aproximadamente 300 kilmetros da capital receber o evento. O evento foi realizado nas dependncias do Stream Hotel bem no centro da cidade e contou com as participaes dos MVP's Renato Haddad (http:// weblogs.asp.net/renatohaddad/), Fbio Hara (http://fabiohara.spaces.live.com/), Alex Schulz (http://blogs.msdn.com/alexschulz/), dentre outros. O evento teve incio as 9h00 no auditrio central do hotel com desenvolvedores e pessoal de infra juntos. Nesta primeira fase, Fbio Hara apresentou a agenda do dia e o cenrio no qual as palestras (todas com 100% de prtica) seriam baseadas. As 10h00 o grupo foi dividido em dois sendo que, os desenvolvedo-
www.codificando.net
69
(dirigidos por Renato Haddad e Alex Schulz) e o pessoal de infra continuou no auditrio central (comandados por Fbio Hara e demais colaboradores). Em ambas as salas assuntos tcnicos foram apresentados e, como j mencionado, palestras 100% prticas com solues apresentadas em tempo real. Aps a pausa para o almoo (que ocorreu das 12h30 s 13h30), cada grupo voltou para suas respectivas salas para a continuao do evento. Os grupos voltaram a reunir-se no auditrio central as 16h00 quando alguns assuntos de interesse geral (como o Windows 7, por exemplo) foram apresentados e alguns sorteios tambm foram realizados. O evento contou com a participao de aproximadamente oitenta pessoas e todos, sem exceo, apreciaram o evento. Abaixo o parecer de Fbio Hara, um dos palestrantes no evento em seu blog. "[...] O feedback foi excelente: todos gostaram do modelo que apresentamos: nada de PPT apenas demos focadas em problemas e como resolv-los. Tenho percebido que muitas pessoas fazem palestras de produtos preocupadas em mostrar recursos (features). Este tipo de modelo de palestra agrada o publico que j conhece uma ferramenta e deseja saber exatamente cada funcionalidade. Porm se voc quer mostrar o que um produto pode fazer por voc ento importante que voc mostre um problema e como voc pode resolver usando determinado recurso. Esse feedback nos tivemos do publico e
foi muito bom saber que quase todos conseguiram entender bem quais as vantagens do Windows 7, Windows Server 2008 R2, Exchange 2010, Office 2010, SharePoint 2010, SQL 2008 R2 e Visual Studio 2010." As prximas etapas do Road Show esto relacionadas abaixo. Se voc est prximo a uma destas cidades, no perca a oportunidade de participar de um evento de alto nvel com os principais colaboradores da Microsoft em cada rea. 08/05/2010 So Paulo 11/05/2010 Campinas 13/05/2010 Cuiab Fabrcio 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.
www.codificando.net
70
Vimos um cenrio da Empresa AdventureWorks com os diversos problemas que uma empresa enfrenta quando para de investir em TI e depois enxerga que precisa correr para recuperar mercado, mas no tem capital para investimentos pesados em TI. Solues nativas apresentadas dentro dos produtos, onde alguns so gratuitos (Hyper-V Server, SharePoint 2010 TF, etc...)
Acompanhados do: Rodrigo Munhoz (Customer and Partner Satisfaction Manager) e Murilo Curti (Time do Windows 7 e Grenn Light) A galera da comunidade de Fortaleza fez mais que o esperado, foram mais de 150 pessoas para prestigiar o Road show. Ponto pra Fortaleza, das 10 primeiras etapas ns fomos o maior publico e mais interativo (palavras dos palestrantes). Ao final do evento, um intenso "Perguntas & Respostas" muito produtivo e empolgante, onde por questes de tempo no foi mais adiante.
www.codificando.net
71
Final de evento e uma foto pra registrar o dia (Rodrigo Munhoz, Herleson Pontes, lvaro Rezende, Renato Haddad, Jensen Clayton, Rogerio Cordeiro e Rodrigo Dias). No acabou por aqui! Aps o evento, os influenciadores da comunidade conversavam com o time da Copa Microsoft. Feedback pra l e pra c e todos ganharam os parabns pelos excelentes trabalhos realizados e melhor ainda... vem mais novidade em breve. Jensen Clayton
MCSA Windows Server 2003, MCTS Windows Server 2008 e Microsoft Student Partner. Cursa Redes de Computadores na UNICE. Trabalha com TI desde 1999, e vem se especializando na plataforma Microsoft com foco em Servidores e Virtualizao. Integrante da comunidade TechNet e colaborador ativo do grupo MSFor e Office.CE. Administrador de Redes do Sistema Verdes Mares. Blog: http://jensenclayton.spaces.live.com
www.codificando.net
72
www.codificando.net
73
nhea as novas funcionalidades do Windows Server 2008 R2 e exemplos de estudo de caso real no Brasil. Sharepoint 2010 Maurcio Davino MCIT - PRO Enterprise Project Management With Microsoft Office Project Server 2007, MCTS - Microsoft office project 2007, Managing Projects, MCTS - Microsoft Office Project Server 2007, managing Projects, MCTS - Microsoft Office SharePoint Server 2007, configuration, MCTS - Microsoft Office SharePoint Services 3.0, configuration System Center Essentials 2007 - Janiel Pereira MCSA/MCP Windows Server/XP/ MCDST Desenvolvimento Gerenciamento do Ciclo de Vida da Aplicao com o Visual Studio Team System 2010 (ALM com VSTS) - Dlio Dessaune Gerente de Projetos MCSD / MCAD / MCSD / MCT Silverlight 3 - Fabriccio Correia Bernardes Desenvolvedor Silverlight/Sharepoint SQL 2008 R2 - Daniel Barbosa de OliveiraMCAD.NET / MCDBA / MCTS - SQL Server 2005 / MCT / Informatica Certified Design Parceria fechada com o Sebrae-Es atravs da Juliana Berton, a quem devemos nosso especial agradecimento por viabilizar o cofee-break . Ao provedor de hosting capixaba
VOL.net.br que forneceu um link de internet para a realizao da conferncia nacional. E a todos os demais que colaboraram com divulgao ou cesso de profissionais para ministrar palestras. Seleo de fotos:
Credenciamento
Abertura
Palestra DEV
www.codificando.net
74
www.codificando.net
75
a marca mais impressionante do evento foi mesmo o nmero de participantes: mais de 830 pessoas, sendo definitivamente considerado o maior evento j realizado pela Comunidade Tcnica Microsoft! Voc pode ver tudo que aconteceu na UNIVEM no dia 10/04, as palestras, fotos no nosso site : www.marilia.techday.net.br. Caso tenha interesse em levar esse grande evento a sua cidade/universidade/regio, entre em contato com a gente pelo email contato@techday.net.br. Teremos o maior prazer de TREMER tudo, como fizemos em Marlia. Principais Organizadores do Evento: Arnaldo Martins Hidalgo Junior Elvis Fusco Laerte Poltronieri Jnior Nilton Pinheiro Palestrantes: Diego Nogare (MVP) SQL Azure Database. Evilzaro Alves (MVP) Introduo ao desenvolvimento de Sistemas Conectados com WCF 4.0. Fabiano Amorim Entendendo como os Joins funcionam de uma vez por todas!
Fabrcio Catae (Microsoft) Inside SQL Server: Como funciona um banco de dados? Armazenamento de dados no SQL Server. Felipe Ferreira O que a plataforma .NET pode fazer por voc desenvolvedor? Laerte Poltronieri Junior Automatizando Processos no SQL Server com Powershell e SQL Server Powershell Extensions. Nilton Pinheiro (MVP) Conhecendo o SQL Server 2008 Express - A edio grtis do SQL Server. Rob Ranches (MVP) Exchange 2010 - Cozinhando com o correio. Rodolfo Roim (Microsoft) SharePoint 2010 - O que mudou? Thiago Zavaschi Self-service Business PowerPivot.
Intelligence
com
www.codificando.net
76
Laerte Junior
Certificado MCDBA com mais de 8 anos de atuao com SQL SERVER, fascinado por cdigos e scripts, escreve artigos para MCDBABrasil, Imasters e Simple-Talk aonde possue um blog tambm. Possui outro blog em portugus aonde coloca suas experincias com SQL SERVER e Powershell . Moderador do Forum TechNet - The Official Scripting Guys Forum e Developer do Projeto CODEPLEX - SQL Server Powershell Extensions. www.laertejuniordba.spaces.live.com , www.simple-talk.com/author/laerte-junior , www.codeplex.com/sqlpsx , www.twitter.com/laertejuniordba
www.codificando.net
77
www.codificando.net
79
No perodo da tarde foi apresentada a arquitetura Team Foundation Server 2010 e Sharepoint 2010 para desenvolvedores, como a integrao Sharepoint 2010 + Visual Studio 2010 vai facilitar e deixar a ferramenta bem mais acessvel para realizar a customizao de novos modelos de sites. Road Show foi uma tempestade de informaes e o melhor tudo isso com praticamente zero (zero) de PPT? Isso mesmo, tudo na base da demo. Inclusive a metodologia usada uma excelente idia e com certeza mais proveitosa para um evento desse porte, por ser um evento o dia todo no fica cansativo e o pblico fica mais empolgado vendo tudo funcionando conforme cada nova funcionalidade dos produtos apresentada. Chegando ao fim do evento as duas tracks foram unidas novamente, foi mostrado como do interesse da Microsoft que as reas de Infra e Dev andem juntas, uma alinhada outra, assim entra uma 'pequena' pea da famlia System Center para auxiliar nessa unio. Perguntas e respostas aconteceram para finalizar as apresentaes, os palestrantes ficaram a disposio para esclarecer as duvidas do pessoal. Alm do conhecimento, muitos saram com mochilas, CD de treinamento, bons com o sorteio de brindes.
No fim do dia a comunidade BrasilDotNet participou da mesa redonda juntamente com os palestrantes, discutindo os frutos do evento e a realidade da comunidade em Braslia que hoje est ficando cada dia mais ativa. Road Show de Braslia foi um sucesso, com 120 inscritos e 119 presentes, incluindo Janny que veio de Minas Gerais e eu de Goinia. Palestrantes da Copa Microsoft esto de parabns por mais uma realizao. Algumas fotos:
Track de Infra
Palestrantes de infra
Track de Dev
Rogrio Cordeiro
Dev
Perguntas e Respostas
www.codificando.net
80
Sara Barbosa
estudante de Tecnologia em Segurana da Informao. Membro do conselho da Comunidade WININFO, comunidade Microsoft de Infra Estrutura do Centro-Oeste. Mais detalhes blog: http://sarajbarbosa.spaces.live.com/ Twitter: @sarabarbosa
www.codificando.net
81
Pblico do CLGO
Um resumo bacana que descreve o sucesso do Community Launch em Goinia: 2 grupos envolvidos: DevGois.NET e WININFO 5 Empresas patrocinantes 3 Empresas e 1 Organizao de apoio 5 palestras + 1 General Session 8 Palestrantes: 3 MVP: Alvaro Rezende(GO), Nelson Kolarik (DF), Rodrigo Kono (GO) 4 MCP e MCT: Alliston Carlos, Ely Marques, Marcelo Paiva, Weder Lima 1 MSP: Jos Lino Neto
www.codificando.net
82
Com todos esses nmeros e provas, o que resta a certeza que comunidade Goiana est unida para compartilhar conhecimento, incentivar e buscar novos talentos. Quem seguiu a #CLGO acompanhou todos os detalhes. Comunidades Wininfo e DevGoias.NET juntas na realizao e organizao desse evento que foi sucesso e que vamos ter muitos mais nesse ano de 2010. Mais fotos:
http://www.flickr.com/groups/copamicrosoft/
Sara Barbosa
estudante de Tecnologia em Segurana da Informao. Membro do conselho da Comunidade WININFO, comunidade Microsoft de Infra Estrutura do Centro-Oeste. Mais detalhes blog: http://sarajbarbosa.spaces.live.com/ Twitter: @sarabarbosa
www.codificando.net
83
www.codificando.net
84
Fechando o evento Carlos Eduardo apresentou como trabalhar com arquivos Office utilizando o Open Xml. Foi uma palestra incrvel. Todos ficaram de queixo cado com a versatilidade e o poder da ferramenta. Para coroar o evento ao final ocorreu o sorteio de brindes: livros, squeezes, copos, camisetas, licenas de software e outros itens mais. O feedback da comunidade e dos presentes foi simplesmente muito positivo. A cada palestra, a cada momento das palestras, os presentes enviavam mensagens de elogio e divulgao no twitter utilizando a hashtag do evento. Sem dvidas a comunidade .NET do Rio de Janeiro ganha muito com a realizao deste evento, e isto se reflete na comunidade .NET de todo Brasil. Todos esperam ansiosos por mais eventos do grupo .Net Architects na cidade maravilhosa.
Vinicius Quaiato
vinicius.quaiato@gmail.com www.viniciusquaiato.com Trabalha com desenvolvimento de software h cerca de 4 anos, especificamente com tecnologias Microsoft .NET. Aficcionado por arquitetura e boas prticas. Atualmente trabalha com desenvolvimento e arquitetura de aplicaes na Envision Tecnologia. Atua na comunidade .Net Architects e coordena o grupo de Coding Dojo da mesma. Tem ministrado palestras sobre boas prticas e as novidades do .Net Framework. Escreve artigos em seu blog www.viniciusquaiato.com e na revista .Net Magazine. Est presente no twitter em @vquaiato.
www.codificando.net
85
Durante o evento tivemos palestra extra do Diego Nogare falando sobre Comunidades, MSP, MVP e tambm uma explicao sobre o que era a comunidade Codificando.NET, em seguida Lucas Romo apresentou a comunidade Azure services BR ( www.azureservicesbr.ning.com ) e eu apresentei a comunidade Silverlight Brasil ( www.silverlightbrasil.ning.com ), por fim tivemos uma participao virtual mas especial do grande Luciano Palma ( @LucianoPalma ) falando sobre o "Comear pelo Porque ?" Mensagem esta aclamada e aplaudida por todos no auditrio. E por fim foi sorteado e entregue alguns brindes ao presentes. Lembrando apenas que o evento teve patrocnio das empresa Benner Logstica - KeepIt @keepit_brasil - Telerik @telerik.
86
Djonatas Tenfen
Possui certificado MCP. Desenvolvedor de Softwares h 7 anos, grande parte deles voltado a tecnologia Borland Delphi. H 2 anos est se especializando em desenvolvimento .NET e Silverlight. Trabalha como desenvolvedor C# na empresa Benner Sistemas UNEP Logstica, localizada na cidade de Blumenau (SC). lider da comunidade Silverlight Brasil, colaborador e moderador das comunidades Azure Services BR, WCF Brasil e colaborador ativo da Revista The Club Megazine escrevendo artigos sobre .Net e Silverlight.
www.codificando.net
87
evento foi realizado na PUC em Londrina, e foi mais uma edio do Londrina TechDay www.londrinatechday.com.br. Fotos de Maring
88
Fotos de Londrina
www.codificando.net
89
Novidades da IDE Visual Studio 2010 Novidades do .NET Framework 4.0 ASP.NET Web Forms 4 ASP.NET MVC Entity Framework 4.0 TDD no Visual Studio 2010 Diagramas de Arquitetura Linguagens e programao dinmica
Palestrantes:
Giovanni Bassi Victor Cavalcante Leandro Daniel Fabio Margarito Vinicius Quaiato Daniel Fonseca Castro
Algumas fotos: Ficamos sabendo das novidades demonstradas e aproveitei para conhecer amigos que sempre mantenho contato pelo twitter, e-mail. Parabenizo todos os palestrantes pelo excelente material e preparao do evento. As apresentaes foram 100% prticas. Demos e mais demos.
www.codificando.net
90
Perguntas e respostas aconteceram para finalizar as apresentaes. Alm do conhecimento adquirido, no final tiveram sorteio de brindes. Fernanda Sallai
(
fernanda.sallai@codificando.net).
Bacharel em Sistemas de Informao e atua na rea de desenvolvimento. Colaboradora do Portal Linha de Cdigo, editora da revista Codificando.net e escreve periodicamente em seu blog www.fernandasallai.com e no twitter: @fernandasallai.
www.codificando.net
91
Parabns a todos os palestrantes: Andr Baltieri , Lucas Romo, Evilzaro Alves, Felipe Prata Borges, Mayra Martho, Daniel Imamura, Israel Ace e Thiago Zavaschi pela excelentes palestras e demos. Algumas fotos:
Contedo apresentado:
Criando Workflows de negcios com Workflow Foundation 4.0 Windows Azure com Visual Studio 2010 ASP.NET MVC 2 e ADO.NET Entity Framework 4.0 Novidades do C# 4.0 SharePoint como soluao de negcios (participao FTE da Microsoft Consulting Services) Introduo ao Windows Communication Foundation (WCF)
Galera reunida.
www.codificando.net
92
Fernanda Sallai
(
fernanda.sallai@codificando.net).
Bacharel em Sistemas de Informao e atua na rea de desenvolvimento. Colaboradora do Portal Linha de Cdigo, editora da revista Codificando.net e escreve periodicamente em seu blog www.fernandasallai.com e no twitter: @fernandasallai.
www.codificando.net
93
www.codificando.net
94
talo Chesley
graduando em Anlise e Desenvolvimento de Sistemas, pela Universidade Vale do Rio Doce. J integrou equipes de suporte de sistemas em Delphi. Atualmente trabalha com Desenvolvimento de Sistemas em ASP.NET, Windows Forms e WPF e compe a equipe de Desenvolvimento da UNIVALE, como estagirio. Mantm o blog http://italochesleytech.wordpress.com. Participa ativamente de Comunidades de Desenvolvimento.
www.codificando.net
95
e-magazine
O ASP.NET Web Forms herda caractersticas que o ASP.NET MVC trazia, como: rotas, controle maior de HTML, controle sobre nome de controles, etc... porm ainda existem caMentira nmero 1: o ASP .NET MVC no a evoluo do ractersticas que diferem totalmente uma ASP.NET Web Forms! da outra, como: controle total do HTML Mentira nmero 2: o ASP.NET MVC no vai descontinuar de for- no caso do ASP.NET MVC, ciclo de carma alguma o ASP.NET Web Forms! regamento da pgina gerencivel no ASP.NET Web Forms.
Verdade: o ASP.NET MVC mais uma possibilidade no desenvolvimento ASP.NET, inclusive o ASP.NET MVC e Web Forms Verdade final tem o mesmo core entre eles... o ASP.NET Core.
Quem for um desenvolvedor web e utiliza o ASP.NET tenha certeza que a plataforma evolui e evoluir cada vez mas... o Core do ASP.NET incrivelmente poderoso e Mentira nmero 1: O ASP.NET MVC no mais produtivo do que cada vez se tornar mais. Os desenvolvedores ganham muito com essas poso ASP.NET Web Forms Mentira nmero 2: O ASP.NET Web Forms no mais produtivo sibilidades e o ideal que tenhamos um do que o ASP.NET MVC bom conhecimento das possibilidades para que as escolhas no sejam feitas de Verdade: as duas tecnologias proporcionam recursos de produtivi- forma inadequada. Tambm muito comentado o assunto produtividade... ouvimos por ai que x ou y mais produtivo do que o outro.
dade e so desenvolvidas no Visual Studio 2010/2008. O ndice de produtividade vai da experincia da equipe e pessoas... em seis No escolha uma tecnologia x por meses com ASP.NET MVC, uma equipe no vai ser mais produtimodismo... justifique, venda para voc va do que outra com um ano de experincia em ASP.NET Web mesmo a idia que aquilo ser bom ou Forms e vice-versa.
O poder das duas tecnologias muito grande, inclusive uma possibilidade e uma tendncia muito grande que cada vez mais as duas tecwww.codificando.net
no para o projeto/cliente e como j disse outras vezes... ASP.NET MVC ou ASP.NET Web Forms? Tanto faz, desde que seja .NET
96