Professional Documents
Culture Documents
Edio 18 Nmero 18 Ano 04 2010 EDITORES Alexandre Tarifa Diego Nogare Emerson Facunte Sergio Gonalves Fernanda Sallai REVISO Sara Barbosa Fabrcio Sanchez Erick Lopes EDITORAO E DIAGRAMAO Adriano Almeida Fabiano Rodrigues COLABORADORES Alliston Carlos Antonio Lucas Finotti Pereira Anderson Castro Everton Jos Benedicto Fabrcio Sanchez Fabrcio Frana Lima Fernando Gonalves talo Chesley Leandro Alves Santos
Produzido por:
www.codificando.net
03:. Editorial
66:. Close ( )
Editorial
Ol leitores da revista Codificando.Net e-Magazine, nesse editorial no poderei detalhar sobre os artigos que compem a revista, pois tenho muitos comunicados importantes a fazer. Encerro nessa edio de nmero 18 minha passagem pela revista. com imenso prazer e satisfao que fao parte dessa equipe desde a sua edio de nmero 9 e sou editora desde a edio de nmero 15. Foi 1 ano e 8 meses de pura dedicao e alegria para transmitir a vocs, leitores, contedo de qualidade. Agradeo a toda a equipe da revista Codificando.Net e-Magazine que seguiu ao meu lado fazendo dessa uma referncia para muitos profissionais da rea. Alm do meu desligamento da revista com pesar que falo do desligamento de mais 3 profissionais, so eles os diagramadores Adriano Almeida e Fabiano Rodrigues e o revisor Fabrcio Sanchez. Agradeo a eles por todo o empenho e dedicao que tiveram revista e desejo todo sucesso do mundo para todos. Mas muita calma pessoal, pois, tenho 2 comunicados muito bons para fazer. Um deles a entrada do Erick Lopes como revisor da revista e a do novo editor Cleber Dantas. Profissionais esses, que tenho certeza, faro o melhor de si para dar continuidade ao trabalho que j vem sendo elaborado na revista e para o crescimento da mesma. Podemos dizer que se fecha um ciclo e comea se outro. Fernanda Sallai
"Encerrando ciclos. No por causa do orgulho, por incapacidade, ou por soberba, mas porque simplesmente aquilo j no se encaixa mais na sua vida." (Fernando Pessoa)
Cleber Dantas
Erick Lopes
EDITORIAL
e-magazine
Alguns de vocs devem estar neste momento com um peso na conscincia por no terem uma resposta para esta simples pergunta. Lembraram que j leram em algum artigo na internet uma pessoa falando sobre um comando chamado DBCC CHECKDB que verifica se uma database est corrompida, mas mesmo assim no fizeram nada no seu banco de dados. Outros sabem mais ou menos o tempo que levariam para descobrir uma corrupo, pois realizam esse procedimento manualmente quando possuem um tempo livre e se lembram de executar. Entretanto, tambm tenho certeza que existem vrias pessoas que j possuem uma rotina que checa a consistncia de seu banco de dados e sabem exatamente o tempo que levaria para descobrir se existe uma database corrompida no seu ambiente. Parabns para estas pessoas. Acredito que todos vocs j ouviram falar no comando DBCC CHECKDB presente no SQL Server. Este comando checa a consistncia de todos os objetos de uma base de dados examinando sua estrutura fsica e lgica a fim de identificar se existe alguma corrupo nesta base. Geralmente, as pessoas s procuram conhecer esse comando quando encontram algum problema de corrupo no seu ambiente atravs de uma
mensagem de erro. Por exemplo, quando um usurio faz uma leitura de um dado corrompido em alguma tabela. Entretanto, uma corrupo deve ser encontrada antes do usurio, para que seja possvel resolv-la o mais rpido possvel e esse problema no chegar ao usurio final. Voc que responsvel por alguma base de dados, sendo um Administrador de Banco de Dados ou um Desenvolvedor que cuida da base de dados de seus prprios sistemas, deve criar um procedimento para realizar a procura por dados corrompidos ou inconsistentes em todas as suas bases de dados com a menor freqncia que seu ambiente permitir. Mas Fabrcio, eu tenho uma tima rotina de backup, onde armazeno o backup de todas as minhas databases nos ltimos 10 dias, ento caso algum me relate um erro de algum dado corrompido, basta eu restaurar um backup para resolver o meu problema, certo? Nem sempre. Imagine que voc descubra uma corrupo de uma database duas semanas depois dela ter ocorrido. Na sua tima rotina de backup, voc guardou 10 dias de backup com dados
Out / Nov - 2010
Codificando.net e-magazine
|
www.codificando.net
e-magazine
corrompidos. Voc no tem uma base de dados limpa para realizar a recuperao dos seus dados, o que pode ocasionar uma perda de dados valiosos dependendo do tipo de corrupo gerada. Pense em como voc chegaria para o seu chefe e diria que perdeu dados de umas das tabelas mais importantes do seu ambiente e no tem como recuperlos. Espero que ningum tenha que passar por essa experincia. Em meu ambiente, possuo um job dirio que chama uma Stored Procedure que executa o comando DBCC CHECKDB para todas as minhas databases e todos os dias recebo um relatrio com o resultado da execuo desse comando. Demonstrarei em seguida como fao esse acompanhamento em meu ambiente, de modo que voc tambm possa utiliz-lo. Claro, que cada ambiente tem suas particularidades que podem tornar mais difcil o desenvolvimento dessa rotina, tais como: possuir uma janela de tempo para a execuo, recursos de hardware disponveis, databases com tamanhos muito grandes e espao disponvel no disco que armazena a database Tempdb. Mostrarei como fao no meu ambiente para que sirva de parmetro na criao de sua prpria rotina, contudo, devem ser realizadas adequaes e testes necessrios para a implantao em seu ambiente. Inicialmente, criei uma Stored Procedure que realiza o comando DBCC CHECKDB das databases do meu servidor. A Listagem 1 apresenta o cdigo para realizar esta tarefa:
CREATE PROCEDURE dbo.stpCHECKDB_Databases AS BEGIN DECLARE @Databases TABLE( Id_Database INT IDENTITY (1,1), Nm_Database VARCHAR(50)) DECLARE @Total INT, @Loop INT, @Nm_Database VARCHAR(50) /* Caso no deseje fazer o check de alguma database basta retir-la na clusula WHERE*/ INSERT INTO @Databases (Nm_Database) SELECT Name from Master.dbo.Sysdatabases WHERE Name not in ('Tempdb')
SELECT @Total = max(Id_Database) FROM @Databases SET @Loop = 1 WHILE (@Loop <= @Total) BEGIN SELECT @Nm_Database = Nm_Database FROM @Databases WHERE Id_Database = @Loop DBCC CHECKDB(@Nm_Database) WITH NO_INFOMSGS SET @Loop = @Loop + 1 END END
Listagem 1 - Utilizao da opo NO_INFOMSGS.
Codificando.net e-magazine
|
Na Listagem 1, pode-se notar a utilizao da opo NO_INFOMSGS para reduzir o resultado desse comando e retornar apenas as informaes essenciais para identificar possveis erros. Tambm possvel identificar que a database Tempdb ignorada. Caso voc no queira que esse procedimento seja executado para outras databases, basta adicion-las na clusula IN juntamente com a Tempdb. Alm de no ter necessidade de rodar um CHECKDB para o Tempdb, tambm pode existir alguma database no
www.codificando.net
e-magazine
seu ambiente que seja restaurada ou clonada em outro servidor. Nesse caso, no necessrio fazer essa verificao mais de uma vez para a mesma database. O prximo passo identificar uma janela no seu ambiente onde exista menos concorrncia por recursos do servidor e agendar a execuo da procedure stpCHECKDB_Databases. Depois de identificado o melhor horrio de execuo, basta criar um job com a periodicidade que voc definiu para chamar essa procedure. possvel visualizar o OUTPUT da execuo do comando DBCC CHECKDB de trs maneiras: Na prpria conexo que executa o comando manualmente, como por exemplo, no Management Studio. No Log do SQL Server. No Microsoft Windows application event log.
-- Seleciona o nmero de arquivos. INSERT INTO #logF EXEC sp_enumerrorlogs DECLARE @TSQL NVARCHAR(2000) DECLARE @lC INT SELECT @lC = MIN(ArchiveNumber) FROM #logF --Loop para realizar a leitura de todo o log. WHILE @lC IS NOT NULL BEGIN INSERT INTO #TempLog EXEC sp_readerrorlog @lC SELECT @lC = MIN(ArchiveNumber) FROM #logF WHERE ArchiveNumber > @lC END
Listagem 2 - Query que faz a leitura dos Logs e armazena em uma tabela NO_INFOMSGS.
Eu utilizo o Log do SQL Server para buscar as informaes da execuo do comando DBCC CHECKDB em minha base de dados e retorno essas informaes para uma planilha que recebo diariamente atravs de um pacote do Integration Services. A Listagem 2, faz a leitura dos arquivos de Log do SQL Server e armazena o resultado em uma tabela temporria:
CREATE TABLE #TempLog ( LogDate DATETIME, ProcessInfo NVARCHAR(50), [Text] NVARCHAR(MAX)) CREATE TABLE #logF ( ArchiveNumber LogDate LogSize
Recuperado todo o contedo do log do SQL Server, com a Listagem 3 filtramos esse resultado para visualizarmos apenas as informaes referentes execuo do comando DBCC CHECKDB. Deve-se filtrar a query atravs da coluna Logdate de acordo com o horrio agendado para a execuo dessa rotina. No exemplo da listagem 3, retornado todas as execues realizadas no dia anterior.
Codificando.net e-magazine
SELECT LogDate, substring(Text,charindex ('found',Text), charindex('Elapsed Time',Text) charindex('found',Text)) Possiveis_Erros, Text Texto_Completo FROM #TempLog WHERE Logdate >= cast(floor(cast(getdate ()-1 as float)) as datetime) and logdate < cast(floor(cast (getdate() as float)) as datetime) and Text like '%CHECKDB%' ORDER BY LogDate
Listagem 3 - Filtrando os resultados.
Esta query retorna a data de execuo do comando, uma substring do texto do log apenas com a informao de possveis
www.codificando.net
e-magazine
erros para facilitar a visualizao e o texto completo gerado no log do Sql Server (figura 1).
Logo, antes de criar um procedimento para fazer um DBCC CHECKDB em todas as suas databases, voc deve realizar um teste com apenas uma base em uma janela de pouca utilizao do banco de dados para identificar o tempo dessa execuo. Com isso, voc ter a ideia de quantas databases voc pode verificar por dia para criar a sua rotina. Cabe salientar, que tambm possvel acompanhar o progresso da execuo desse comando na dmv sys.dm_exec_requests. Na Listagem 4, a coluna Percent_Complete retorna o percentual de execuo de um comando DBCC que est sendo executado no banco de dados:
SELECT Percent_Complete,* FROM sys.dm_exec_requests WHERE Command LIKE '%DBCC%'
Listagem 4 - Retornando o percentual de execuo.
Para que vocs possam visualizar como seria o resultado desta query no caso da existncia de uma database corrompida, baixei no blog do Paul Randal um exemplo de uma database corrompida e chamei de DBCorrompida1. Em seguida rodei o comando DBCC CHECKDB e o resultado gerado no log do Sql Server pode ser visto na figura 2:
O tempo de execuo do comando DBCC CHECKDB depende de uma srie de fatores, tais como: Tamanho da Database. Recursos fsicos disponveis no servidor: Memria, I/O, disco e CPU. Concorrncia de Memria, I/O, CPU e de updates que estejam sendo realizados na base de dados que est sendo checada. Velocidade do disco onde o Temdb fica armazenado.
Caso voc possua uma base de dados muito grande, para reduzir o tempo de execuo desse procedimento, voc pode utilizar a opo WITH PHYSICAL_ONLY, que realiza apenas uma verificao da integridade fsica da sua database. Todavia, ainda necessria uma verificao completa dessa base com uma menor frequncia. No meu ambiente de trabalho, como j disse anteriormente, recebo essa informao em uma planilha juntamente com outras informaes do meu banco de dados, o famoso CheckList dirio que todo DBA deve realizar. Como foi preciso ler todo o arquivo de log do SQL Server para identificar a execuo do comando DBCC CHECKDB, tambm temos todas as outras informaes geradas no Log do
Codificando.net e-magazine
|
www.codificando.net
e-magazine
SQL Server disponveis. Com isso, inclu mais uma aba na planilha com todas essas informaes do Log, obtendo um controle muito maior de tudo o que acontece diariamente no meu banco de dados. Respondendo a pergunta inicial desse artigo, no meu ambiente eu demoro apenas um dia para descobrir se uma database est corrompida. E voc, demoraria quanto tempo? Espero que possa ter te ajudado h diminuir esse tempo.
Fabrcio Frana Lima Bacharel em Cincia da Computao pela Universidade Federal do Espirito Santo, trabalha com SQL Server desde 2006, possui os ttulos MCP, MCTS e MCITP Database Administrator em SQL Server e tambm mantm um blog sobre SQL Server: http://fabriciodba.spaces.live.com
Codificando.net e-magazine
|
www.codificando.net
e-magazine
Hardware Relevado na Espanha em 15/02 Mobile World Congress o Windows Phone 7 Series o novo sistema operacional da Microsoft para dispositivos mveis que promete balanar o mercado.
Caractersticas Touch (4 ou mais pontos de contato com a tela). Sensores: A-GPS, Acelermetro, Bssola. Cmera: 5 megas pixels ou superior. GPU: DirectX 9
Figura 1 - Hardware.
Todos os aparelhos Windows Phone 7 tero trs botes: Start, com o cone do Windows, para acesso inicial. Search com servios de buscas Bing. Back, para voltar tela anterior.
480
Figura 2 - Resoluo Padro.
www.codificando.net
e-magazine
Interface Os servios e aplicativos foram organizados em cinco centrais (Hubs): People Pictures Docs Music & Vdeo Games
Figura 4 - Hub-office.
Hub-People Responsvel por informaes dos seus contatos inclusive nas redes sociais, update de fotos e mensagens das redes (figura 3).
Hub-Pictures Nesse hub voc tem acesso a sua galeria de imagens, fotos podendo interagir com as redes sociais (figura 5).
Figura 5 - Hub-pictures.
Codificando.net e-magazine
HubGames
Figura 3 - Hub-people.
Hub-Office Nesse hub voc ter acesso ao pacote Office e integrao com SharePoint, conforme figura 4.
Figura 6 - Hub-games.
www.codificando.net
10
e-magazine
Hub-Music + Video Para quem j usurio do Zune percebera que ele esta presente em seu telefone incluindo todas as funes sociais da rede do Zune conforme figura 7.
Sua interface inovadora e inspiradora com o codnome de Metro a interface do WP7 promete uma experincia totalmente nova ao usurio (figuras 8 e 9).
Figura 9 - Interface.
Ciclo de vida A base de desenvolvimento dos aplicativos para WP7 ser o Silverlight, e para desenvolver no ser preciso uma verso especifica ser simplesmente Silverlight.
Codificando.net e-magazine
Inicialmente vamos entender como funciona o ciclo de vida de uma aplicao para WP7 (figura 10).
www.codificando.net
11
e-magazine
Em relao instalao e distribuio da aplicao no Windows Phone 7 ela s poder ser feita via MarketPlace da Microsoft que atualmente funciona da seguinte forma, voc faz um cadastro e paga-se em torno de R$ 215,00 por ano para ter seus aplicativos disponveis aos usurios , bem similar a AppleStore. A Microsoft disse que ser publicado os critrios para desenvolvedores WP7. Arquitetura
Desenvolvimento Quando falamos em desenvolvimento para Windows Phone podemos fazer diversas aplicaes usando Silverlight, e podemos criar jogos usando XNA. Vamos dar os primeiros passos no desenvolvimento de uma aplicao para WP7. Voc vai precisar: Kit de desenvolvimento para o Windows Phone 7:
- Visual Studio 2010 Express for Windows phone - Windows Phone Emulator - Silverlight 4 Tools For Visual Studio - XNA Game Studio 4.0 - Microsoft Expression Blend for Windows Phone Link para Download: http://migre.me/1o49p (Windows Phone Developer Tools RTW)
Figura 11 - Arquitetura do Windows Phone.
Usando o Visual Studio 2010 vamos iniciar um novo projeto. Vamos criar um projeto do tipo Silverlight for Windows PhoneWindows Phone Application e vamos cham-lo de nosso conhecido HelloWorld, perceba que tambm podemos criar um projeto do tipo XNA para jogos no Windows Phone, Panorama e Pivot Application veja na figura 13.
Codificando.net e-magazine
Figura 12 - Framework.
www.codificando.net
12
e-magazine
Na listagem 1 podemos ver a estrutura default de nossa aplicao (XAML). Ele contem dois TextBlock o primeiro contendo o nome da aplicao e o segundo o titulo da pagina. Em seguida um grid onde iremos colocar os elementos de nossa aplicao (listagem 1).
Codificando.net e-magazine
Listagem 1 - XAML.
Fique a vontade para alterar no nome de sua aplicao e o ttulo da pgina. Agora vamos ver no modo Design (figura 14).
Vamos trabalhar no evento click de nosso Button. Adicione o texto Hello World ao nosso TextBlock dentro do evento click.
www.codificando.net
13
e-magazine
Veja que no construtor de nossa pgina temos o SupportedOrientations e nesse ponto que vamos definir que nossa aplicao poder ser visualizada em modo retrato ou paisagem usando o acelermetro do hardware (listagem 2).
Nessa verso RTW lanada dia 15-09 temos a opo de criar um aplicativo do tipo Windows Phone Panorama Application (figura 18).
Vamos iniciar um projeto Panomara Application (figura 19). Vamos compilar nossa aplicao e ver o emulador do WP7, conforme figuras 16 e 17.
Codificando.net e-magazine
www.codificando.net
14
e-magazine
Figura 21 - Aplicao funcionando com trs painis .
Windows Phone e XNA Game Studio Outro ponto forte do WP7 ser a sua capacidade de rodar jogos de forma fantstica alm de sua integrao com a LIVE. possvel criar jogos para WP7 usando XNA Game Studio 4. Em agosto foi liberada uma lista dos jogos para WP7. 3D Brick Breaker Revolution" (Digital Chocolate) "Age of Zombies" (Halfbrick) "Armor Valley" (Protg Games) "Asphalt 5" (Gameloft) "Assassins Creed" (Gameloft) "Bejeweled LIVE" (PopCap) "Bloons TD" (Digital Goldfish) "Brain Challenge" (Gameloft) "Bubble Town 2" (i-Play) "Butterfly" (Press Start Studio) "CarneyVale Showtime" (MGS) "Castlevania" (Konami Digital Entertainment) "Crackdown 2: Project Sun-
burst" (MGS) "De Blob Revolution" (THQ) "Deal or No Deal 2010" (i-Play) "Earthworm Jim" (Gameloft) "Fast & Furious 7" (i-Play) "Fight Game Rivals" (Rough Cookie) "Finger Physics" (Mobliss Inc.) "Flight Control" (Namco Bandai) "Flowerz" (Carbonated Games) "Frogger" (Konami Digital Entertainment) "Fruit Ninja" (Halfbrick) "Game Chest-Board" (MGS) "Game Chest-Card" (MGS) "Game Chest-Logic" (MGS) "Game Chest-Solitaire" (MGS) "GeoDefense" (Critical Thought) "Ghostscape" (Psionic) "Glow Artisan" (Powerhead Games) "Glyder 2" (Glu Mobile) "Guitar Hero 5" (Glu Mobile) "Halo Waypoint" (MGS) "Hexic Rush" (Carbonated Games) "I Dig It" (InMotion) "iBlast Moki" (Godzilab) "ilomilo" (MGS) "Implode XL" (IUGO) "Iquarium" (Infinite Dreams) "Jet Car Stunts" (True Axis) "Lets Golf 2" (Gameloft) "Little Wheel" (One click dog) "Loondon" (Flip N Tale) "Max and the Magic Marker" (PressPlay) "Mini Squadron" (Supermono Limited) "More Brain Exercise" (Namco Bandai) "O.M.G." (Arkedo) "Puzzle Quest 2" (Namco Bandai) "Real Soccer 2" (Gameloft) "The Revenants" (Chaotic Moon) "Rise of Glory" (Revo Solutions)
Out / Nov - 2010
Codificando.net e-magazine
|
www.codificando.net
15
e-magazine
Dica J que o assunto Mobile conhea o Microsoft Tag. Use o Microsoft Tag em seu celular e descubra.( http://tag.microsoft.com )
Figura 22 - Exemplo de jogo no Windows Phone 7.
Consideraes Esta uma pequena amostra do que esta por vir at o fim desse ano. importante estarmos preparados para esse grande salto que a Microsoft esta dando na tecnologia mvel . O mercado de dispositivos mveis esta crescendo cada dia mais, abrindo oportunidades para desenvolvedores, seja ele de aplicativos ou de games. Empresas como LG,Samsumg,HTC j esto dando as caras com seus aparelhos. Windows Phone 7 Series j nasce grande, preparado para as redes sociais, games, multimdia portanto a hora essa. Espero que tenham gostado do artigo e at a prxima. Links: http://developer.windowsphone.com/ http://windowsteamblog.com/ windows_phone/b/windowsphone/ http://winphoneblog.com.br www.codificando.net www.silverlight.net www.portalsilverlight.com.br www.desenvolvendoparaweb.net
Figura 23 - Tag-Reader.
Anderson Castro Graduado em Anlise e Desenvolvimento de Software atua no mercado de tecnologia a mais de trs anos com foco na plataforma .Net, desenvolvedor em C# Windows Forms, Asp.net e Silverlight. Atualmente aprofundando seus conhecimentos em WPF, WCF e Silverlight. Escrevo e participo atualmente nas seguintes comunidades e blogs: www.codificando.net www.portalsilverlight.com.br www.desenvolvendoparaweb.net
Codificando.net e-magazine
|
www.codificando.net
16
e-magazine
Tenho visto muitas perguntas sobre como podemos implementar a autenticao em ASP.NET sem a utilizao dos controles da Toolbox Login. Por esse motivo resolvi escrever este artigo onde demonstrarei como simples criar o processo de autenticao de usurios em uma aplicao ASP.NET com pouqussimas linhas de cdigo. Como de costume o primeiro passo abrir o Visual Studio. Vou utilizar o Visual Studio 2010, mas fique a vontade para utilizar qualquer outra verso, pois o cdigo ser exatamente o mesmo. Com o Visual Studio aberto clique em File | New | Project e selecione Visual C# | Web conforme figura 1:
Na caixa Name coloque o nome do projeto. No meu caso estou chamando o projeto de AutenticandoUsuarios. Com o projeto criado vamos expandir a guia Solution Explorer. Clique com o boto direito no nome do projeto e selecione Add | New Item (figura 2).
Codificando.net e-magazine
Na janela que se abre, adicione um Web Form com o nome de Login.aspx (figura 3).
Figura 1 New Project.
www.codificando.net
17
e-magazine
Nota: Se voc estiver utilizando outra verso do Visual Studio pode existir uma pequena diferena entre os arquivos. Vamos definir que o arquivo Default.aspx o arquivo padro da nossa aplicao, ou seja, sempre que o usurio acessar o nosso site ele ser redirecionado para a tela Default.aspx. Para isso, clique com o boto direito no arquivo Default.aspx e selecione a opo Set As Start Page (figura 6).
Repita o mesmo processo e adicione mais um Web Form com o nome de Default.aspx (figura 4).
Codificando.net e-magazine
Nesse momento seu projeto deve ter uma estrutura muito parecida com a figura 5:
www.codificando.net
18
e-magazine
At este ponto no h nenhuma novidade para quem j esta familiarizado com o ASP.Net. Vamos agora informar a nossa aplicao que qualquer tela do sistema s poder ser acessada se anteriormente o usurio tiver sido autenticado. Para isso, pare a execuo da aplicao e clique duas vezes sobre o arquivo Web.config.
Reparem que dentro da tag Authentication temos o campo mode que aceita somente os valores exibidos na imagem acima. Vamos as definies de cada um dos possveis modos de autenticao aceitos pelo ASP.Net. Forms: Permite que voc customize uma janela onde voc dever implementar a sua lgica de validao para autenticar um determinado usurio. Utilizaremos este modelo em nosso exemplo. None: Identifica que todos os usurios podero acessar a sua aplicao. Por exemplo,
Codificando.net e-magazine
Agora vamos executar a aplicao e veremos que a janela Default.aspx ser exibida conforme figura 7.
www.codificando.net
19
e-magazine
um site de notcias onde todos podem navegar sem a necessidade de efetuar uma autenticao. Passport: Com este modo possvel integrarmos nossa aplicao com a tela padro da Microsoft de forma que a validao ser feita atravs do Live ID da Microsoft e receberemos apenas um token de autenticao, porm no temos acesso ao e -mail e senha utilizados para logar no Live ID. Windows: Permite que sua aplicao identifique as credenciais do usurio logado no Windows (mquina local do cliente) e as utilize para logar na aplicao. Desta forma possvel que o usurio acesse sua aplicao, porm sem a necessidade de ter de informar seu usurio e senha novamente. Para o nosso exemplo vou utilizar o modo Forms. Agora dentro da tag Authentication vamos adicionar a tag forms conforme a listagem 4:
res que definimos na listagem 4. name: Nome do cookie que ser utilizado pelo ASP.NET para armazenar as informaes do usurio logado. loginUrl: Nome da pgina que contm a lgica que controlar a autenticao dos usurios do site. defaultUrl: Nome da pgina inicial da sua aplicao timeout: Tempo em minutos que o cookie persistido. Se voc ficar mais tempo do que o aqui definido sem interao com a aplicao, voc ser redirecionado novamente para a tela definida no parmetro loginUrl. path: Identificador de qual diretrio da aplicao deve receber a proteo quanto ao acesso sem a devida autenticao. Aps o fechamento da tag authentication, vamos adicionar o cdigo da listagem 5.
Codificando.net e-magazine
www.codificando.net
20
e-magazine
Com o cdigo (listagem 5) estamos negando o acesso a qualquer pgina da nossa aplicao aos usurios no autenticados. Sempre que o ASP.NET identificar que o usurio no esta autenticado, o ASP.NET utilizar os parmetros definidos dentro tag authentication para redirecionar o usurio a pgina definida como pgina responsvel pela autenticao dos usurios. No nosso exemplo, a pgina responsvel pela autenticao a pagina Login.aspx. Vamos executar a nossa aplicao para verificarmos o que acontece. Vejam que ao invs de abrir a janela Default.aspx, a janela aberta foi a janela Login.aspx. Porm reparem no contedo da url que foi montado no browser (figura 8).
cdigo responsvel por autenticar o nosso usurio na aplicao. Para isso devemos voltar ao designer da janela Login.aspx e vamos adicionar um controle Button (listagem 6).
Codificando.net e-magazine
Conforme podemos ver, o ASP.NET nos redirecionou para a janela Login.aspx, mas identificando que aps a validao com sucesso, devemos ser redirecionados para a janela Default.aspx. Agora nos resta apenas implementar o
Se neste momento executarmos novamente nossa aplicao, seremos redirecionados para tela de login. Porm se clicarmos no boto Efetuar o login seremos redirecionados para a janela Default.aspx de forma automtica.
www.codificando.net
21
e-magazine
Conforme visto o processo de controle de autenticao do ASP.NET muito simples e fcil de utilizarmos em nossas aplicaes. Agora utilize sua criatividade e divirta-se com o exemplo mostrado. O projeto completo pode ser baixado atravs do link:
http://cid-391089d9c0e72ec7.office.live.com/self.aspx/ Artigos/AutenticandoUsuarios.zip
Fernando Gonalves Graduado em Sistemas de informao pela Universidade Ibirapuera (UNIB) em So Paulo. Trabalha com desenvolvimento de aplicaes a 8 anos, nos ltimos 4 com a tecnologia .Net (ASP.Net, Windows Mobile e C#). Moderador/ Colaborador da comunidade Desenvolvendo para Web e o mantm o blog: http://www.fernandodev.com/blog
Codificando.net e-magazine
|
www.codificando.net
22
e-magazine
Recentemente a Microsoft liberou a verso Beta 1 do Visual Studio LightSwitch para a comunidade. Entretanto, j vinha acompanhando discusses acaloradas em alguns fruns e demais sites da comunidade tcnica sobre o produto. As discusses giravam em torno da seguinte pergunta: Qual a utilidade de uma ferramenta Next > Next > Finish para construo de aplicativos? Na verdade, a desconfiana com o Visual Studio LightSwitch vem de dois fatos muito comuns nas comunidades tcnicas: Avaliar com base em opinies de terceiros (sem nunca ter aberto ao menos o LightSwitch), ou seja, se a pessoa X falou que ruim, pego a opinio dela como base e j formo a minha opinio. No entender o foco do produto (este mais comum). Abri o LightSwitch, mas no gostei dele como ferramenta de desenvolvimento. Novamente, preciso entender o foco do produto.
Neste artigo pretendo complementar o artigo do Mrcio. Alguns fatos importantes Antes da parte prtica com o LightSwitch, preciso mencionar alguns fatos mencionados no artigo do Marcio. O LightSwitch uma ferramenta diferente do Visual Studio tradicional, outro produto. uma IDE para desenvolvimento de aplicaes mais simples, com o foco voltado para profissionais que no necessariamente sejam profissionais de desenvolvimento. Uma das formas de trabalho a criao de uma nova entidade dentro do LightSwitch e com base nela criar as telas de insero, excluso, etc. Neste artigo, apresentarei como possvel criar uma aplicao utilizando uma base de dados j existente. O download do Visual Studio LightSwitch Beta 1 est disponvel gratuitamente no http://www.microsoft.com/visualstudio/enus/lightswitch. O Visual Studio LightSwitch foi lanado na verso Beta 1 (para testes), ou seja, algumas das caractersticas do produto que apresento neste artigo podem ter
Codificando.net e-magazine
Mrcio Fabio Althmann escreveu um excelente artigo sobre o LightSwitch para o portal Meio Bit abordando sobre o quesito foco, acesse o link: http://meiobit.com/73145/visual-studiolightswitch-comece-a-desenvolver-agora/.
www.codificando.net
23
e-magazine
seu comportamento alterado ou serem removidas nas verses posteriores. Como uma verso Beta, importante que voc envie seu feedback para a equipe de produto da Microsoft para que o produto possa continuar em constante melhoria. Uma caracterstica do LightSwitch que me agradou bastante e que j faz meno ao sucesso do produto o fato de o mesmo gerar a App tanto para rodar na web como no desktop. Em ambos os casos, a App gerada em Silverlight, o que mostra mais uma vez a consolidao desta ltima. Implementando uma aplicao com base em uma fonte de dados j existente. Usaremos neste artigo, a base Northwind da Microsoft para criar um aplicativo simples utilizando os recursos do LightSwitch. Aps instalar o Visual Studio LightSwitch siga os seguintes passos: Abra o Visual Studio 2010. Vamos criar um novo projeto (File > New > Project) Note que na janela que se abre, do lado esquerdo, um novo tem aparece LightSwitch. Selecione este tem, a linguagem, o local onde ser salvo o projeto, o nome da Solution e clique em OK .
Muito bem. Voc acabou de criar um projeto do tipo LightSwitch. Se tudo correu bem no processo descrito anteriormente, voc deve estar visualizando uma tela semelhante conforme Figura 2.
Codificando.net e-magazine
Uma das caractersticas do LightSwitch que me agradam o fato de ser intuitivo, haja vista o pblico que o mesmo pretende alcanar. Existem duas formas bsicas para se criar um aplicativo com o LightSwitch: Criar suas tabelas e, a partir dela ir montando as telas de busca, insero, etc., Utilizar uma fonte de dados prexistente.
www.codificando.net
24
e-magazine
Como o Mrcio j cobriu em seu artigo o trabalho com a primeira opo, neste artigo cobriremos a segunda opo. Para isso, clique na opo Attach to external database, a figura 3 apresenta esta janela e suas opes.
Na verso Beta 1, o LightSwitch disponibiliza trs opes para anexar fonte de dados. Database, SharePoint e WCF RIA Service. No entraremos em maiores detalhes sobre cada uma das opes, mas, em linhas gerais, a opo Database faz meno a bancos de dados fsicos (neste artigo utilizaremos esta opo), a opo SharePoint faz meno aos fluxos de dados disponibilizados nos portais de colaborao da empresa e, finalmente, WCF RIA Service faz meno conectividade com algum servio disponibilizado como fonte de dados. Selecione a opo Database e clique em Next. A Figura 4 apresenta a tela que se abrir ao prosseguir.
Como mencionado anteriormente, iremos utilizar a base de dados Northwind implementada em SQL Server, portanto, no campo Datasource no alteraremos o tipo, muito embora seja possvel. No campo Server Name definimos o nome do servidor do banco de dados, portanto, fornea o nome do servidor que pretende se conectar. Na opo Logon on the server marque a opo que se adequa melhor ao seu cenrio. Em meu caso, marco a opo Use SQL Server Authentication para utilizar o usurio do BD para autenticar. Na caixa Connect to a database, selecione o banco com o qual ir trabalhar e clique em OK. Ao clicar em OK a conexo com a base ser realizada e a tela apresentada na Figura 5 ser exibida.
Codificando.net e-magazine
|
www.codificando.net
25
e-magazine
Note na Figura 5 que estamos selecionando apenas a opo Tables. No estamos interessados neste artigo em trabalhar com as Views. Aps selecionar Tables e nomear o Data Source, basta clicar em Finish. Se tudo correu bem, voc dever estar visualizando uma tela semelhante Figura 6.
Muito bem. J possumos todos os requisitos necessrios para construirmos nossos aplicativos no Visual Studio LightSwitch. Para exemplificarmos, vamos construir duas telas e execut-las. A primeira tela ser a de Insero de Produtos e a segunda ser a de Pesquisa de Produtos.
Codificando.net e-magazine
interessante observar tambm a Solution Explorer do projeto, a Solution Explorer deve estar parecida com a Figura 7.
Na Solution Explorer, d um duplo clique sobre a entidade Products. Na janela que se abre, no menu de atividades da janela, clique no boto com a opo Screen. Na janela que se abre, selecione a opo New Data Screen. Nomeie sua tela no campo Screen Name e em seguida, no campo abaixo Screen Data, selecione a entidade do banco de dados com a qual a tela se relacionar e enviar os dados. A Figura 8 apresenta este processo.
www.codificando.net
26
e-magazine
pressionando F5. Se tudo correu bem, voc dever estar visualizando uma tela semelhante Figura 9.
Os aspectos importantes da Figura 8 so: O que define se a tela ser de Insero, Busca, Grid Editvel, Lista de Valores, etc, a escolha do template. Ao selecionar o template, uma imagem ilustrativa do que ser construdo pelo LightSwitch apresentada a direita. A nomeao da tela para o sistema, para isso use o campo Screen Name. informar para o LightSwitch a entidade com a qual a tela se relacionar. No caso, como criaremos uma tela de insero de produtos, selecionamos a entidade Produtcts1.
Figura 9 - Tela de Insero de Produtos.
Eis que a mgia acontece. Uma tela de insero de produtos com aspecto profissional em Silverlight, uma aplicao com o conceito Out-Of-Browser gerada. E a pergunta aqui ? Quantas linhas de cdigo foram escritas para isso? Nenhuma, muito embora haja a possibilidade de personalizar os cdigos gerados pelo LightSwitch.
Codificando.net e-magazine
Ao clicar em OK uma nova janela se abre, com algumas opes estranhas primeira vista. O artigo do Mrcio explica como o LightSwitch gerencia a interface das telas. Para ns aqui, basta saber que a tela foi criada com sucesso com base na tabela de produtos. Para confirmar esta informao, compile sua aplicao
Um aspecto a ser notado na Figura 9 o de que os nomes dos campos esto em Ingls, ou seja, da forma como esto na base de dados. Voc pode estar se perguntando: No possvel customizar? Sim, possvel e extremamente fcil realizar esta tarefa. Assim como possvel adicionar novos campos, aes e comportamentos. Mas isso assunto para um artigo futuro. Vamos ento criao de uma tela de pesquisa de produtos. O procedimento rigorosamente o mesmo do apresentado na
www.codificando.net
27
e-magazine
figura 8, mas a diferena est na escolha do template. O template correto a ser escolhido aqui Search Data, conforme apresenta a figura 10.
para que o valor retornado seja apresentado no GridView. Concluso O que podemos concluir aps uma rpida utilizao do LightSwitch que, para aquilo que ele se prope a fazer (construir aplicativos de pequeno porte por profissionais que no tenham tanta experincia com o desenvolvimento de softwares de forma rpida) ele timo. Outro aspecto importante a ser notado e que, em minha opinio tende para o sucesso da ferramenta, o fato de o LightSwitch gerar deploy da aplicao tanto para Web quanto para ambientes Desktop. Evidentemente, o Visual Studio LightSwitch no veio para substituir ou sobrepor o mercado do Visual Studio tradicional. No h nem como falar nestes termos. Aplicaes escalveis e com nvel de complexidade mdio para cima no sero contempladas pelo LightSwitch. Fabrcio Sanchez
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. fundador e administrador da comunidade .NET Interior.
Perfeito. Se tudo correu bem, ao compilar sua aplicao voc dever estar visualizando uma tela semelhante a Figura 11.
Codificando.net e-magazine
O aspecto mais importante a se notar na Figura 11 o fato de, uma nova opo ser adicionada no menu esquerda. A opo BuscaProdutos. Ao clicar nesta opo, a tela de busca de produtos apresentada. Basta digitar um valor no campo de busca
www.codificando.net
28
e-magazine
Neste artigo vamos falar sobre o Entity Framework 4, que foi lanado junto com o .NET FRAMEWORK 4 e, apesar de ser sua segunda verso, leva esse nome para acompanhar o framework. Essa verso do Entity contm recursos que a diferenciam de sua primeira verso, entre eles esto a possibilidade de se trabalhar com POCO(Plain Old CLR Objetc Bom e Velho Objeto da CLR), trabalhar apenas com cdigo (Code Only) no dependendo mais de um arquivo EDMX para fazer o mapeamento das entidades e, dentre outros, conta agora com Lazy Loading, (que abordaremos neste artigo). Teremos como Interface de Usurio o ASP.NET WebForms, mas no vou entrar em detalhes da interface porque no o foco do artigo. Iniciando ento nossa implementao, abra o Visual Studio 2010, v at o Menu File > New > Project e selecione a opo ASP.NET Web Application, como apresentado na figura 1. Feito isso, o Visual Studio criar um novo projeto com um template WebForms, e a sua Solution j dever ter em sua estrutura, Master Page, e etc., como voc pode visualizar na figura 2.
Codificando.net e-magazine
|
Vamos criar agora o nosso arquivo EDMX para comearmos a trabalhar, efetivamente, com o Entity Framework. Para tanto, clique com o boto direito no Projeto, Add > New Item, e se abrir a tela
Out / Nov - 2010
www.codificando.net
29
e-magazine
semelhante da Figura 3, bastando selecionar Data e o ADO.NET Entity Framework Data Model.
Temos agora em nossa Solution, um arquivo na extenso edmx, com o qual criaremos o nosso Modelo Conceitual de forma bastante prtica e simples. Depois de selecion-lo e clicar em ADD, voc poder optar por Empty Model ou Generate from DataBase, respectivamente, criar um Modelo vazio, ou cri-lo a partir de um banco de dados. Como no temos nosso banco de dados, vamos optar pelo Empty Model e clicar em Finish. Clique duas vezes sobre o EDMX e ele se abrir. Clique com o boto direito no Modelo, v em ADD > Entity e se abrir uma janela semelhante da figura 4 para que voc opte por algumas caractersticas iniciais da sua entidade: Qual ser o nome da Classe criada (Entity Name), o nome da tabela no banco (Entity Set) e se deseja criar uma propriedade chave (Create key property) e o seu nome (Property Name) e tipo (Property Type).
Vamos trabalhar com um cadastro de Bandas e msicas dessas bandas, como exemplo. J temos a nossa entidade banda, com seu ID. Agora, clicando com o boto direito sobre a entidade, em ADD > Scalar Property, voc pode adicionar uma Propriedade e definir tamanho, tipo e vrias outras caractersticas atravs do Menu propriedades do lado direito, no Visual Studio. Com as entidades criadas temos o nosso modelo conceitual semelhante figura 5.
Codificando.net e-magazine
|
www.codificando.net
30
e-magazine
timo, mas como voc deve ter imaginado, falta algo: A ligao entre as duas entidades, para isso, utilizaremos Association onde poderemos optar por associaes 1 pra 1, 1 para N e N para N, de forma bastante simples, como vou demonstrar a seguir.Clicando sobre a Entidade msica, ADD -> Association, se abrir uma janela semelhante da figura 6 onde poderemos fazer configuraes, conforme nossa regra. Uma mesma Banda pode ter vrias msicas, logo, faremos a configurao desta forma, que bastante intuitiva.
Agora, clicando com o boto direito no Modelo Conceitual e selecionando a opo Generate DataBase from Model poderemos criar o Script do Banco de Dados e rod-lo criando o Banco de Dados com as mesmas associaes que fizemos no Modelo Conceitual, como podemos ver nas figura 8, 9 e 10, inclusive a string de conexo criada no nosso Web.config, sem que tenhamos que coloc-la manualmente.
Codificando.net e-magazine
Agora sim, temos o nosso modelo conceitual prontinho, com a associao, como podemos ver na figura 7.
Figura 9 - Executando script de criao do Banco de Dados a partir do Visual Studio 2010.
www.codificando.net
31
e-magazine
Bom, agora j temos o nosso Projeto web criado, o modelo conceitual e o banco de dados, vamos a codificao. Criaremos duas pginas, a saber: Musicas.aspx e Bandas.aspx. O CRUD com o Entity Framework bastante simples, e se resume em alguns poucos mtodos, como podemos ver na Listagem 1.
private ModeloConceitualContainer context = new ModeloConceitualContainer(); public void Incluir(string NomeBanda) { Bandas objBanda = new Bandas() { NomeBanda = NomeBanda }; context.AddToBanda(objBanda); context.SaveChanges(); } public void Alterar(int CodBanda, string NomeBanda) { Bandas objBandas = context.Banda.Where(p => p.ID == CodBanda).Single(); objBandas.NomeBanda = NomeBanda; context.SaveChanges(); } public void Excluir(int CodBanda) {
public IQueryable<Bandas> RetornaTodasBandas() { return from l in context.Banda select l; } public Bandas RetornaUmaBanda(int CodBanda) { return context.Banda.Where(p => p.ID == CodBanda).SingleOrDefault(); }
Listagem 1 - Mtodos.
Primeiramente, instanciamos o contexto do Entity Framework, no nosso caso, denominado ModeloConceitualContainer. ele quem conhece todos os mapeamentos e implementa as classes referentes s entidades do banco, logo, ele quem vai ser relacionar com o banco diretamente.
Codificando.net e-magazine
|
Incluir: Neste mtodo, passamos como parmetro o nome da banda e na implementao, preenchemos a propriedade NomeBanda com o contedo passado no parmetro. Logo depois, atravs do mtodo AddToBanda passando o objeto anteriormente preenchido como parmetro, adicionamos este objeto ao contexto, e chamamos o mtodo Savechanges, que ser responsvel por fazer o commit destes dados no banco de dados. Alterar: Este mtodo recebe como parmetro o cdigo da banda que ser alterada e o nome que esta banda receber.
www.codificando.net
32
e-magazine
Baseado nessas informaes, buscamos esse dado no contexto atravs de uma expresso lambda, passamos a alterao desejada e chamamos o mtodo SaveChanges. O contexto se encarregar de aplicar as alteraes no banco.Note que buscamos este dado no contexto, logo, ele j estava attachado no contexto, ou seja, era conhecido por ele. Se voc estiver tralhando com um objeto no attachado no contexto e quiser persisti-lo no banco de dados, ser necessrio fazer o attach no contexto. Excluir: Este mtodo responsvel por excluir um dado, logo, ele apenas recebe a chave primria da entidade que ir excluir. Na primeira linha do mtodo, buscamos este dado, depois invocamos o mtodo DeleteObject do contexto, passando-o como parmetro e em seguida o mtodo SaveChanges para dar o commit das alteraes no banco de dados. RetornaTodasBandas: Este mtodo tem como retorno uma coleo de todas as banda no banco de dados. O retorno padro de expresses LINQ IQueryable, neste mtodo estamos retornando o resultado da consulta, diretamente. RetornaUmaBanda: Este mtodo retorna um objeto do tipo banda, atravs do seu cdigo que passado como parmetro. Para a interao com a entidade Musicas, temos mtodos bastante semelhantes ao das Bandas, como voc pode conferir na Listagem 2.
public void Incluir(string NomeMusica, int CodBanda) { Musicas objMusica = new Musicas() { NomeMusica = NomeMusica, BandasID = CodBanda }; context.AddToMusica(objMusica); context.SaveChanges(); } public void Alterar(int CodMusica, string NomeMusica, int CodBanda) { Musicas objMusica = context.Musica.Where(p => p.ID == CodMusica).SingleOrDefault(); objMusica.NomeMusica = NomeMusica; objMusica.BandasID = CodBanda; context.SaveChanges(); } public void Excluir(int CodMusica) { Musicas objMusica = context.Musica.Where(p => p.ID == CodMusica).SingleOrDefault(); context.DeleteObject(objMusica); context.SaveChanges(); } public IQueryable RetornarTodasAsMusicas() { return from l in context.Musica select l; } public Musicas RetornarUmaMusica(int Codmusica) { return context.Musica.Where(p => p.ID == Codmusica).SingleOrDefault(); }
Codificando.net e-magazine
Listagem 2 - Mtodos.
www.codificando.net
33
e-magazine
Pode-se ver nas figuras 11, 12, 13 e 14 algumas pginas utilizando o acesso a dados como Entity Framework.
Concluso
Figura 11 - Cadastrando uma Banda.
Tivemos a oportunidade de entender como simples o trabalho com persistncia e recuperao de informaes de um banco de dados relacional utilizando o Entity Framework. No prximo artigo falaremos sobre POCO (Plain Old CLR Objects) utilizando Entity Framework, que foi um dos recursos mais esperados nesta verso do Entity Framework.
Codificando.net e-magazine
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. Mantm o blog: http://italochesleytech.wordpress.com. Participa ativamente de Comunidades de Desenvolvimento.
www.codificando.net
34
e-magazine
SQL Server Integration Services (SSIS) uma ferramenta que usamos para executar operaes de ETL, ou seja, extrao, transformao e carga de dados. Embora o processamento ETL seja comum em Data Warehouse (DW), o SSIS no de forma limitada a apenas DW, por exemplo, quando voc cria um plano de manuteno usando SQL Server Management Studio (SSMS) um pacote SSIS criado. Em um nvel alto, o SSIS fornece a capacidade para: Recuperar dados a partir praticamente qualquer fonte. de
(DTS), que estava disponvel com o SQL Server 7.0 e SQL Server 2000. SSIS baseia-se nas capacidades introduzidas com DTS. Neste artigo, vamos passar por uma srie de temas que voc precisa entender para ter sucesso em construir um pacote SSIS. Nosso esquema de alto nvel a seguinte: Criar pacotes SSIS no SQL Server Management Studio (SSMS) Implantando pacotes SSIS Execuo de pacotes SSIS
Codificando.net e-magazine
Realizar vrias transformaes nos dados, por exemplo, converter um tipo para outro, converter para maisculas ou minsculas, executar clculos, etc. Carregar dados praticamente em qualquer fonte.
Criao de pacotes do SSIS no SQL Server Management Studio (SSMS - Pacotes bsicos) SQL Server Management Studio (SSMS), contm um Assistente de Importar e Exportar (Import e Export Wizard) as tarefas que voc pode usar para copiar dados de uma fonte de dados para outro. Voc pode escolher entre uma variedade de fontes e tipos de fonte de dados de destino, selecione as tabelas para copiar ou especificar sua prpria
Definir um workflow.
A primeira verso do SSIS foi lanada com o SQL Server 2005. SSIS uma substituio para o Data Transformation Services
www.codificando.net
35
e-magazine
consulta para extrair dados e salvar seu trabalho como um pacote SSIS. Usando o Assistente de Importao e Exportao um bom ponto de partida para a aprendizagem sobre os pacotes do SSIS. Voc pode executar o pacote SSIS como gerado, agend-lo para ser executado em um momento posterior, ou fazer as alteraes necessrias para atender s suas necessidades. Maneira simples de exportar dados do SQL Server (Assistente de Exportao) SQL Server Management Studio (SSMS) fornece a tarefa Export Wizard, que pode ser usado para copiar dados de uma fonte de dados para outro. Voc pode escolher entre uma variedade de fontes e tipos de fonte de dados de destino, selecionando as tabelas para copiar ou especificar sua prpria consulta para extrair dados e salvar seu trabalho como um pacote SSIS. Nesta seo, vamos percorrer o Assistente de Exportao e exportar dados de um banco de dados SQL Server para uma planilha do Excel. Para comear SSMS execute-o clicando no SQL Server Management Studio em Iniciar\Todos os Programas\Microsoft SQL Server. Ao abrir o SSMS voc ter que se conectar no banco, conecte com o Database Engine. No exemplo, eu uso o banco de Dados AdventureWorks que voc pode baixar no site http://sqlserversamples.codeplex.com/ releases/view/4000. Localize o banco de dados AdventureWorks no SSMS Object Explorer, se o Object Explorer no visvel, clique no
Ob-
ject Explorer conforme figura 1. Aps feita a conexo com o banco de dados AdventureWorks, clicar com o boto direito do mouse no banco de dados AdventureWorks no Object Explorer, selecione Tarefas (Tasks), em seguida, exportar dados (Export Data...) a partir do menu de contexto para iniciar o Assistente de Exportao. Clique em Avanar na janela de Bem-Vindo que se abrir. Vamos percorrer o assistente passo-a-passo. Na caixa de dilogo Data Source, voc especifica a fonte de seus dados. Uma vez que estamos executando o assistente de exportao, os campos da caixa de dilogo so exibidos com os valores j preenchidos, conforme mostrado abaixo (com base no banco de dados que estamos utilizando para iniciar o assistente de Exportao) conforme figura 2.
Codificando.net e-magazine
|
www.codificando.net
36
e-magazine
Clique em Avanar (Next) para ir para a caixa de dilogo que especifica a tabela ou uma query para os dados. Nesta caixa de dilogo, permite que voc escolha se deseja exportar dados selecionando tabelas e/ou exibies da fonte de dados ou especificar uma consulta para extrair dados. Selecione Copiar dados de uma ou mais tabelas ou exibies (Copy data from one or more tables or views) como mostrado na figura 4.
Clique em Avanar (Next) para escolher o destino dos dados. Na tela de dilogo de Destino, voc especifica o destino da fonte de dados. H muito poucas opes disponveis para os destinos, a introduo adicional varia de acordo com a fonte de dados de destino escolhido. Para o nosso exemplo vamos exportar os dados para o Excel, em seguida, usar essa planilha Excel como a fonte da manifestao do assistente de importao mais para frente. Preencha a caixa de dilogo conforme figura 3.
Clique em Avanar (Next) para ir para a caixa de dialogo que voc selecionar as tabelas ou Exibies (Views). Na caixa de dilogo permite que voc selecione as tabelas e exibies (Views) que voc deseja exportar. Para a nossa demonstrao vamos selecionar a tabela Person.ContactType conforme demonstrado na figura 5.
Codificando.net e-magazine
Figura 5 - Tela do assistente (Wizard) para selecionar tabelas e vises que sero Exportadas.
www.codificando.net
37
e-magazine
Voc pode clicar no boto Preview para visualizar as primeiras 100 linhas de dados na fonte de dados como mostrado na figura 6.
Clique em OK e depois em Avanar (Next) para continuar o processo. Na caixa de dilogo, oferece opes para executar a operao de exportao e criar um pacote SSIS e guard-lo para o SQL Server ou o sistema de arquivos como mostrado na figura 7.
Se voc optar por salvar a sua operao de exportao como um pacote SSIS no dilogo anterior. Preencha a caixa de dilogo como mostrado na figura 9.
Codificando.net e-magazine
Figura 9 - Caixa de dilogo aberta aps selecionar a opo para salvar o pacote SSIS.
Clique em avanar para ir para a caixa de dilogo de finalizao do assistente (figura 10).
Figura 7 - Caixa de dilogo para salvar o pacote SSIS.
Para os nossos propsitos, vamos salvar o pacote SSIS para que possamos v-lo posteriormente neste artigo. Clique em Avanar para prosseguir para a caixa de dilogo Salvar Pacote SSIS, antes disso
Figura 10 - Tela de concluso do Assistente.
www.codificando.net
38
e-magazine
Clique em Concluir (Finish) para executar o pacote SSIS. Voc pode abrir a planilha do Excel e visualizar a tabela que foi exportado. Uma parte da planilha do Excel mostrada na figura 11.
Boto direito do mouse no banco de dados Teste no Object Explorer, selecione Tarefas (Tasks) e, em seguida importar dados (Import Data...) a partir do menu de contexto para iniciar o Assistente de Importao. Clique em Avanar para avanar alm do dilogo Bem-vindo (se indicado). Na caixa de dilogo voc especifica a fonte de seus dados. Preencha a caixa de dilogo como mostrado abaixo para especificar uma planilha Excel como a fonte de dados na figura 13.
Maneira simples para importar dados no SQL Server (Assistente de Importao) SQL Server Management Studio (SSMS), prev a importao tarefa Wizard, que pode ser usado para copiar dados de uma fonte de dados para outro. Voc pode escolher entre uma variedade de fontes e tipos de fonte de dados de destino, selecione as tabelas para copiar ou especificar sua prpria consulta para extrair dados e salvar seu trabalho como um pacote SSIS. Iremos percorrer o Assistente de Importao e importar dados de uma planilha do Excel em uma tabela em um banco de dados SQL Server. Localize o banco de dados Teste no SSMS Object Explorer (criar o banco de dados se necessrio) veja na figura 12.
Codificando.net e-magazine
|
Clique em avanar (Next) para ir para a caixa de dilogo de Destino. Na caixa de www.codificando.net
Out / Nov - 2010
39
e-magazine
dilogo de Destino voc especifica o destino da fonte de dados para os dados que voc est importando. Uma vez que estamos executando o assistente de importao, a janela ser exibida com os valores j preenchidos, conforme mostrado abaixo (com base no banco de dados que voc clicou com o boto direito do mouse para iniciar o assistente de importao) veja na figura 14.
Figura 15 - Tela do Assistente (Wizard) para selecionar tabelas ou query's que sero copiadas.
Clique em Avanar (Next) para ir para a caixa de dilogo de seleo de tabelas ou exibies (Views). Selecionar origem e Exibies (Views) que voc deseja importar. Para a nossa demonstrao vamos selecionar a tabela ContactType conforme demonstrado na figura 16.
Codificando.net e-magazine
Clique em avanar (Next) para ir para a tela de especificao de tabela ou consultas. Na caixa de dilogo voc escolha se deseja importar dados, selecionando tabelas e / ou exibies (Views) da fonte de dados ou especificar uma consulta para extrair dados. Selecione Copiar dados de uma ou mais tabelas ou exibies (Copy data from one or more tables or views) como mostrado na figura 15.
Figura 16 - Tela do assistente (Wizard) para selecionar tabelas e vises que sero Importadas.
Voc pode clicar no boto Preview para visualizar as primeiras 100 linhas de dados na fonte de dados como mostrado na figura 17.
www.codificando.net
40
e-magazine
Clique em OK e depois em Avanar (Next) para ir para a tela de Salvar e Executar Pacote. Na Caixa de dilogo oferece opes para executar a operao de importao e criar um pacote SSIS e guard-lo para o SQL Server ou o sistema de arquivos como mostrado na figura 18.
Clique em Avanar (Next) para concluirmos o assistente. Clique em Concluir para executar o pacote SSIS. Voc pode abrir a tabela importada no SSMS e visualiz-lo. Todos os registros da tabela so mostrados na figura 21.
Codificando.net e-magazine
www.codificando.net
41
e-magazine
Everton Jos Benedicto Possui conhecimentos em SQL Server 2000 e 2005, Oracle 11g,C, C++, C#, Java, FastReport e Reporting Services. Trabalha como DBA Junior e com desenvolvimento de aplicaes em C#.
Codificando.net e-magazine
|
www.codificando.net
42
e-magazine
Todo bom desenvolvedor .Net sabe usar com maestria a ferramenta de todo dia, o Visual Studio. Todos concordam que esta uma IDE poderosa, que nos economiza vrias horas em um projeto crtico, e que a ferramenta no nos deixa na mo. Sabe-se tambm, que existem vrias verses do Visual Studio, tais como Professional, Ultimate e Express, cada uma se adequando s necessidades de um profissional, empresa ou equipe de desenvolvimento. Criada recentemente, uma nova edio do Visual Studio est chamando a ateno pela sua simplicidade na criao de aplicaes. Esta edio o LightSwitch, lanada dia 19 de agosto de 2010 para assinantes MSDN, e para o pblico em geral no dia 23 de agosto. Esta verso difere das outras por focar mais na produtividade do que no cdigo propriamente dito. As aplicaes criadas so baseadas em Silverlight, o que permite escrevermos aplicaes para web, desktop e nuvem. Permite aos desenvolvedores criarem aplicaes leves, que no tm muito para onde crescerem. Lgico que o criador deve avaliar se compensa utilizar o LightSwitch ou no. Vejamos ento como criar uma aplicao bsica com ele.
Primeiramente, quem possui o Visual Studio j instalado, contar com novos templates de projetos, ao instalar as ferramentas para o LightSwitch, permitindo o desenvolvimento tanto em C# quanto em VB.Net, ambos rodando sob o .Net Framework 4.0. Vamos ento criar uma aplicao chamada LightSwitchTest, conforme Figura1.
Codificando.net e-magazine
|
Criando a aplicao LightSwitchTest, o Visual Studio j abre um servidor de aplicao (LightSwitch Web Server Port xxxx), ao invs de abrir somente no incio do debug. Temos tambm a abertura de uma pgina chamada LightSwitchTest Designer, onde por default, temos duas opes: Create new table e Attach to ex-
www.codificando.net
43
e-magazine
podemos
Basicamente, a tabela Usuario est criada. Podemos aplicar propriedades sobre cada coluna recm-criada, como tamanho do campo e validaes customizadas. Na barra acima da tabela, temos algumas opes de adio, dentre elas a opo Screen, onde adicionaremos uma tela de cadastro do nosso Usurio. E claro, no s cadastro, mas tambm de listagem com pesquisa, detalhes, grid editvel e lista com detalhes. Selecionando uma New Data Screen, conforme mostra a Figura 4, poderemos referenciar a tabela Usuario com a tela a ser criada, chamaremos esta tela de NovoUsuario.
Outra coisa diferente, a Solution Explorer, que no possui nenhum arquivo .cs, .aspx, ou .xaml. Est somente com a estrutura padro.
Clicando em Create new table, teremos um designer de entidade, aonde j vir inserida a coluna Id do tipo Int32. Podemos adicionar quantos campos quisermos, assim como no SQL Management Studio. Criaremos um cadastro de usurio, somente com trs campos, o Id j existente, Nome e Email. Fiquem atentos aos tipos que podemos escolher (figura 3).
Codificando.net e-magazine
Agora vem a parte boa! Sem editar mais nada, vamos executar o projeto, com um simples F5 (somente lembrando, necessrio que o servio do SQL Server esteja rodando). Isto nos mostrar finalmente a tela de cadastro de um novo usurio, sem customizao alguma. Alguns de vocs j devem conhecer o cone que apareceu no debug da aplicao. Ele indica que uma aplicao Silverlight rodando fora do browser (Out-Of-Browser) veja na figura 5.
www.codificando.net
44
e-magazine
podemos encontrar este mesmo registro que foi armazenado apenas clicando em SearchUsuario. Esta tela de listagem vale alguns comentrios:
Para criarmos a tela de listagem, desta vez faremos por meio da Solution Explorer: clicando com o boto direito sobre Screens Add Screen, mas neste caso, selecionaremos o template Search Data Screen, onde Screen Data apontar para a tabela Usuarios, e o nome da tela (Screen Name) passando para SearchUsuario, conforme indicado na Figura 6.
Dando uma olhada rpida, ela j traz um campo de pesquisa, que far suas operaes em todos os campos da tabela. Por exemplo, se pesquisarmos com base no exemplo acima, a palavra hotmail, s teremos listados os registros de nome Fulano e Z. Mas se procurarmos por Z, somente ser retornado o registro de nome Z. Vale notar tambm a barra embaixo do Grid, que permite que a paginao ocorra de forma automtica, alm de contarmos com um boto no topo onde h o texto Export to Excel, e faz exatamente o que prope: exporta dados para o Excel sem precisar de nenhuma interveno do usurio alm do clique no boto conforme figura 8.
Codificando.net e-magazine
Figura 6 - SearchUsuario.
www.codificando.net
45
e-magazine
Alliston Carlos Desenvolvedor .Net Web e Windows, focado em tecnologias de User Experience aprimorado, como Silverlight e WPF. bacharel em Sistemas de Informao. J ministrou treinamento na turma de 2008/2 do Students 2 Business, e atualmente instrutor pela Pensou.Net. Estudando .Net Framework a mais de 3 anos, possui quatro certificaes, MCP, MCTS WindowsForms e MCTS WPF 3.5, e MCTS Web 3.5. Faz parte ativamente do grupo de usurios DevGois.Net, atualmente trabalhando em uma das maiores empresas de TI do estado de Gois.
Infelizmente no posso cobrir todo o Lightswitch neste artigo, pois so vrios pequenos detalhes que tornam o desenvolvimento com esta ferramenta ainda mais fcil. Mas espero que tenha conseguido mostrar um pouco do poder de construo de aplicaes bsicas que o Visual Studio agora contm, e fazer com que os leitores se interessem por aprender mais sobre esta nova funcionalidade.
Codificando.net e-magazine
|
www.codificando.net
46
e-magazine
WCF e LINQ
Descritivo do Cdigo: Desenvolvendo uma aplicao utilizando SILVERLIGHT, WCF, LINQ e Silverlight 3 ToolKit (http://silverlight.codeplex.com/releases/ view/36060). O propsito deste artigo desenvolver um grfico simples para exemplificar a utilizao das tecnologias: SIlverlight, WCF e LINQ. Tecnologias envolvidas: Microsoft Visual Studio 2010 C# .Net, Silverlight, WCF, SQL Server e LINQ. Iniciaremos um novo projeto, com o nome de SilverlightWcf (figura 1).
A figura 3 d a opo para utilizar uma pagina para testar a aplicao Silverlight, onde o Visual Studio cria duas paginas (.html e .aspx) que contem os cdigos necessrios para executar a aplicao Silverlight, caso seja necessrio utilizar essa aplicao em algum site, pode-se utilizar essas paginas como exemplo. Neste caso, apenas clique em OK.
Codificando.net e-magazine
Aps selecionar um novo projeto, necessrio selecionar qual o tipo de aplicao que ser desenvolvida, tambm podemos selecionar qual linguagem e framework ser utilizado, neste caso ser
www.codificando.net
47
e-magazine
A figura 4 mostra um exemplo de como ficar janela de desenvolvimento do Visual Studio. Note no Solution Explorer que o Visual Studio criou duas aplicaes, sendo uma para Silverlight e a outra uma aplicao Web com a classe javascript necessria para rodar o silverlight.
Agora necessrio criar o banco de dados. Para isso selecione a janela Server Explorer, clique no cone ou o boto direito do mouse em Data Connections e selecione Add Connection... (figura 5)
Server Name: Nome do Servidor. Apenas clique na seta do combobox que ele mostrar as instancias do SQL Server que esto instaladas na maquina.
Codificando.net e-magazine
Log on to the server: Selecione a opo User a Windows Authentication. Connect to a database: Nome do banco de dados que ser utilizado. Selecione a opo Select or enter a database name. Voc poder utilizar um banco de dados que j est criado ou informar o nome de um novo banco de dados, ele faz a criao do mesmo automaticamente, mas antes ele exibir uma janela fazendo est pergunta. Aps seguir estes passos o banco de dados ser inserido na janela do Server Explorer, a
www.codificando.net
48
e-magazine
O Visual Studio exibir uma tela para informar o nome do campo e o tipo, aps informar os dados voc dever salva-los, em seguida clicar em salvar o Visual Studio exibir uma janela solicitando o nome da tabela (figura 9).
Agora necessrio criar a tabela (Dados) e Incluir trs campos (MS, DEBITO e CRDITO). A tabela 1 mostra a estrutura completa da tabela.
CAMPO MS CREDITO DEBITO TIPO VARCHAR(15) DECIMAL(18,0) DECIMAL(18,0)
Figura 9 Definindo o nome da nova tabela.
Para criar a tabela, primeiro necessrio expandir as opes do banco de dados que utilizado (ExemploWcf), depois clicar o boto direito do mouse na pasta TABLES e clicar em Add New Table (figura 8).
Depois de criar a tabela, necessrio inserir algumas informaes para isso, expanda as opes do banco de dados, expanda a pasta Tables, clique o boto direito do mouse na tabela criada (Dados) e selecione a opo Show Table Data conforme figura 10.
Codificando.net e-magazine
www.codificando.net
49
e-magazine
A Figura 11 mostra a janela exibida pelo Visual Studio, os dados devem ser preenchidos manualmente, pois, todas as clulas so editveis.
Silverlight-enabled Wcf Service. Coloque o nome de WcfExemplo.svc e clique em Add (figura 13).
Agora necessrio implementar o servio que vai retornar os dados para o grfico. Selecione a janela Solution Explorer, clique com o boto direito do mouse no projeto SilverlightWcf.Web, selecione a opo Add e clique em New Item... conforme figura 12.
O Cdigo da listagem 1 mostra o contedo do arquivo WcfExemplo.svc que foi includo no projeto.
using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation;
Codificando.net e-magazine
namespace SilverlightWcf.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class WcfExemplo { [OperationContract] public void DoWork() { // Add your operation implementation here return; }
www.codificando.net
50
e-magazine
Note que o Mtodo DoWork() est com o atributo [OperationContract], isso significa que esse mtodo poder ser invocado pelo WCF, voc pode ter vrios mtodos mas somente os que esto com o [OperationContract] sero invocados. Agora ser utilizado o LINQ to SQL para trabalhar com as informaes do banco de dados, para isso adicione um novo item no projeto: Add New Item, selecione os Templates do Data e escolha opo LINQ to SQL Classes. Coloque o nome de BancoDados.dbml e clicar em Add (figura 14).
automaticamente, caso no seja s clicar duas vezes no mesmo que se encontra na janela Solution Explorer. Agora mapeie a tabela do banco de dados, para isso acesse janela Server Explorer clique na tabela Dados e arraste para o contedo do arquivo BancoDados.dbml, com isso o Visual Studio j faz o mapeamento mostrando os campos da tabela com seus tipos de dados conforme figura 15.
Agora volte para o arquivo WcfExemplo.svc e codifique o mtodo que retornara os dados para o grfico. Crie uma classe com o nome Dados e crie as propriedades do mesmo jeito que esto na tabela do banco de dados, a classe poder ser criada no prprio arquivo. No Inicio da classe, onde se informa as namespaces que so utilizadas, vamos incluir System.Collections.Generic, para utilizar o List<> e a System.Data.Linq para utilizar o Linq para acessar os dados. O cdigo da listagem 2 mostra como o arquivo WcfExemplo.svc dever ficar.
Codificando.net e-magazine
www.codificando.net
51
e-magazine
using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; using System.Collections.Generic; using System.Data.Linq; namespace SilverlightWcf.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class WcfExemplo { [OperationContract] public void DoWork() { // Add your operation implementation here return; } } public class Dados { public string Mes { get; set; } public decimal Credito { get; set; } public decimal Debito { get; set; } } }
Listagem 2 Arquivo WcfExemplo.svc codificado com a classe Dados.
[OperationContract] public List<Dados> RetornaDados() { List<Dados> dados = new List<Dados>(); using (BancoDadosDataContext ctx = new BancoDadosDataContext()) { var obj_dados = from d in ctx.Dados select d; foreach (var item in obj_dados) { Dados dado = new Dados(); dado.Mes = item.Mes; dado.Credito = item.Credito.Value; dado.Debito = item.Debito.Value; dados.Add(dado); } } return dados; }
Listagem 3 Implementao do Mtodo RetornaDa-
Depois disso crie o mtodo RetornaDados() que vai retornar um List<> com a dados da classe Dados. O mtodo vai acessar a tabela Dados, depois fazer um foreach para varrer todas as linhas retornadas, alimentar os dados da classe Dados e depois incluir esses dados em uma lista da classe Dados (listagem 3).
Agora que o mtodo est codificado necessrio testar o mesmo. Primeiro verifique se o projeto SilverlightWcf.Web est setado para ser o primeiro a ser executado quando pressionada a tecla F5, sabemos disso se o projeto estiver em negrito, caso no esteja, clique o boto direito do mouse no mesmo e selecione a opo Set as StartUp Project, faz-se a mesma coisa para o arquivo WcfExemplo.svc. Para testar o servio pressione F5, se a janela do Internet Explorer for aberta, copie o link que esta sendo carregado, no meu caso o link : http://localhost:22269/WcfExemplo.svc. Veja figura 16.
Codificando.net e-magazine
|
www.codificando.net
52
e-magazine
Aps clicar em Add Service, cole o link no nico campo da janela e clique em Ok conforme figura 18.
Depois de colocar o link e clicar em ok, deve-se clicar duas vezes no mtodo que ser testado e clicar no boto Invoke, note que o servio retornar os dados que esto gravados na tabela (figura 19).
Figura 16 Testando um servio WCF.
Depois de copiar o link execute o programa Wcf Test Cliente, voc pode encontr-lo na pasta: C:\Program Files\Microsoft Visual Studio 10.0 \Common7\IDE\ WcfTestClient.exe. Depois de carregado clique no menu File e em seguida clique em Add Service conforme figura 17.
Codificando.net e-magazine
Agora acesse o arquivo MainPage.xaml que est no projeto SilverlightWcf para montar o grfico. Primeiro procure a ferramenta Chart na toolbox, quando encontr-la clique e arraste para dentro da janela de design, conforme figura 20.
www.codificando.net
53
e-magazine
Agora acesse a pgina de cdigo XAML, a listagem do cdigo 4 mostra o contedo do arquivo.
<UserControl x:Class="SilverlightWcf.MainPage" xmlns="http://schemas.microsoft.com/ winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/ winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/ expression/blend/2008" xmlns:mc="http:// schemas.openxmlformats.org/markupcompatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" xmlns:chartingToolkit="clrnamespace:System.Windows.Controls.DataVisualiz ation.Charting;assembly=System.Windows.Co ntrols.DataVisualization.Toolkit"> <chartingToolkit:Chart Name="chart1" /> </UserControl>
Listagem 4 Contedo do arquivo MainPage.xaml.
<chartingToolkit:Chart Name="Grafico" > <chartingToolkit:BarSeries Title="Credito" DependentValueBinding = "{Binding Credito}" IndependentValueBinding = "{Binding Mes}" IsSelectionEnabled="True" AnimationSequence="FirstToLast" ItemsSource="{Binding}" / > <chartingToolkit:BarSeries Title="Debito" DependentValueBinding = "{Binding Debito}" IndependentValueBinding = "{Binding Mes}" IsSelectionEnabled="True" AnimationSequence="FirstToLast" ItemsSource="{Binding}" / > </chartingToolkit:Chart>
Listagem 5 Modificao na tag <chartingToolkit:Chart Name="chart1" />
Notem que estamos utilizando o tipo de grfico BarSeries, um para o Credito e o outro para Dbito, em ambos temos que informar as propriedades DependentValueBinding (Campo Valor), IndependentValueBinding(Campo Texto) e ItemsSource(Fonte de dados), as outras propriedades so para colocar alguns efeitos no grfico. Agora acesse o servio que foi criado no outro projeto, acesse a janela Solution Explorer, clique o boto direito do mouse no projeto SilverlightWcf e selecione a opo Add Service Reference. Ser exibida uma janela para informar o caminho do servio que ser utilizado e colocar o nome (wcfDados) no campo namespace. Como o servio criado
Codificando.net e-magazine
necessrio fazer algumas modificaes no cdigo, a tag <chartingToolkit:Chart Name="chart1" /> dever ficar igual o cdigo
da listagem 5.
www.codificando.net
54
e-magazine
est na mesma soluo, clique no boto Discover. Note que os servios que esto na mesma soluo sero exibidos na janela, aps selecionar o servio desejado clique em OK (figura 21).
void AtualizaGrafico() { wcfDados.RetornaDadosCompleted += new EventHandler<SilverlightWcf.wcfDados.Retorna DadosCompletedEventArgs> (wcfDados_BuscaSaldosCompleted); wcfDados.RetornaDadosAsync(); } void wcfDados_BuscaSaldosCompleted(object sender, SilverlightWcf.wcfDados.RetornaDadosCompletedEve ntArgs e) { GraficoDados.DataContext = e.Result; }
Listagem 6 Implementao da chamada do servio WCF.
Agora acesse o CodeBehind do arquivo MainPage.xaml Na Janela Solution Explorer, clique o boto direito do mouse encima do arquivo e escolha a opo View Code, para acessar os servios que foram adicionados no projeto. A listagem 6 mostra o cdigo necessrio para acessar o wcf, primeiro necessrio instanciar o servio depois criar dois mtodos, um para chamar o servio e o outro para retornar os dados quando a chamada for completada.
private SilverlightWcf.wcfDados.WcfExemploClient wcfDados = new SilverlightWcf.wcfDados.WcfExemploClient();
using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightWcf { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private SilverlightWcf.wcfDados.WcfExemploClient wcfDa-
Codificando.net e-magazine
|
www.codificando.net
55
e-magazine
dos = new SilverlightWcf.wcfDados.WcfExemploClient(); void AtualizaGrafico() { wcfDados.RetornaDadosCompleted += new EventHandler<SilverlightWcf.wcfDados.RetornaDados CompletedEventArgs> (wcfDados_BuscaSaldosCompleted); wcfDados.RetornaDadosAsync(); } void wcfDados_BuscaSaldosCompleted (object sender, SilverlightWcf.wcfDados.RetornaDadosCompletedE ventArgs e) { GraficoDados.DataContext = e.Result; } } }
Listagem 7 Contedo do Codebehind da Classe MainPage.
outra opo para que o prprio Visual Studio Crie o mtodo, apenas clique duas vezes na opo <New Event Handler> (figura 23).
Agora volte para o CodeBehind (MainPage.xaml.cs) do arquivo MainPage.xaml, e note que um novo mtodo foi criado na pagina de cdigos (GraficoDados_Loaded(object sender, RoutedEventArgs e)). Agora dentro desse novo mtodo chame o mtodo que Busca os dados e exibe no grfico (AtualizaGrafico()) veja na listagem 8.
private void GraficoDados_Loaded(object sender, RoutedEventArgs e) { AtualizaGrafico(); }
Listagem 8 Mtodo AtualizaGrfico() sendo chamado ao carregar a aplicao.
Acesse o arquivo MainPage.xaml do projeto SilverlightWcf para codificar o evento Load da ferramenta de grfico, adicione o evento Loaded dentro da tag <chartingToolkit>, conforme figura 22.
Codificando.net e-magazine
Classe
MainPa-
Depois de clicar duas vezes no evento Loaded exibido pelo Intelisense, ser exibida
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents;
www.codificando.net
56
e-magazine
using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightWcf { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private static SilverlightWcf.wcfDados.WcfExemploClient wcfDados = new SilverlightWcf.wcfDados.WcfExemploClient(); private void AtualizaGrafico() { wcfDados.RetornaDadosCompleted += new EventHandler<SilverlightWcf.wcfDados.RetornaDados CompletedEventArgs> (wcfDados_BuscaSaldosCompleted); wcfDados.RetornaDadosAsync(); } void wcfDados_BuscaSaldosCompleted (object sender, SilverlightWcf.wcfDados.RetornaDadosCompletedE ventArgs e) { GraficoDados.DataContext = e.Result; } private void GraficoDados_Loaded(object sender, RoutedEventArgs e) { AtualizaGrafico(); } } }
Listagem 9 Contedo do arquivo MainPa-
Codificando.net e-magazine
|
www.codificando.net
57
e-magazine
Para testar o Projeto, vamos configurar para que o projeto SilverlightWcf.Web seja o primeiro a ser carregado(Janela Solution Explorer, clicar o boto direito do mouse e selecionar Set as StartUp Project). Depois vamos fazer a mesma coisa para o arquivo SilverlightWcfTestPage.html ou SilverlightWcfTestPage.aspx, vamos podem ser utilizados para testar a aplicao. Depois disso pressione F5 para executar o projeto, a figura 24 e 25 mostra o grfico em execuo.
Abraos!
Antonio Lucas Finotti Pereira Ps-Graduado em Tecnologia em Desenvolvimento de Softwares no Centro Universitrio SENAC (S.J. do Rio Preto), Graduado em Cincia da Computao pela UNIP (S. J. do Rio Preto) e Programador de Micro Computador no SENAC (Barretos). Atua como Desenvolvedor.Net usando C# (LINQ, Entity Framework, WCF, WPF, Silverlight e WebServices) para as plataformas (WinForms, Web e Mobile). Possui conhecimento em Visual Basic, FireBird, MySql, Sql Server e Oracle.
Codificando.net e-magazine
www.codificando.net
58
e-magazine
Nesse artigo, veremos como reutilizar cdigo nativo escrito na linguagem C em aplicaes .NET. Platform Invoke Platform Invoke o mecanismo que permite a chamada de cdigo nativo atravs da plataforma .NET. Podemos usufruir deste mecanismo chamando funes da API do Windows, funes de DLLs criadas a partir de cdigo escrito em linguagens como C, etc. Criando um Exemplo Simples Vamos criar uma funo em C que escreve uma mensagem na tela e iremos cham-la atravs do nosso cdigo gerenciado com a linguagem C#. Abra o Visual Studio 2008, clique em File > New -> Project, selecione a linguagem Visual C++ e selecione o template Win32 Project conforme a figura 1. O nome do projeto ser CodigoNativo.
Aps isso, veremos uma janela semelhante figura 2. Clique em Application Settings ou clique no boto Next >.
Codificando.net e-magazine
www.codificando.net
59
e-magazine
Em Application Settings, vamos efetuar as seguintes configuraes: Application Type: DLL Additional Options: Empty Project
Agora vamos escrever nosso cdigo que escreve uma mensagem na tela. O cdigo pode ser visto na listagem 1.
#include <stdio.h> __declspec(dllexport) void EscreverTexto() { printf("Bem vindo ao \"DLL Hell\"!\n"); }
Listagem 1: Cdigo em C para escrever mensagem na tela.
Anteriormente foi mencionado que o arquivo deveria ser criado com a extenso .c, ns fizemos isso para que o compilador consiga entender que estamos trabalhando com cdigo escrito na linguagem C. Caso tivssemos criado nosso arquivo com a extenso .cpp, ocorreria o decoration do nome da funo.
Figura 3: Application Settings.
Agora clique com o boto direito na pasta Source File que se encontra na janela Solution Explorer, selecione Add -> New Item. Na janela que abriu, selecione o template C++ File (.cpp). Na figura 4 podemos ver como a janela est nesse momento. Voc pode colocar o nome que desejar no arquivo, mas importante que a extenso do arquivo seja .c.
Caso o nosso arquivo tivesse a extenso .cpp, poderamos utilizar a palavra chave extern em conjunto com a string C, com isso o decoration no ocorreria. Veja na listagem 2 como ficaria o cdigo utilizando a palavra chave extern.
#include <stdio.h> extern "C" { __declspec(dllexport) void EscreverTexto() { printf("Bem vindo ao \"DLL Hell\".\n"); } }
Codificando.net e-magazine
www.codificando.net
60
e-magazine
nome do mtodo, o tipo de retorno e a lista de parmetros so utilizados para criar um nome nico da funo para o link editor. Compile a soluo clicando em Build -> Build Solution. Agora vamos criar um projeto em C# que far a chamada a funo EscreverTexto() da DLL em cdigo nativo. Para criar um projeto em C#, utilizaremos praticamente os mesmos passos que usamos para criar um projeto em Visual C++. Com a exceo de que selecionaremos a linguagem Visual C# e criaremos um projeto do tipo Console Application. Podemos ver isso na figura 5.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication { class Program { [DllImport("CodigoNativo.dll")] static extern void EscreverTexto(); static void Main(string[] args) { Console.WriteLine("Estou no cdigo gerenciado."); EscreverTexto(); Console.WriteLine("Voltei ao cdigo gerenciado."); Console.ReadKey(); } } }
Listagem 3: Cdigo do arquivo program.cs, que contm a chamada da funo EscreverTexto().
Codificando.net e-magazine
Aps adicionar o projeto em C#, devemos escrever o cdigo que ser responsvel por chamar a funo EscreverTexto(), conforme listagem 3.
Nesse trecho de cdigo, declaramos a funo EscreverTexto() com o atributo DllImport. Esse atributo indica que estamos trabalhando com uma funo no gerenciada e passamos como parmetro o nome da DLL que contm essa funo. Reparem que dentro do mtodo Main(), chamamos a funo da mesma forma que chamamos um mtodo escrito em C#.
www.codificando.net
61
e-magazine
Compile o projeto ConsoleApplication. Copie a DLL do projeto CodigoNativo para a pasta bin\Debug do projeto ConsoleApplication. A DLL pode ser encontrada na pasta Debug. Aps copiar a DLL, execute a aplicao. O resultado pode ser visto na Figura 6.
Trabalhando com Tipos Por Valor Criaremos agora um exemplo simples, onde passamos dois tipos inteiros por valor e esses valores so somados e a funo retorna a soma entre esses dois valores. Na Listagem 4 temos o cdigo em C que efetua a soma.
#include <stdio.h> __declspec(dllexport) int Somar(int valor1, int valor2) { int resultado = valor1 + valor2;
return resultado; }
Enviando e Recebendo Dados do Cdigo Nativo Quando chamamos uma funo de cdigo nativo que possui parmetros e/ou retorna algum valor, esses dados podem ser convertidos entre o mundo gerenciado e no gerenciado de acordo com o tipo de dado a ser trabalhado. Esse processo chamado de Marshaling. Grande parte dos tipos no precisa passar pelo processo de Marshaling por ter a mesma representao entre o cdigo gerenciado e no gerenciado. Vejamos agora dois casos: O tipo System.Int32 no precisa de nenhuma converso entre cdigo gerenciado e cdigo no gerenciado. O tipo System.String po-
O cdigo em C# do arquivo program.cs que declara a funo Somar, chama a funo e mostra o resultado, pode ser visto conforme listagem 5.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication { class Program { [DllImport("CodigoNativo.dll")]
Codificando.net e-magazine
|
www.codificando.net
62
e-magazine
static extern Int32 Somar(Int32 valor1, Int32 valor2); static void Main(string[] args) { Int32 resultado; resultado = Somar(30, 40); Console.WriteLine("A funo Somar retornou o valor {0}.", resultado); Console.ReadKey(); } } }
Listagem 5: Cdigo que declara e executa o mtodo Somar.
#include <stdio.h> __declspec(dllexport) int VerificarNumeroPar(int valor) { int resultado = valor % 2; if(resultado == 0) return 1; else return 0; }
Listagem 6 - Funo que indica se um valor par ou mpar.
Nesse exemplo, declaramos a funo contida na DLL e no mtodo Main(), chamamos a funo passando os parmetros requisitados e mostramos o resultado. O resultado pode ser visto na figura 7.
Agora estamos trabalhando com um tipo inteiro simulando um tipo Boolean. O tipo Boolean pode ser convertido para um formato de um inteiro de 4 bytes onde 0 igual a falso e qualquer outro valor verdadeiro, pode ser um inteiro de 1 byte, onde 0 falso e 1 verdadeiro ou para um inteiro de 2 bytes onde -1 igual a verdadeiro e 0 igual a falso. Todos os tipos que precisam passar pelo processo de Marshaling, tem um comportamento default nesse processo, mas ns podemos indicar o tipo de converso atravs do atributo MarshalAs em conjunto com o enum UnmanagedType. Na listagem 7, utilizamos o atributo MarshalAs para o parmetro que estamos enviando e para o retorno da funo VerificarNumeroPar.
Codificando.net e-magazine
Veremos agora um exemplo de uma funo que recebe um valor inteiro e informa se esse valor par ou mpar. Na listagem 6 temos o cdigo em linguagem C.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication
www.codificando.net
63
e-magazine
{ class Program { [DllImport("CodigoNativo.dll")] [return: MarshalAs (UnmanagedType.Bool)] static extern Boolean VerificarNumeroPar( [MarshalAs(UnmanagedType.I4)] Int32 valor1); static void Main(string[] args) { Int32 valor; Boolean resultado; valor = 5; resultado = VerificarNumeroPar (valor); Console.WriteLine( "O numero {0} par? {1}", valor, resultado); valor = 7; resultado = VerificarNumeroPar (valor); Console.WriteLine( "O numero {0} par? {1}", valor, resultado); valor = 10; resultado = VerificarNumeroPar (valor); Console.WriteLine( "O numero {0} par? {1}", valor, resultado); Console.ReadKey(); } } }
Trabalhando com Tipos Por Referncia Para trabalhar com tipos por referncia, utilizaremos a palavra chave ref em nosso cdigo gerenciado quando estamos trabalhando com um Value Type, como um inteiro por exemplo. Se estivssemos trabalhando por exemplo, com um objeto String, isso no seria necessrio, pois o tipo String no .NET Framework um Reference Type. Vamos agora a um exemplo onde passamos para o cdigo nativo uma varivel do tipo inteiro com a palavra chave ref e esse valor ser incrementado. O mtodo no possui retorno. Veja antes o cdigo escrito em linguagem C na Listagem 8. Notem que o mtodo recebe um ponteiro para um tipo inteiro.
#include <stdio.h> __declspec(dllexport) void Incrementar(int *valor) { ++*valor; }
Listagem 8: Mtodo que incrementa um valor inteiro.
Codificando.net e-magazine
www.codificando.net
64
e-magazine
Na listagem 9 veremos o cdigo escrito em C# que chama esse mtodo e mostra o valor da varivel que foi enviada como parmetro.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication { class Program { [DllImport("CodigoNativo.dll")] static extern void Incrementar(ref Int32 valor); static void Main(string[] args) { Int32 valor = 0; Console.WriteLine("Valor original: {0}", valor); Incrementar(ref valor); Console.WriteLine( "Valor aps primeiro incremento: {0}", valor); Incrementar(ref valor); Console.WriteLine( "Valor aps segundo incremento: {0}", valor); Incrementar(ref valor); Console.WriteLine( "Valor aps terceiro incremento: {0}", valor); Console.ReadKey(); } } }
Listagem 9: Cdigo em C# que chama o mtodo de incremento escrito em linguagem C.
Como estamos trabalhando com referncia ou um ponteiro, dependendo do ponto de vista, o valor foi alterado na varivel que passamos como parmetro para o cdigo no gerenciado. Na figura 9, podemos ver a execuo do aplicativo.
Concluso Como podemos ver nesse artigo, muito simples reutilizar cdigos que foram escritos em cdigo nativo/no gerenciado, pois a Platform Invoke faz grande parte do trabalho de forma automtica, sem a necessidade de muito esforo do programador.
Codificando.net e-magazine
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#), Visual Basic 6, Crystal Reports, Sql Server e MySql.
www.codificando.net
65
e-magazine
www.codificando.net
66
e-magazine
Outro destaque foi o Windows Phone... este dispositivo eu j tinha vista no MIX 2010 em Las Vegas, e percebi no Brasil uma grande receptividade pelos participantes... alm dos recursos do sistema operacional e de hardware, a plataforma .Net como plataforma de desenvolvimento um ENORME diferencial! Se a Microsoft souber trabalhar com seus fornecedores e trazer ao Brasil com diversas opes de preos e hardware tenho certesa que rapidamente entra forte no mercado. Se voc tem alguma restrio ao Windows Mobile, esquea! O Windows Phone OUTRO mundo. Tivemos tambm diversas sesses de Visual Studio 2010, linguagens, produtos em geral, etc etc etc! Uma grandiosidade de contedo, como j disse, este evento no deixou para trs nenhum evento internacional da Microsoft, pelo menos dos que participei. Parabns a Microsoft e a quem investiu seu dinheiro e tempo neste evento sensacional!
www.codificando.net
67