codificando 11

48

Upload: ricardo-palma

Post on 06-Apr-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 1/48

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 2/48

 Fale com Editor 

É muito importante para a equipesaber a sua opinião sobre a revis-ta, caso tenha alguma critica, su-gestão, ou elogio entre em conta-to.

Caso tenha interesse em publicarum artigo na revista envie o títuloe um resumo do tema em formatoWord.

[email protected] 

EDITORES

Alexandre TarifaDiego NogareEmerson FacunteSergio Gonçalves

REVISÃO Fernanda Sallai Giaccomo Sabino 

MONTAGEM / FORMATAÇÃO Milton Carvalhaes 

EDITORAÇÃO E DIAGRAMAÇÃO Adriano Almeida 

COLABORADORESCaio AzevedoDanilo Marion MunhózDiego NogareFabiano BelmonteJuliano SchimiguelMilton C. FilhoRicardo QuartierSeiti YamashiroTiago Tiguen Sinzato

Produzido por:

www.codificando.net

Edição 11 Número 11 Ano 03 2009

Sumário

Conheça melhor essa nova tecnologia de ma-nipulação de dados.

Por: Milton C.Filho

28 :. Introdução ao LINQ

04 :. Gerando Boletos Bancários II

Continuação do artigo de como gerar boletosbancários usando o ASP.NET

Por: Seiti Yamashiro

03:. Editorial 48:. .Close ( )

Conheça esta poderosa plataforma derelatórios.

Por: Caio Azevedo

30:. Reporting Services 2005

Aprenda como escrever nas tabelas do SAPcom o .Net SAP Connector 2.0. 

Por: Diego Nogare

12 :. .NET SAP connector 2.0

Conheça as novas funcionalidades do C# 4. 

Por: Fabiano Belmonte

18:. C# 4.0

Introdução sobre tecnologias de jogos.

Por: Tiago Tiguen Sinzato / Juliano Schimiguel 

23:. Tecnologia de Jogos Digitais

Aprenda alguns conceitos de Rede.

Por: Danilo Marion Munhóz / Juliano Schimiguel 

34:. Servidor no Contexto de Rede

Como escolher o gerador de Relatórios ?

Por: Ricardo Quartier 

42:. Report Sharp Shooter

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 3/48

Diego [email protected]

Pessoal, como de costume estamos nos esforçando para montar a revista com artigos técnicos de alta qua-lidade e adequados às novidades/necessidades que surgem a cada dia no nosso universo.

Nesta edição, a 11ª publicada gratuitamente pelo grupo Codificando .Net, aborda artigos sobre LINQ, SQLServer, SAP, ASP .NET, entre outras tecnologias que são muito importantes hoje no mercado nacional. Osautores, são grandes conhecedores dos assuntos abordados, e conseguem passar de forma simples e diretaos temas propostos.

Um ponto super importante, que começamos a plantar a algum tempo e que agora está dando ótimos fru-tos é a idéia de que os próprios membros da comunidade criem os materiais. Isso é tão bom pra todomundo, que cada vez mais membros ativos estão realizando atividades e conquistando seus espaços em

meio às comunidades no Brasil.

Como sempre fiz, em todas as edições, deixo aqui o espaço aberto para que vocês possam nos enviar ma-teriais produzidos por vocês, que teremos o maior prazer em publicá-los.

Muito obrigado pela confiança

Grande Abraço,

Editorial

Edição 11 Número 11 Ano 03 2009

   E   D   I   T   O   R   I   A   L

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 4/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  4444

Gerando Boletos Bancários

Parte II 

Continuação do artigo de como gerar boletos bancáriosusando o ASP.NET

Na Parte I vimos como emitir um boletopara impressão. O que falta é populá-locom dados que façam sentido. Vamos en-tão populá-lo com dados relevantes.

Em primeiro lugar é necessário que vocêtenha os dados armazenados em algumlugar, um banco de dados talvez. Mas vou

presumir que seu código já trate dos dadose me ater à construção de duas partes fun-damentais do boleto: a linha digitável e ocódigo de barras. 

Note que, embora alguns dígitos da linha

digitável  sigam um padrão, cada bancopode possuir regras próprias para gerá-la.Entre em contato com seu banco para teressas informações.

Linha digitável 

A linha digitável, lembrando novamenteque estou seguindo as instruções do Itaú,possui 47 dígitos.

Abaixo segue a construção da linha, lem- brando que DAC significa dígito de autocon-

 ferência  , ou simplesmente dígito verifica-dor.

AA-ABC.CCDDXDDDDD.DEFFFYFGGGG.GGHHHZKUUUUVVVVVVVVVV

campo 110 dígitoscampo 211 dígitos

campo 311 dígitos 4 campo 514 dígitos

Campo 1 (AAABC.CCDDX):• AAA = código do banco – Itaú =

341;• B = código da moeda – Real = 9;• CCC = código da carteira de co-

 brança;• DD = dois primeiros dígitos doNosso Número;

• X = DAC módulo 10 do campo 1;

Campo 2 (DDDDD.DEFFFY):• DDDDDD = restante do Nosso Nú-

mero;• E = DAC do grupo agência/conta/

carteira/nosso número;• FFF = três primeiros números da

agência;• Y = DAC módulo 10 do campo 2;

Por: Seiti Yamashiro

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 5/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  5555

os DAC: s o módulo 10 e o módulo 11.O cálculo do DAC módulo 10 é realizadoda seguinte forma. Tome o campo a ter

calculado o DAC. Multiplique cada alga-rismo do campo pela sequência de mul-tiplicadores 2, 1, 2, 1, 2, 1…, posiciona-dos da direita para a esquerda. Some osresultados, que chamarei de N .

Calcule o módulo 10 de N – mod10(N)

ou N%10.

O DAC será 10 – mod10(N). Caso o DACseja 10, considere-o como 0.

Segue abaixo um método para calcular oDAC módulo 10:

private int CalculaDacMod10(string campo){int soma = 0;int m;

// caso exista um número par dealgarismos, inicia a mult. por 1if ((campo.Length % 2) == 0)m = 1;

elsem = 2;

foreach (char c in campo){soma += Convert.ToInt32(c) *

m;m = 3 - m; //regra aplicada:

(x+y) - x = y; (x+y) - y = x}int dac = 10 - (soma % 10);

if (dac == 10)return 0;

return dac;}

O cálculo do DAC módulo 11 é bem se-melhante.Ele depois será utilizado paracompor o DAC do código de barras.

Tendo o trecho a ter o DAC calculado,

tome seus algarismos e multiplique-os,iniciando-se da direita para a esquerda,pela sequência numérica de 2 a 9 ( 2, 3, 4,

Campo 3 (FGGGG.GGHHHZ):• F = último número da agência;•

GGGGGG = conta corrente + DAC;• HHH = zeros;• Z = DAC módulo 10 do campo 3;

Campo 4 (K):• K = DAC módulo 11 do código de

  barras (único DAC que vai para ocódigo de barras);

Campo 5 (UUUUVVVVVVVVVV):• UUUU = fator de vencimento;• VVVVVVVVVV = valor do boleto,

sem ponto e vírgula, ou zeros, nocaso do valor ser preenchido pelopróprio sacado. 

O fator de vencimento contém 4 dígitose é o número de dias desde 7 de outubrode 1997, servindo para indicar a data de

vencimento do boleto (teremos o bug domilênio 21 de fevereiro de 2025?).

Seu cálculo é bem simples, como pode-mos ver pelo método abaixo:

private int FatorVencimento(DateTime date){

DateTime zeroDay = new DateTime(1997, 10, 7);return (date - zeroDay).Days;

}

DAC

Analisando as regras anteriores, temosque a maior parte do trabalho consiste-seem concatenar strings e calcular DACs.

Para criar nossa Linha Digitável iremosdispor de dois algoritmos para calcular

Gerando Boletos Bancários

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 6/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  6666

5, 6, 7, 8, 9, 2, 3, 4… e assim por diante).Some o resultado obtendo nosso N.

Calcule agora o módulo 11 de  N  –

mod11(N) ou N%11. O DAC será 11 –mod11(N).

Caso o cálculo do DAC tenha dado 0, 10ou 11, considere-o como 1.

O método abaixo faz o cálculo do DACmódulo 11:

private int CalculaDacMod11

(string campo){int soma = 0;int m = 2;

//Invertendo a string, para fa-cilitar o trabalho com os multi-plicadoreschar [] arr =

campo.ToCharArray();Array.Reverse(arr);string reversed = new String

(arr);foreach(char c in reversed){

soma += Convert.ToInt32(c) *m;

m = (m + 1 > 9 ? 2 : m + 1);}int dac = 11 - (soma % 11);if (dac == 0 || dac == 10 ||

dac == 11)return 1;

return dac;}

Código de Barras

O padrão de código de barras para os boletos no Brasil é o denominado 2 de 5

intercalado , que pode ser resumido nasseguintes características:

• codifica apenas caracteres numéri-cos (0-9);

• cada caractere é representado por5 barras, dentre os quais 2 são maislongas;

• codificação binária – largo é 1  , es-

treito é 0;• os espaços também possuem signifi-

cado, por isso o intercalado

Este código de barras serve apenas pararepresentar nossa linha digitável, transfor-mado o que é uma seqüência de númerosem uma imagem. Existem muitos controlespor aí que fazem isto, mas não encontreinenhum gratuito para Asp.NET.

Neste exemplo vou utilizar o arcode-net.net. Ele pode ser testado e é completa-

mente funcional, a diferença é que, enquan-to você não registrá-lo, ele criará uma linhaescrito barcodenet.net (ou algo assim) logoacima do código de barras.

Embora a linha digitável possua 47 dígitos,o número que será codificado em barraspossui apenas 44. Por quê? Porque deve-mos nos livrar de três dos quatro DACs

que constam nela.Assim o código de barra terá apenas umDAC. Outra diferença importante é de quea ordem em que os campos se apresentamna linha digitável não é a mesma da apre-sentada pelo código de barras.

Segue como gerar então os dígitos quecompõem o código de barras:

• 3 dígitos do código do Banco (341);• 1 dígito com o código da moeda (3);• 1 dígito do DAC do Código de Barras;• 4 dígitos do fator de vencimento;• 10 dígitos do valor do título, desconsi-

derando qualquer sinal de pontuação;• 3 dígitos da carteira;• 9 dígitos do Nosso Número mais seu

próprio DAC;• 4 dígitos da agência;

Gerando Boletos Bancários

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 7/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  7777

• 6 dígitos da conta corrente, comseu próprio DAC;

• 3 dígitos não utilizados e compos-to por zeros (000).

Depois de gerar os dígitos que com-põem o código de barras, é questão detorná-lo em imagem utilizando o con-trole comentado anteriormente:

public byte[] CodigoBarras(){BarcodeNETWeb barcode = new 

BarcodeNETWeb();barcode.BarcodeText = Digi-

tosCodigoBarrasComDac();barcode.BarcodeType = BAR-

CODE_TYPE.INT2OF5;return bar-

code.GetBarcodeBitmap(FILE_FORMAT.PNG);}

Código

Segue então a listagem do código fonteutilizado neste trabalho. Claro que há

muito o que melhorar nele, mas isto ficacomo exercício. =)

Note que modifiquei a classe Dados dopost anterior.

public class LinhaDigitavel{public int Banco { get; pri-

vate set; }public int Moeda { get {return 

9; }}public string CarteiraCobranca

{ get; private set; }public string NossoNumero

{ get; private set; }public string Agencia { get;

private set; }public string ContaCorrente

{ get; private set; }public DateTime Vencimento

{ get; private set; }public decimal Valor { get;

private set; }

public LinhaDigitavel(int banco,string carteira,string nossonumero, string agen-cia, string contacorrente,

DateTime vencimento, decimal va-lor){this.Banco = banco;this.CarteiraCobranca = car-

teira;

this.NossoNumero = nossonume-ro;this.Agencia = agencia;this.ContaCorrente = contacor-

rente;this.Vencimento = vencimento;this.Valor = valor;

}public LinhaDigitavel(Dados da-

dos){this.Banco = dados.Banco;this.CarteiraCobranca = da-

dos.Carteira;

this.NossoNumero = da-dos.NossoNumero;

this.Agencia = dados.Agencia;this.ContaCorrente = da-

dos.ContaCorrente;this.Vencimento = da-

dos.DataVencimento;this.Valor = da-

dos.ValorDocumento;}public string FormatoParaImpres-

sao(){

returnCampo1().Substring(0, 5) + "." +Campo1().Substring(5) + " "+ Campo2().Substring(0, 5) + "." +Campo2().Substring(5) + " "+ Campo3().Substring(0, 5) + "." +Campo3().Substring(5) + " "+ Campo4() + " "+ Campo5();}public byte[] CodigoBarras(){BarcodeNETWeb barcode = new 

BarcodeNETWeb();

barcode.BarcodeText = Digitos-CodigoBarrasComDac();

barcode.BarcodeType = BARCO-DE_TYPE.INT2OF5;

return bar-code.GetBarcodeBitmap(FILE_FORMAT.PNG);}private string Campo1(){string campo =

this.Banco.ToString("000")+ this.Moeda.ToString("0")

+ this.CarteiraCobranca.Trim()+ this.NossoNumero.Split('-')[0].Substring(0, 2);

Gerando Boletos Bancários

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 8/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  8888

if (campo.Length != 9) throw new Exception("Entrada in-válida");

return campo + CalculaDacMod10(campo).ToString("0");

}private string Campo2(){

string campo =this.NossoNumero.Split('-')

[0].Substring(2, 6)+this.DacAgenciaContaCarteiraNossNumero().ToString("0")+ this.Agencia.Substring(0, 3);

if (campo.Length != 10)throw new Exception("Entrada in-válida");

return campo +

CalculaDacMod10(campo).ToString("0");}private string Campo3(){

string campo =this.Agencia.Substring(3, 1)+ this.ContaCorrente.Split('-')[0] +this.ContaCorrente.Split('-')[1] //sinto falta de explode/implode+ "000";

if (campo.Length != 10)throw new Exception("Entrada in-válida");

return campo +CalculaDacMod10(campo).ToString("0");}private string Campo4(){

return DacCodigoBarras().ToString("0");}private string Campo5(){

returnthis.FatorVencimento().ToString("0000")+ FormataValor(this.Valor);}private string FormataValor

(decimal valor){string[] value =

this.Valor.ToString("00000000.00",Sys-tem.Globalization.CultureInfo.In

variantCulture).Split('.');return value[0] + value[1];}

private int DacAgenciaConta-CarteiraNossNumero(){string termo =this.Agencia

+ this.ContaCorrente.Split('-')[0]

+ this.CarteiraCobranca+ this.NossoNumero.Split('-')[0];if (termo.Length != 20) throw 

new Exception("Entrada inválida");return CalculaDacMod10(termo);

}private int DacCodigoBarras(){return CalculaDacMod11

(DigitosCodigoBarrasSemDac());}private string DigitosCodigoBar-

rasSemDac(){

string termo =this.Banco.ToString("000")+ this.Moeda.ToString("0")+ this.FatorVencimento().ToString("0000")+ this.Valor.ToString("0000000000")+ this.CarteiraCobranca+ this.NossoNumero.Split('-')[0] +this.NossoNumero.Split('-')[1]+ this.Agencia+ this.ContaCorrente.Split('-')[0]+

this.ContaCorrente.Split('-')[1] //sinto falta de explode/implode+ "000";

return termo;}private string DigitosCodigoBar-

rasComDac(){string termo = DigitosCodigo-

BarrasSemDac();return termo.Substring(0, 4) +

DacCodigoBarras().ToString("0") +termo.Substring(4);

}private int FatorVencimento(){DateTime zeroDay = new 

DateTime(1997, 10, 7);return (this.Vencimento - ze-

roDay).Days;}

////// DAC módulo 10/// Exemplo:/// Considerando-se a seguinte re-presentação numérica do código de

barras:/// 34191.1012? 34567.88005?71234.57000? 6 16670000012345/// Temos:

Gerando Boletos Bancários

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 9/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  9999

/// a) Multiplicando a sequênciados campos pelo módulo 10:/// Campo 1 341911012 Campo 23456788005 Campo 3 7123457000/// X 212121212 X 1212121212 X1212121212

/// Observação: Os campos 4 e 5não tem DAC/// b) Some, individualmente, osalgarismos dos resultados doprodutos:/// Campo 1 : 6 + 4 + 2 + 9 + 2+ 1 + 0 + 1 + 4 = 29/// Campo 2 : 3 + 8 + 5 + 1 + 2+ 7 + 1 + 6 + 8 + 0 + 0 + 1 + 0= 42/// Campo 3 : 7 + 2 + 2 + 6 + 4+ 1 + 0 + 7 + 0 + 0 + 0 = 29/// c) Divida o total encontradopor 10, a fim de determinar o

resto da divisão:/// Campo 1 : 29 / 10 = 2, resto9/// Campo 2 : 42 / 10 = 4, resto2/// Campo 3 : 29 / 10 = 2, resto9/// d) Calculando o DAC:/// Campo 1 : DAC = 10 - 9 : DAC= 1/// Campo 2 : DAC = 10 - 2 : DAC= 8/// Campo 3 : DAC = 10 - 9 : DAC

= 1/// Portanto, a sequência corre-ta da linha digitável será:/// 34191.10121 34567.88005871234.570001 6 16670000012345/////////private int CalculaDacMod10

(string campo){

int soma = 0;int m;

// caso exista um número par de

algarismos, inicia a mult. por 1if ((campo.Length % 2) == 0)m = 1;

elsem = 2;

foreach (char c in campo){soma += Convert.ToInt32(c)

* m;m = 3 - m; //regra aplica-

da: (x+y) - x = y; (x+y) - y = x}int dac = 10 - (soma % 10);

if (dac == 10)return 0;return dac;

}

////// Considerando o seguinte conte-údo do Código de Barras:/// 3419?1667000001234511012345678800571423457000

/// onde:/// 341 = Código do Banco/// 9 = Código da Moeda/// ? = DAC do Código de Barras/// 1667 Fator de Vencimento(01/05/2002)/// 0000012345 = Valor do Título(123,45)/// 110123456788 = Carteira/NossoNúmero/DAC (110/12345678-8)/// 0057123457 = Agência/ContaCorrente/DAC (0057/12345-7)/// 000 = Posições Livres (zeros)/// Temos:

/// a) Multiplica-se a sequênciado código de barras pelo módulo11:/// 3419166700000123451101234567880057123457000/// X4329876543298765432987654329876543298765432/// b) Soma-se o resultado dosprodutos obtidos no item “a” aci-ma:/// 12 + 12 + 2 + 81 + 8 + 42 + 36

+ 35 + 0 + 0 + 0 + 0 + 0 + 7 + 12+15 + 16 + 15 + 2 +/// 9 + 0 + 7 + 12 + 15 + 16 + 15+ 12 + 63 + 64 + 56 + 0 + 0 + 20 +21 + 2 + 18 + 24 +/// 28 + 30 + 35 + 0 + 0 + 0 = 742/// c) Determina-se o resto da Di-visão:/// 742 / 11 = 67, resto 5/// d) Calcula-se o DAC:/// DAC = 11 – 5 então DAC = 6/// Portanto, a sequência corretado código de barras será:/// 

34196166700000123451101234567880057123457000/// ^---DAC/////////private int CalculaDacMod11

(string campo){int soma = 0;int m = 2;

//Invertendo a string, para faci-litar o trabalho com os

multiplicadoreschar [] arr = campo.ToCharArray();Array.Reverse(arr);

Gerando Boletos Bancários

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 10/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  10101010

string reversed = new String(arr);

foreach(char c in reversed){soma += Convert.ToInt32(c)

* m;

m = (m + 1 > 9 ? 2 : m +1);}int dac = 11 - (soma % 11);if (dac == 0 || dac == 10 ||

dac == 11)return 1;

return dac;}

}public class Dados{public DateTime DataDocumento

{ get; set; }

public DateTime DataVencimento{ get; set; }public DateTime DataProces-

samento { get; set; }public string Cedente { get;

set; }public string SacadoResumido

{ get; set; }public string SacadoCompleto

{ get; set; }public int Banco { get; set; }public string Agencia { get;

set; }

public string ContaCorrente{ get; set; }public string CodigoCedente

{ get; set; }public int NumeroDocumento

{ get; set; }public string EspecieDocumento

{ get; set; }public string Aceite { get;

set; }public string NossoNumero

{ get; set; }public string Carteira { get;

set; }

public string Instrucoes{ get; set; }public int Quantidade { get;

set; }public decimal Valor { get;

set; }public decimal ValorDocumento

{ get; set; }public string CodigoBaixa

{ get; set; }public byte[] CodigoBarra{

get

{ LinhaDigitavel linha = new LinhaDigitavel(this);

return linha.CodigoBarras();}

}public string LinhaDigitavel{get

{ LinhaDigitavel linha = new LinhaDigitavel(this);

return li-nha.FormatoParaImpressao();

}}

}

Um exemplo de uso do gerador de bole-tos:

protected void btnGeraBo-leto_OnClick(object sender, Even-tArgs e){Boleto boleto = new Boleto

(Por-tal.Controles.Boleto.Banco.ITAU,Server);List dados = new List();

dados.Add(new Por-tal.Controles.Boleto.Dados(){Aceite = "N",

Agencia = "1234",Banco = 341,Carteira = "109",Cedente = "Indústria ACME",CodigoBaixa = "109/12345678-9",CodigoCedente = "12345-6",ContaCorrente = "12345-6",DataDocumento = DateTime.Now,DataProcessamento = DateTi-

me.Now,DataVencimento = new DateTime

(2009, 4, 5),EspecieDocumento = "DM",

Instrucoes =@"Não receber após o vencimento",NossoNumero = "12345678-9",NumeroDocumento = 0000000012,Quantidade = 0,SacadoCompleto =

@"Padoca do Zé - LTDA CNPJ -12.345.678/0001-23Rua das Casas, 12301234-123 Vl do Bairro Sao PauloSP",SacadoResumido = "Padoca do Zé -

LTDA",Valor = 0,

ValorDocumento = 2637.00m});boleto.Baixa(Response, dados);

Gerando Boletos Bancários

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 11/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  11111111

Seiti Yamashiro

Graduando em Ciência da Computação, desenvolvedor

web em C#/Asp.NET com banco de dados MS SQL Ser-

ver. Nas hora vagas costuma programar em PHP e im-

plantar sistemas livres em Linux, além de alimentar um

blog: http://seiti.eti.br 

} Embora existam outras opções, como cartões de cré-dito e pagamento direto online, o boleto ainda é utili-zado devido à familiaridade e facilidade de pagamen-

to por parte do comprador. Por isso temos de sabergerá-lo em nossos sistemas, mesmo que utilizemossoluções prontas.

Vimos que gerar um boleto na plataforma .Net é algosimples, composto por uma guia impressa, algumalógica para a geração da linha digitável e uma ferra-menta de terceiros para a criação do código de barras.A parte mais difícil fica no sistema subjacente, nãoabordada, onde entra o retorno do pagamento do bo-leto e finalmente na remessa da mercadoria. Mas istofica para uma próxima.

Gerando Boletos Bancários

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 12/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

12121212Ago / Set - 2009 | 

Escrevendo nas tabelas do SAP

com o .NET SAP Connector 2.0 a-través de RFC

Aprenda como escrever nas tabelas do SAP com

o .Net SAP Connector 2.0. 

No artigo anterior sobre SAP (lendo as ta- belas do SAP com .NET SAP Connector 2.0através de RFC, que pode ser acessado na10ª Edição da Revista Codificando .Net e-Magazine), foi explicado sucintamente oque é o SAP, e quais são as atividades/recursos envolvidos para conseguir utilizarRFCs para se trabalhar com o SAP. Se sen-

tir necessidade, pode consultar o artigo an-terior, para esclarecer e alinhar as idéias.

Neste artigo, faremos o inverso do que foifeito anteriormente. Desta vez, ao invés deler informação do SAP, iremos escreverinformação no SAP. Para isso, será desen-volvida uma aplicação Windows Formsem C# que fará a escrita em uma RFC do

SAP, com base em um DataTable (mas aorigem da informação fica a seu critério!).

Vou partir diretamente para a aplicação,entendendo que já esteja tudo configurado,como explicado no artigo sobre ler tabelasdo SAP.

Após a instalação do conector, um novoícone será adicionado nos templates quepodem fazer parte do projeto (Figura 1),este novo item é o “SAP Connector Proxy”.

Este Proxy receberá todos os itens dasRFCs que serão conectadas atravésdo .Net e montará automaticamente asclasses de acessos com suas respectivasproperties (métodos Get e Set), entre ou-tras coisas.

Para utilizar este proxy, será necessário

adicionar um novo item ao projeto, en-tão vá até a Solution Explorer, cliquecom o botão direito do mouse e apontepara Add New Item, acompanhe estepasso na Figura 1. A tela de Templatedos itens a serem inseridos, pode ser a-companhado na Figura 2.

Por: Diego Nogare 

Figura 1. Adicionando novo item ao projeto

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 13/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

13131313Ago / Set - 2009 | 

rer, para se poder visualizar as RFCs queestão liberadas pra acesso. Vá até o ServerExplorer, procure o item do SAP (que foi

inserido após a instalação do SAP .NetConnector 2.0), expanda a árvore do SAPe clique com o botão direito no item“Application Servers”, então adicione osdados AppServerHost / Client / Pass-word / SystemNumber e UserName. A-companhe este passo na Figura 4.

Após este passo, será possível expandir o“Application Servers” e visualizar o servi-dor que você adicionou (terá o nome for-

necido ao campo AppServerHost). Ao ex-pandir este item, será necessário configu-rar o filtro das Functions para aparecer asRFCs (crie um novo filtro e coloque os da-dos para filtrar (* retorna todas)) que po-derão ser utilizadas na aplicação. Acom-panhe as RFCs fornecidas na Figura 5.

Agora que as RFCs já estão listadas, é sóarrastar a RFC que será acessada para

Após a adição, o item aparecerá no Solution

Explorer (neste exemplo, foi adicionado na pró-

pria raiz do projeto, mas ele pode ser adiciona-

do dentro de alguma outra pasta para melhorar

a organização), como mostra a Figura 3.

Dê dois cliques no Proxy adicionado, euma tela sem nenhum controle será a-

 berta no painel principal do Visual Stu-

dio 2003. Esta tela que se abriu, serviráde container para as RFCs gerarem auto-maticamente os códigos das classes deacesso. Este processo será explicado commais detalhes adiante.

Agora, para conseguir utilizar as RFCs(que foram criadas pelos ABAPs, lem-

  bra?!), é necessário adicionar os dados

do servidor do SAP (que serão forneci-dos pelo pessoal de BASIS, isso vocêtambém lembra, né?!) no Server Explo-

Escrevendo as tabelas do SAP com o .NET SAP Connector 2.0

Figura 2. Adicionando o proxy ao Projeto. 

Figura 3. Proxy na Solution Explorer. Figura 4: Inserindo os dados de acesso no ServerExplorer. 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 14/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

14141414Ago / Set - 2009 | 

dentro do Proxy, na tela que já deve es-tar aberta no painel principal do VisualStudio. Caso isso ainda não esteja feito,dê dois cliques no item do proxy na So-lution Explorer. Quando arrastar a RFCpara cima do proxy, os dados da classedesta RFC serão criados automatica-mente, permitindo o acesso à seus cam-pos através de suas properties. Acompa-

nhe na Figura 6, o proxy com uma RFC já arrastada.

Agora que a RFC foi arrastada para o

proxy, as classes para acessar os dadosdo SAP foram criados automaticamentedentro do proxy, se for até a SolutionExplorer e exibir os itens ocultos (ShowAll Files), expandindo o proxy é possí-vel ver as classes criadas (classes exibi-das na Figura 7). 

Está faltando pouco agora, o mais compli-cado já passou. Vamos ao código do méto-do acessarSAP( ) criado, e chamado pelométodo LOAD do formulário. Acompanhea Listagem 1, onde os códigos deste méto-do foram inseridos.

private void acessarSAP()

{escrevendoSAP proxy = null;try {

proxy = new escrevendoSAP(“String de Conexão”);

proxy.Connection.Open();

ZCPRHEADRTable tabelaSAP= new ZCPRHEADRTable();

ZCPRHEADR linha = new ZCP-RHEADR();

DataTable dt = new DataTable();

montarColunas(ref dt);foreach (DataRow dr in 

dt.Rows){

linha.Codca = dr["codigo"].ToString();

linha.Locen = dr["nome"].ToString();linha.Numrg = dr["telefone"].ToString();

tabelaSAP.Add(linha);proxy.Bay2_N2rfi_Rfc_Upda_Zcprheadr(ref tabelaSAP);

}proxy.CommitWork();

Escrevendo as tabelas do SAP com o .NET SAP Connector 2.0

Figura 5: RFCs que poderão ser utilizadas. 

Figura 6: RFC arrastada para o proxy. 

Figura 7: As classes criadas automaticamentepelo proxy.

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 15/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

15151515Ago / Set - 2009 | 

}catch (Exception ex){

MessageBox.Show(ex.Message);}finally 

{

proxy.Connection.Close();proxy = null;

}}

private void montarColunas(ref DataTable dt)

{

dt.Columns.Add("codigo");dt.Columns.Add("nome");dt.Columns.Add("telefone");DataRow dr = dt.NewRow();dr["codigo"] = "1";dr["nome"] = "Diego";dr["telefone"] = "12345678";dt.Rows.Add(dr);

A aplicação utilizará o proxy criado, que

foi chamado de escrevendoSAP paracriar uma conexão com outro servidorSAP (não precisa ser necessariamente omesmo utilizado no Server Explorer,mas pode ser, sem problema). Os itensque precisam ser inseridos na String deConexão, podem ser encontrados abai-

xo, na Listagem 3. Substitua estes itensem vermelho pelos dados fornecidospelo pessoal de BASIS, como foi feito noServer Explorer.

"ASHOST=AppServerHost SYSNR=SystemNumber  CLI-ENT=Client USER=UserName PASSWD=Password"

Após a informação de conexão do

proxy, será criada uma variável do tipo“Tabela da RFC” (ZCPRHEADRTable ta-

 belaSAP = new ZCPRHEADRTable();). Es-ta variável criada será passada por parâ-

metro de referência, para o método com onome da RFC(proxy.Bay2_N2rfi_Rfc_Upda_Zcprheadr(ref tabelaSAP);) que está dentro do proxy.Como o parâmetro foi por referência, avariável criada passará a ter os dados li-dos no DataTable e que serão escritos noSAP através da RFC.

Este foreach é criado para percorrer todosos itens do DataTable utilizado como e-xemplo, e preencher a tabela do SAP, vejaque em todas as iterações do foreach a va-riável linha do SAP possui seus campospopulados e a RFC de escrita no SAP échamada.

A Figura 8 é do SAP, após receber o valor

que inserimos dentro do DataTable nométodo montarColunas. Repare que oscampos com marcação em vermelho apon-tam para os campos que foram preenchi-dos dentro do foreach no código da Lista-gem 1.

Após esta análise simples e direta, é possí-vel fazer uma escrita em tabelas do SAP

Escrevendo as tabelas do SAP com o .NET SAP Connector 2.0

Listagem 1: Código para utilizar o proxy e asclasses criadas. 

Listagem 2: Código para criar um DataTablee popular com dados ficticios. 

Listagem 3: Dados da String de Conexão

Figura 8: Resultado da informação inseridano SAP. 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 16/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

16161616Ago / Set - 2009 | 

através do Visual Studio 2003. Um pró-ximo artigo explicará como trabalharcom um workaround para se trabalharcom Visual Studio 2005 e Visual Studio

2008.

Escrevendo as tabelas do SAP com o .NET SAP Connector 2.0

Diego Nogare

Graduado em Ciência da Computação, Pós-Graduado em Engenharia

de Computação com ênfase em Desenvolvimento Web com .NET.

Colaborador do Portal Linha de Código e da revista SQL Magazine,

Líder do grupo de usuários Codificando .NET, Líder dos Microsoft 

Student Partners [MSP] de São Paulo e Microsoft Most Valuable Pro-

 fessional [MVP] em SQL Server, possui certificações MCP e MCTS em

SQL Server 2005, é palestrante em eventos da Microsoft, Codifican-

do .NET e INETA BR, mantém o site: www.diegonogare.net 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 17/48

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 18/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

18181818Ago / Set - 2009 | 

C# 4.0 

Conheça as novas funcionabilidades do C# 4. 

Por: Fabiano Belmonte 

O Visual Studio 2010 e .NET Framework 4,0em breve estará em fase beta, e existem al-guns novos recursos excelentes que todosnós podemos esperar animados com estenovo lançamento. Juntamente com o Visual

Studio 2010 e do. NET Framework 4,0 vere-mos a versão 4.0 da linguagem de programa-ção C #. Neste artigo eu gostaria de olhar umpouco a trás de onde começou a linguagemde programação C # e olhar para onde An-ders Hejlsberg do C # e sua equipe queremchegar.

Em 1998, o projeto C # começou com o objeti-vo de criar uma simples, moderna e orienta-da a objeto, linguagem de programação quese tornou conhecido como o. NET. A Micro-soft lançou o. NET e a linguagem de progra-mação C #, em meados 2000 e desde então, C# tornou-se uma das mais populares lingua-gens de programação em uso hoje. Foi lança-do então o C# 1.0

A versão 2.0 da linguagem evoluiu de mais,

particularmente acho que e umas das maio-res evoluções em tão pouco tempo de umalinguagem e passou a dar suporte aos genéri-cos, métodos anônimos, iterators, tipos parci-ais e tipos anuláveis.

Ao conceber a versão 3.0 da linguagem a ên-fase foi para permitir a LINQ (Language In-tegrated Query), que exigia a adição das se-

guintes funcionalidades:• Implictly Typed Local Variables.

• Extension Methods.• Lambda Expressions.• Object and Collection Initializers.•  Annonymous types.• Implicitly Typed Arrays.•

Query Expressions and ExpressionTrees.

No passado linguagens de programa-ção foram projetadas com um deter-minado paradigma em mente, e comotal, temos linguagens que foram, co-mo exemplo, destinadas a serem ori-entadas a objeto ou funcionais. Hoje,porém, as linguagens que a ser conce-

  bidas com vários paradigmas emmente. Na versão 3.0 da linguagemde programação C # adquiriu váriascapacidades funcionais normalmenteassociados a programação para per-mitir Language Integrated Query(LINQ).

Na versão 4.0 do C # continua a evo-

luir, embora desta vez, a equipe do C# foram inspiradas por linguagensdinâmica como Perl, Python e Ruby.A realidade é que existem vantagense desvantagens para ambas as lingua-gens seja ela escrita estaticamente edinamicamente.

Outro paradigma alem do design e

inovação é concorrente que é um pa-

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 19/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

19191919Ago / Set - 2009 | 

radigma que tem certamente influencia-ram o desenvolvimento do Visual Studio2010 e do. NET Framework 4.0.

Agora o que o C# traz de novo:

• Dynamically Typed Objects.• Optional and Named Parameters.• Improved COM Interoperability.• Safe Co- and Contra-variance.•

Chega de papo e vamos olhar para algum

exemplos em C # 4.0 utilizando essas ino-vações língua ...

Em C # Hoje você pode ter, o seguinte có-digo que é uma instância de uma clase es-crita estaticamente . NET então chama ométodo Add em que a classe para obter asoma de dois inteiros:

Calculator calc = GetCalculator();

int sum = calc.Add(10, 20);

Nosso código fica ainda mais interessantese a classe Calculadora não é escrita estati-camente, mas está escrito em COM, Ruby,Python, ou mesmo JavaScript. Mesmo sesoubéssemos que a classe é uma calcula-dora. objeto NET, mas não sabemos qual otipo específico que é, então, teria de utili-

zar reflection para descobrir atributos e otipo em tempo de execução e, em seguida,dinamicamente invocar o método Add.

object calc = GetCalculator();Type type = calc.GetType();object result = type.InvokeMember("Add",BindingFlags.InvokeMethod,null,new object[] { 10, 20 });int sum = Convert.ToInt32(result);

Se a calculadora classe foi escrito em Ja-vaScript, então nosso código ficaria algo

como a seguinte.

ScriptObect calc = GetCalculator();

object result = calc.InvokeMember

("Add", 10, 20);int sum = Convert.ToInt32

(result);

Com C # 4,0 teríamos simplesmente escre-ver o seguinte código:

dynamic  calc = GetCalculator(); int result = calc.Add(10, 20); 

No exemplo acima declaramos uma variá-vel calc, cujo tipo estático é dinâmico. Sim,você leu corretamente que nós escrevemosestaticamente nosso objeto a ser dinâmico.Teremos então dinâmico usando métodoinvocação para chamar o método Add e emseguida, dinâmico conversão para convertero resultado da dinâmica de uma invocaçãodigitado estaticamente inteiro.

Você está ainda encorajado a usar tipagemestática sempre que possível, porque os be-nefícios que oferecem línguas escrita estati-camente nós. Usando C # 4,0, no entanto,deve ser menos doloroso nessas ocasiões emque você tem de interagir com objetos dina-micamente digitados.

Outro grande benefício do uso de C # 4.0 é

que a linguagem suporta agora facultativa eparâmetros nomeados e por isso vamos a-gora dar uma olhada em como esta caracte-rística irá mudar a maneira de conceber eescrever o seu código.

Um desenho padrão você ver como muitasvezes que um determinado método está so-

  brecarregado, porque o método deve ser

chamado com um número variável de parâ-

C#4.0

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 20/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

20202020Ago / Set - 2009 | 

metros.

Vamos assumir que temos o seguinte

método OpenTextFile juntamente comtrês sobrecargas do método com dife-rentes assinaturas. Sobrecargas do mé-todo primário em seguida chame o mé-todo primário de passar os valores pa-drão no lugar desses parâmetros paraos quais um valor não foi especificadona chamada para o método sobrecarre-gado.

public StreamReader OpenTextFile(string path, Encoding encoding,bool detectEncoding, int buffer-Size) { }

public StreamReader OpenTextFile

(string path, Encoding encoding,

bool detectEncoding) { }

public StreamReader OpenTextFile

(string path, Encoding encoding)

{ }

public StreamReader OpenTextFile

(string path) { }

No C # 4.0 O método primário pode serrefactored para usar parâmetros opcio-nais como mostra o seguinte exemplo:

public StreamReader OpenText-

File(string path,Encoding en-

coding = null,bool detectEn-

coding = false,int bufferSize

= 1024) { }

Perante esta declaração, é agora possí-vel chamar o método OpenTextFile o-mitindo um ou mais dos parâmetrosopcionais.

OpenTextFile("foo.txt", Encod-

ing.UTF8);Também é possível usar o C # 4,0 su-porte para parâmetros nomeados e, co-

mo tal, o método pode ser chamado O-

penTextFile omitindo um ou mais dos pa-râmetros opcionais, enquanto especifican-

do também outro parâmetro pelo nome.

OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4098);

O nome dos argumentos deve ser forneci-do somente estância última embora desdequando eles podem ser fornecidas emqualquer ordem.

Se você alguma vez escrito qualquer códi-go que executa um certo grau de interope-rabilidade COM você provavelmente vistocomo o código seguinte.

object filename = "test.docx";object missing = Sys-

tem.Reflection.Missing.Value;

doc.SaveAs(ref filename,

ref missing, ref missing, ref miss-

ing,ref missing, ref missing, ref 

missing,ref missing, ref missing, ref missing,ref missing, ref missing, ref 

missing,ref missing, ref missing, ref 

missing);

Com os parâmetros opcionais e nomeadolinguagem C # 4,0 prevê melhorias signifi-cativas na interoperabilidade COM e, por-tanto, o código acima pode agora ser re-factored tal que o convite é apenas:

doc.SaveAs("foo.txt");

Ao realizar a interoperabilidade COM vo-cê perceber que você é capaz de omitir aref modifer embora o uso do modificadorref ainda é necessário quando não exer-çam COM interoperabilidade.

Com as versões anteriores das tecnologias

era necessário também um navio PrimaryInterop Assembly (PIA), juntamente com

C#4.0

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 21/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

21212121Ago / Set - 2009 | 

o seu aplicativo gerenciado. Isso não énecessário quando se utiliza C # 4.0,porque o compilador irá injetar vez o

interop tipos diretamente para as As-sembly de seu aplicativo gerenciado esó vai injetar os tipos que você está u-sando e não de todos os tipos encontra-dos no interior da PIA.

O último aperfeiçoamento lingüísticoque vamos explorar é co-variância econtra-variância e vamos começar por

explorar com a co-variância. NET ma-trizes.

string[] names = new string[] {"Anders Hejlsberg",

"Mads Torgersen",

"Scott Wiltamuth",

"Peter Golde" };

Write(names);

Desde versão 1.0 em um array o. NETFramework foi co-variante significandoque uma matriz de strings, por exem-plo, pode ser passada para um métodoque espera um array de objetos. Comotal, a matriz acima pode ser transmitidapara o seguinte Escreve método que es-pera um array de objetos.

private void Write(object[] ob-

jects){

}Infelizmente, em matrizes. NET não sãoco-seguro variante como podemos verna seguinte código. Partindo do pressu-posto de que os objetos variável é umamatriz de strings da seguinte terá êxito.

objects[0] = "Hello World";

Embora se uma tentativa é feita para a-

tribuir um inteiro à matriz de stringsuma ArrayTypeMismatchException é

 jogado.

objects[0] = 1024;

Em ambos os C # 2.0 e C # 3,0 invarian-tes são genéricos e, portanto, um errocompilador iria resultar o seguinte có-digo:

List<string> names = new List<string>();

Write(names);

Quando o Escreve método é definidocomo:

public  void Write(IEnumerable<object>objects) { }

Generics com C # 4,0 apoiar agora segu-ra co-variância e contra-variância atra-vés do uso das palavras-chave dentro efora contextuais. Vamos dar uma olha-da em como isso muda a definição do<T> IEnumerable e IEnumerator <T>interfaces.

public interface IEnumerable<out T>{

IEnumerator<T> GetEnumerator

();}

public interface IEnumerator<out T>{

T Current { get; }bool MoveNext();

}

Você perceberá que o tipo de parâmetro

T da interface IEnumerable foi prefixa-do com o fora contextuais palavra-chave. Dado que a interface IEnumera-

C#4.0

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 22/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

22222222Ago / Set - 2009 | 

ble é somente leitura, não há capacida-de especificada na interface para inserirnovos elementos com a lista, ela é segu-

ra para o tratamento de algo mais deri-vados como algo menos derivados.Com a palavra-chave fora contextuaisestamos afirmando que contratualmen-te IEnumerable <out T> segurança é co-variante. Dado que IEnumerable <outT> segurança é co-variante podemosagora escrever o seguinte código:

IEnumerable<string> names = Get-

TeamNames();IEnumerable<object> objects =names;

Porque a interface IEnumerable <outT> utiliza a palavra-chave no contextodo compilador podem motivo que a a-tribuição acima é seguro.

Utilizando a palavra-chave no contexto

podemos alcançar seguro contra-variância, ou seja, tratar algo menos de-rivados como algo mais derivados.

public interface IComparer<in T>{

int Compare(T x, T y);}

Dado que IComparer <in T> é seguracontra-variante podemos agora escre-

ver o seguinte código:

IComparer<object> objectComparer= GetComparer();IComparer<string> stringComparer= objectComparer;

Embora o actual build CTP do VisualStudio 2010 e do. NET Framework 4,0tem suporte limitado para a variância

melhorias em C # 4,0 a próxima versão beta permite que você use o novo para

dentro e para fora contextuais tais comopalavras-chave em tipos IComparer <inT>. O. NET Framework equipa está a

atualizar os tipos, no âmbito de ser co-seguro e contra-variante.

Eu mostrei aqui alguns recursos quevocê pode achar útil para explorar ascapacidades da linguagem de progra-mação C # 4,0 e gostaria de encorajá-loa também fazer download e instalar aversão beta.

Bons Códigos...

C#4.0

Fabiano Belmonte

Senior Architect da InfoMoney.com, especialista em aplica-

ções e-Business com larga experiência em B2B

(Submarino.Com e Saraiva.Com). Trabalha há 5 anos com a

tecnologia .Net, aplicando conhecimentos nas diversas á-

reas: instituições financeiras (sistema SPB), e-Commerce,

gerenciamento logístico entre outras. Trabalhando com Vi-

sual Studio desde suas primeiras versões, responsável pela

implementação de uma Metodologia de trabalho e melho-

ras significativas no resultados e na qualidade do time de

Desenvolvimento de muitas empresas por onde passou co-

mo (Saraiva.Com) e ferramentas como TFS (Team Foundati-

on Server).

Foi palestrante em eventos como Codificando. NET 2008 e

outros eventos sobre Tecnologia .NET. 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 23/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

23232323Ago / Set - 2009 | 

Tecnologias para o Desenvolvimen-

to de Jogos Digitais Introdução sobre tecnologias de jogos.

Por: Tiago Tiguen Sinzato / Juliano Schimiguel 

Introdução

Motor de jogo (também conhecido pelotermo em inglês, game engine, ousimplesmente engine) é um programa decomputador e/ou conjunto de

  bibliotecas, para simplificar e abstrair odesenvolvimento de jogos ou outrasaplicações com gráficos em tempo real,para videogames e/ou computadoresrodando sistemas operacionais. Afuncionalidade tipicamente fornecidapor um motor de jogo inclui: um motorgráfico para renderizar gráficos 2D e/ou3D, um motor de física para simular afísica ou simplesmente para fazerdetecção de colisão, suporte a animação,sons, inteligência artificial, networking,gerência de memória, gerência dearquivos, gerência de linha de execução,um grafo de cena e, suporte a uma

linguagem de script. O processo dedesenvolvimento de jogos éfreqüentemente agilizado quando usadoo mesmo motor de jogo para criardiferentes jogos.

A maioria dos motores de jogo sãodistribuídos em forma de API(Application Programming Interface ou

Interface de Programação deAplicativos), porém, alguns motores são

distribuídos em conjunto de ferramentas,que agilizam e simplificam ainda mais o

desenvolvimento do jogo, como porexemplo: IDEs, scripts pré-programados,e programas que “empacotam” e deixampronto o jogo para distribuição. Essesmotores “completos” são chamados deMiddleware. Pelo fato de seremdistribuídos com outras ferramentas, elessuprem a necessidade da compra deoutras ferramentas, reduzindo os custos.

Como exemplo, pode-se citar: Blender,Gamebryo, Havok, RAD Game Tools,RenderWare e, Unreal Engine.

Um motor de jogo pode ser dividido emduas principais categorias: motor gráficoe motor de física. Motores gráficos lidamcom os gráficos, sendo responsáveis deprocessar dados abstraídos de alto nível egerar dados de baixo nível intendíveispelo hardware. Como exemplo, pode-secitar: Crystal Space, Irrlicht, OGRE eRealmForge. Motores de física lidam coma física, sendo resposáveis por simularações reais, através de variáveis comogravidade, massa, fricção, força eflexibilidade. Como exemplo, pode-secitar: Bullet, COLLADA e ODE.

História

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 24/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

24242424Ago / Set - 2009 | 

O termo “game engine” originou-se nomeio da década de 1990, especialmente emconexão com jogos 3D, como tiro em

primeira pessoa a exemplo dos jogosDoom e Quake que ao invés de construir o  jogo do zero, outros desenvolvedoreslicenciaram os núcleos destes jogos,usando-os como base para seus própriosmotores de jogo. Com o amadurecimento,os motores de jogo deixaram de serestringir ao desenvolvimento de jogos.Eles são usados em outras áreas, como

treinamento, uso médico e simulaçõesmilitares.

Como a maioria dos jogos 3D estão, cadavez mais, se limitando ao poder da GPU ePPU(Graphics Processing Unit ou Unidadede Processamento Gráfico/Unidade deProcessamento de Física), as perdas dedesempenho das linguagens deprogramação de alto nível, como C#, Java ePython, deixam der ser válidas, enquantoos ganhos de produtividade oferecidos poressas linguagens trabalham em benefíciodos desenvolvedores de motores de jogo.

Abstração de hardware 

Motores de jogo fornecem abstração dehardware, permitindo a um programador

desenvolver jogos sem a necessidade deconhecer a arquitetura da plataforma-alvo,que pode ser um console ou um sistemaoperacional. Por esse motivo, muitosmotores são desenvolvidos a partir de APIexistentes, como OpenGL, DirectX,OpenAL e SDL, ou até mesmo a partir deoutro motor, que pode facilitar o seudesenvolvimento. A abstração de

hardware também é essencial para odesenvolvimento de motores de jogomultiplataforma.

Motores de tiro em primeirapessoa 

Um bom e conhecido subconjunto demotores de jogo são os motores de tiroem primeira pessoa 3D. Enquanto jogosde estratégia em tempo real esimuladores de vôo apostam naqualidade gráfica, jogos deste gêneroapostam na ação.

O motor mais conhecido deste gênero é

o Doom. A classificação de bom motordo gênero é exigente, pois o que éconsiderado avançado em um ano, noano seguinte pode ser consideradopadrão. É comum serem criados novosmotores com base em velhos motores,misturando novas funções, masmantendo algumas antigas. Quando ummotor mantém desenvolvimento focado

nos gráficos, o jogo pode perder noquesito “ação”. Um bom exemplo disso éo jogo CellFactor: Revolution, que teveseu desenvolvimento parado; o jogoagora está disponível para downloadcompleto e gratuito.

Principais motores de jogosMotores tradicionais: 3D GameStudio -

C4 Engine - DX Studio - Esperient Crea-tor – Irrlicht - Ketsji(Blender) - NeoAxisEngine - Panda3D - RPG Toolkit -Torque Game Engine - Truevision3D -Unity - Unreal Engine

Motores de física: Bullet - Havok – ODE

Motores gráficos: Crystal Space - OGRE

– OpenSceneGraph

Motores proprietários: 3D GameStudio -

Tecnologia para Desenvolvimento de Jogos Digitais

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 25/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

25252525Ago / Set - 2009 | 

C4 Engine - DX Studio - Esperient Crea-tor - Havok - NeoAxis Engine - TorqueGame Engine - Truevision3D - Unity -

Unreal Engine

Motores código aberto: Bullet - CrystalSpace - Irrlicht - Ketsji (Blender) - ODE -OGRE - OpenSceneGraph - Panda3D -RPG Toolkit

Desenvolvimento nas platafor-mas Atuais

Cada plataforma possui seu kit dedesenvolvimento proprietário e pago,porém, além do computador existemalternativas para desenvolver jogospara essas plataformas.

• Microsoft Xbox 360: Possui seu kitde desenvolvimento profissional,porém com alternativa grátis cha-

mada Microsoft XNA Studio Ex-press, podendo ser desenvolvidos

 jogos para PC e para Xbox.

• Sony Playstation 3: A plataformada Sony é uma das mais fechadas,que possui seu kit de desenvolvi-mento com custo alto. Porém aultima novidade é que sairá um

concorrente para a ferramenta daMicrosoft, XNA chamada PhyreEngine que possibilitará usuáriosa criarem seus jogos utilizandotoda a potência do Playstation 3.

• Sony Playstation Portable: Tam- bém como o Playstation 3, o Porta- ble da Sony também é bem fecha-

do e o desenvolvimento gratuitonessa plataforma é feito de manei-ra ilegal através de ferramentas

criadas por usuários que utilizamfalhas do console para rodar essetipo de aplicativo.

• Nintendo Wii: A Nintendo tam- bém possui o seu kit de desenvol-vimento profissional, e devido àsduas maiores concorrentes esta-rem brigando pelo desenvolvi-mento gratuito começaram rumo-res de que o Wii também terá asua ferramenta para usuários.

• Nintendo DS: Assim como o PSP,o console portátil da Nintendonão possui qualquer tipo de ferra-menta para usuários desenvolve-rem jogos ou aplicativos sem utili-zar o kit oficial.

Computador: A plataforma PC é a mais aber-ta, e possui uma quantidade muito grande

de opções para desenvolvimento não só de jogos amadores como profissionais de bai-xo ou nenhum custo.

Celular: O desenvolvimento de jogos e aplica-tivos para celular cresceu muito devido aevolução rápida desses dispositivos, hojetambém é possível criar jogos em 3D paracelulares. As duas plataformas mais utili-zadas são a Symbian e o Java (JME), po-rém a Microsoft anunciou que será dispo-nibilizada na versão 3.0 do XNA a opçãode desenvolvimento de jogos para plata-forma Windows Mobile.

6. Ferramentas desenvolvimento para PC 

Para desenvolver jogos para PC, temos a op-ção de utilizar diretamente as APIs gráficas(DirectX e OpenGL) porém teremos que re-desenvolver muita coisa, gastando muito tem-po. A opção mais viável é utilizar engines

prontas e disponíveis para cada parte do Ga-me, essas engines variam de qualidade, lingua-gem, facilidade, preço e complexidade. Cabe a

Tecnologia para Desenvolvimento de Jogos Digitais

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 26/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

26262626Ago / Set - 2009 | 

nós testá-las e encontrar a engine que mais seadéqüe as necessidades do Game. Segue umalista de engines para cada parte:

Engines gráficas

Irrlicht (http://irrlicht.sourceforge.net),

muito boa engine gráfica em C++, foco em

3D, intuitiva e fácil de usar;

OGRE (http://www.ogre3d.org), engine

gráfica muito experiente em C++, foco em

3D, complexa e com bastante material;

XNA (http://msdn.microsoft.com/xna/),

engine gráfica em C# da Microsoft, foco em3D, que compila para ambiente PC e

XBOX360, SDL (http://www.libsdl.org),

engine gráfica e sonora simples de usar,

foco em 2D, nativa em C++;

Allegro (http://alleg.sourceforge.net), en-

gine gráfica experiente e simples de usar,

foco em 2D, nativa em C++;

GLScene (http://www.glscene.org), enginegráfica em OpenGL muito completa, foco

em 3D, desenvolvida para Delphi;

Game Maker (http://

www.yoyogames.com) O Game Maker

é escrito em Delphi, motivo pelo qual

não tem versões para outros sistemas 

que não a Microsoft Windows.

Engines físicas

ODE (http://www.ode.org), engine física

totalmente open e free nativa em C++,

simples e fácil de usar;

Newton (http://

www.newtondynamics.com), engine de

física muito completa e fácil de usar na-

tiva em C++, uso profissional pago;

Ageia (http://www.ageia.com), engine

de física também muito completa e fácil

de usar nativa em C++, recentemente

comprada pela Nvidia, uso profissional

pago;

Engines sonoras:

Irrklang (http://www.ambiera.com/

irrklang/), engine de som criada em

C++ para trabalhar especialmente com

a Irrlicht;

Fmod (http://www.fmod.org), engine

muito experiente em C++;

OpenAL (http://www.openal.org),

engine muito experiente em C++;

SDL (http://www.libsdl.org), enginegráfica e sonora simples de usar, nativa

em C++.

Após relacionar as engines que iremos utili-

zar, basta escolher a IDE C++ preferida para

iniciar o desenvolvimento:Microsoft C++ Express Edition (http://

www.microsoft.com/express/vc/ ), grátis

para o uso somente no Windows;Code::Blocks C++ (http://

www.codeblocks.org), grátis e presente no

Windows e no Linux;

Dev C++ (http://www.bloodshed.net/

devcpp.html), grátis e somente para Win-

dows.

7. Ferramentas para desenvolvimento rápido

de Games

Uma alternativa rápida para quem não possui

uma equipe ou tempo para desenvolvimento

são ferramentas que possuem um pré-formato

de game ou funcionalidades. Essas ferramentas

reúnem várias engines e disponibilizam um fra-

mework para o desenvolvimento rápido de um

Game. Segue alguns exemplos: 

Tecnologia para Desenvolvimento de Jogos Digitais

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 27/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

27272727Ago / Set - 2009 | 

Game Maker (http://yoyogames.com), ferra-

menta de desenvolvimento de jogos plata-forma Windows;

RPG Maker (http://tkool.jp/products/rpgxp/

eng/), ferramenta para desenvolvimento

RPGs;

Mugen (http://www.mgbr.net), ferramenta

para desenvolvimento de jogos de luta;

3D Game Studio (http://

www.3dgamestudio.com), ferramenta para

desenvolvimento de jogos 2D e 3D;

True Vision 3D (http://

www.truevision3d.com), ferramenta para

desenvolvimento de jogos 2D e 3D. 

8. Ferramentas para desenvolvimento para

Celular

Para desenvolver em JME, basta baixar o Eclip-

se IDE junto com o plugin EclipseME e o Java

Wireless Toolkit da Sun Com esses aplicativos

instalados, você irá possuir uma estação comple-

ta de desenvolvimento e emulação de aplicativos

e games em JME. A grande maioria dos disposi-

tivos móveis de hoje possuem suporte a JME.

http://www.eclipse.org/ 

http://www.eclipseme.org 

http://java.sun.com/products/sjwtoolkit/ 

Conclusão

Estamos na sétima geração de videogames, na

última geração temos: Sony Playstation 3, Mi-

crosoft Xbox 360 e Nintendo Wii em consoles,

e: Playstation Portable (PSP), Nintendo DS e

Celular para portáteis e com isso a indústria

internacional de jogos está crescendo muito a

cada dia, e desde 2003 ela já rende mais que a

indústria de filmes. A previsão para os próxi-

mos cinco anos é que a área cresça 20% ao ano.

Só no ano de 2007, foram movimentados 50

bilhões de dólares. O surgimento de novas tec-

nologias tem atuado como um grande catalisa-

dor para a convergência digital ao tornar o de-

senvolvimento de aplicações para sistemas em-

barcados tão fáceis e acessíveis ao público quan-

to no caso dos PCs. Por outro lado, a aberturadesse mercado, aliado ao sucesso vivenciado

pelo entretenimento digital na indústria de

PCs, é um forte sinal do sucesso esperado da

área de jogos para PCs, consoles e Celulares.

Referências

http://www.gamedev.com.br/http://pt.wikipedia.org/wiki/Brasil

Tecnologia para Desenvolvimento de Jogos Digitais

Tiago Tiguein Sinzato 

Aluno do Curso de Tecnologia em Análise e Desenvolvi-

mento de Sistemas Universidade Cruzeiro do Sul, Campus

Anália Franco São Paulo, SP.

Prof. Dr. Juliano Schimiguel

Professor do Curso de Tecnologia em Análise e Desenvolvi-

mento de Sistemas Universidade Cruzeiro do Sul, Campus

Anália Franco São Paulo.

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 28/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

28282828Ago / Set - 2009 | 

Introdução ao LINQ

Conheça melhor essa nova tecnologia de manipulação de dados.

Por: Milton C.Filho

Salve galera,

Iniciaremos hoje uma série de artigos so-  bre LINQ abordando seus princípios,mecanismos, utilização e dicas de boaspráticas.

No artigo de hoje falarei o que é o LINQe suas principais utilizações.

Vamos começar ?!

O que é LINQ? 

LINQ (Language Integrated Query) sãorecursos do framework 3.5 que propor-ciona para o desenvolvedor uma formaprática de realizar consultas, desde con-sultas em base de dados até consultasem arquivos XML, coleções de objetosetc. Sua sintaxe é bem parecida com a doSQL e traz a vantagem de poder traba-

lhar dentro do Visual Studio com a lin-guagem de sua escolha, tornando assimo entendimento e o aprendizado bemmais fácil.

O LINQ é apresentado de cinco princi-pais formas:

LINQ To SQL

Usado para manipular bases de dadosSQL Server, de forma bem prática e rápi-da converte as querys do LINQ em

querys SQL gerando assim todas as con-sultas e querys de manipulação (Insert,Update, Delete) . Também possibilita ma-pear toda a sua base de dados e transfor-mar as tabelas em classes. Desta formavocê poderá trabalhar na sua base de da-dos da mesma forma que trabalha comclasses do .Net Framework ou classespróprias.

-LINQ To XML 

Usado para manipular aquivos XML, po-dendo assim consultar, criar e inserir da-

dos em arquivos XML de uma maneiraprática.

-LINQ To Objects 

Usado para manipular coleções de obje-tos do .Net Framework ou coleções pró-prias, ou seja, você pode manipular qual-quer coleção de objetos desde que este

objeto herde da Interface INumera- ble<T>.

-LINQ To DataSet

Usado para manipular DataSets podendorealizar consultas nas tabelas do DataSet.

-LINQ To Entities.

Usado para manipular dados de outras  bases de dados podendo mapear toda asua base de dados em classes do .Net

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 29/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

29292929Ago / Set - 2009 | 

Framework e trabalhar com essas clas-ses fazendo consultas, inserções, exclu-sões, atualizações de uma forma bem

prática. 

Nos próximos artigos aprenderemosmais alguns conceitos e veremos a utili-zação do LINQ na prática. Espero quetenham gostado e até o próximo. 

Introdução ao LINQ

Milton C. Filho

Cursando o 6º semestre do curso de Sistemas de Informação

na faculdade Barretos, formado em técnico em informáticapelo Centro Paula Souza de Barretos, trabalha com desenvolvi-

mento de sistemas web com o foco tecnologias Microsoft. 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 30/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

30303030Ago / Set - 2009 | 

Explorando Microsoft Reporting

Services 2005.Conheça esta poderosa plataforma de relatórios.

Por: Caio Azevedo

Olá pessoal, iniciamos aqui uma série deartigos onde faremos uma abordagemprática e teórica, dessa poderosa e pou-

co explorada que é o Reporting Services.Nesse primeiro momento veremos aversão do SQL 2005, por ainda ser a fer-ramenta padrão de banco de dados namaioria dos nossos clientes, mas em bre-ve faremos uma explanação da versão2008, bom divertimento.

Parte 1 – Introdução ao repor-ting services 

O Microsoft SQL Reporting Services,RS, é uma plataforma de relatórios com-pleta. Parte integrante do framework deBusiness Intelligence baseada em servi-ços, ferramentas, APIs para desenvolvi-mento, publicação e gerenciamento dos

relatórios, o RS foi inicialmente apresen-tando como um add-on do SQL Server2000 no inicio de 2000. Atualmente, suaversão mais recente, é a do SQL 2008,mas aqui cobriremos aquela, parte inte-grante do SQL Server 2005, por ser a so-lução de banco de dados mais comu-mente utilizada.

Os relatórios do RS são baseados na lin-guagem RDL (Report Definition Lan-guage), que nada mais é que um dialeto

XML criado pela Microsoft. E, uma vezque o ambiente do RS esta intimamenteintegrada à plataforma .net framework,

suas ferramentas de desenvolvimentosão os Visual Studio 2005 e 2008, aindaque o próprio SQL Server 2005 tenha umshell do Visual Studio 2005 chamado Bu-siness Intelligence Development Studio(BIDS).

Com o RS é possível criar soluções derelatórios como parte de uma aplicação,

os chamados Local Mode , que são simila-res ao modelo utilizado no Cristal Re-ports ou Microsoft Access, além desse,temos o modelo de relatórios remoto queoperam como uma aplicação web hospe-dados em um Web Application Server(IIS) e acessíveis via protocolo HTTP. Fi-nalmente temos através da ferramentaReport Builder, uma forma de disponibi-

lizar para os usuários criar seus própriosrelatórios, atendendo assim ambientescorporativos, desenvolvedores, arquite-tos e usuários.

Para qualquer solução de relatórios quefaz uso do ambiente do RS faz-se usodos elementos apresentados na figuraabaixo, sendo que a interação entre esses

elementos varia conforme o modelo dorelatório, mas eles sempre estarão pre-sentes, do processo de criação ao consu-

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 31/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

31313131Ago / Set - 2009 | 

mo pelo usuário final. 

Na figura 1.1, temos o diagrama da re-lação entre os principais elementos deuma solução baseada em reporting ser-vices, relação que detalharemos a se-guir:

Relatório

Correspondem ao  front-end dos dadosdevidamente formatados e que corres-pondem a uma representação gráfica,

funcional e operacional de um arquivoRDL, com características especificasconforme seu tipo. Os relatórios podemser invocados por uma aplicação clien-te, seja ele uma aplicação Windows,Web, por qualquer tecnologia que con-suma WebService ou mesmo pelo am-

 biente do próprio report ing services.

Aplicação cliente

São as aplicações capazes de implemen-tar, gerenciar e visualizar os relatórios,sendo os principais, o Report Manager,o BIDS, Visual Studio,aplicações .netWindows e web por meio do controleReportViewer, além do aplicativo Offi-ce-Model Report Builder.

Estrutura de dados volátio

São as estruturas em memória que cria-mos para armazenar temporariamente oresultado das consultas que serão visuali-

zadas nos relatórios, essas consultas sãoimplementadas na forma de stored proce-dures , views  , instruções T-SQL além decubos OLAP.

Db access engine 

São os diversos mecanismos possíveispara acesso aos dados, corresponde àsfontes de dados: de acesso ao SQL Ser-ver, Oracle, OLE DB, ODBC bem comoAnalysis Server Databases – OLAP.

Repositórios de dados 

São as fontes de dados das quais se extraias informações para os relatórios criadose acessados via os DB Access Engines.

O RS suporta alguns dos mais úteis tiposde relatórios auxiliando os usuários namelhor distribuição das informações, sãoeles:

Tabular: utilizado para distribuição dasinformações como uma tabela, com umnumero de colunas previamente estabele-cidos, similar aos dados do excel;

Livre: as informações são posicionadasarbitrariamente como for melhor conve-niente para o usuário, por exemplo, rela-tórios do tipo, master-detail;

Chart: aos dados são apresentados grafi-camente;

Correlação: as informações do relatóriosão correlacionadas nos dois eixos carte-sianos formando uma matriz, por exem-

Explorando Microsoft Reporting Services 2005

Figura 1.1 – Correlação entre elementos doReporting Services 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 32/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

32323232Ago / Set - 2009 | 

plo, um relatório das condições de tem-peratura de um conjunto de cidades;

DrillDown:  relatórios que permitemseções expansíveis, tais como relatóriosde correlação, produtos x vendas, quepermitem exibir subcategorias dos pro-dutos;

Interativos:  são relatórios que permi-tem uso das funcionalidades especiais,tais como documentMap , links  , dentre

outras, por exemplo relatórios similarao modo de exibição de documentoPDFs com o Adobe Reader com marca-dores.

Não menos úteis são as funcionalidadesnativas dos relatórios, tais como para-

metrização das pesquisas para camposdatas, seleções múltiplas e texto livre;recurso de navegação entre páginas;zoom; pesquisa; exportação para diver-sos formatos (XML, CVS, TIFF, PDF,Excel); ordenação por colunas; formata-ção condicional, dentre outros. 

É isso ai pessoal, até aqui só co-meçamos nossa exploração aofantástico mundo do reportingservice, na próxima edição vere-mos o primeiro dos modelos derelatórios, os ditos “Local Mode”abraço e até lá e lembrem-se “maythe force be with you”.

Explorando Microsoft Reporting Services 2005

Figura 1.2 – relatório tabular 

Figura 1.3 – relatório de correlação 

Figura 1.4 – relatório drilldown 

Figura 1.5 – relatório interativo 

Figura 1.6 – funcionalidades 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 33/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

33333333Ago / Set - 2009 | 

Explorando Microsoft Reporting Services 2005

Caio Azevedo

Graduado em Ciência da Computação, Engenharia Civil e

louco por ciências exatas em especial física e matemática.

Coordenador da Célula Microsoft da Magna Sistema e Arqui-

teto Microsoft, palestrante, tecno-colunista, instrutor da

treinando .net e membro da comunidade codificando.net.

MCP, MCAD, MCSD, MCTS e MCPD. E fanático pela série star

wars – “may the force be with you.”

Blog: http://caioadotnet.blogspot.com/ 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 34/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

34343434Ago / Set - 2009 | 

Servidores no Contexto de Redes

Plataforma MicrosoftAprenda alguns conceitos de Rede.

Por: Danilo Marion Munhóz / Juliano Schimiguel

1. Introdução

Redes de computadores estão em todolugar, como por exemplo: em grandes,médias ou pequenas empresas, escolas,instituições e universidades entre outroslugares. Atualmente é muito importanteentender o que são redes, sua utilizaçãoe seu funcionamento podendo assim setornar um especialista em redes. O artigoaborda um tema muito importante den-tro do campo da informática, pois umarede de computadores hoje é o métodomais fácil e muito utilizado para aceleraro processo de transmissão e compartilha-mento da informação. O objetivo do arti-go é demonstrar que a utilização delapode ser positiva, que uma rede baseadaem servidor é mais vantajosa, e o quantoé a praticidade de uma Rede Microsoft, aprincípio utilizando o Software MS Win-

dows NT Server, e também os atuais SQLServer 2008 , Windows Server 2008 Stan-dard. 

Computadores conectados em rede po-dem trocar informações de maneira fácile rápida, pois a troca de informações en-tre eles se torna mais eficiente. As infor-mações são direcionadas de um compu-

tador para outro através da rede por in-termédio de um usuário. Este artigo trata

de mostrar como se faz e como funcionauma Rede Microsoft  , também mostrando

que as redes de computadores são umsistema sofisticado e complexo de ferra-mentas muito importantes.

2. Conceito de Redes LANs 

2.1 Rede Ponto-a-Ponto 

As redes LANs (Local Área Network) co-mo são chamadas as redes locais, caracte-

rizam-se como sendo redes que permi-tem a interconexão de equipamentos decomunicação de dados numa pequenaregião. Costuma-se considerar pequenaregião distâncias entre 100m e 25km. Osdois maiores tipos de LANs são: RedePonto-a-Ponto e Rede Baseada em Servidor.

Uma rede ponto-a-ponto normalmente é

definida pela falta de um servidor dedi-cado que determine um controle centralsobre a rede. Não existem servidores emuma rede ponto-a-ponto; usuários sim-plesmente compartilham recursos, comoimpressoras, espaço em disco.

Essas redes são organizadas como Gruposde Trabalho (Workgroups). Um Workgroup

possui um nível de controle de segurançamuito pequeno. Não existe um controle

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 35/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

35353535Ago / Set - 2009 | 

central para validar quais usuários podemou não utilizar a rede e seus recursos.Quando estamos logados neste tipo de re-

de, temos acesso a todos os recursos com-partilhados da rede que não exigem umasenha específica para controlar qual usuá-rio poderá ou não utilizar determinado re-curso.

Para controlar o acesso individual ao re-curso compartilhado, devemos especificaruma senha para cada recurso da rede, pois

como já vimos anteriormente, não existeum controle central sobre a rede. Isto podeser bastante inconveniente.

Redes ponto-a-ponto não são otimizadaspara compartilhar recursos. Geralmente,quando alguns usuários estão acessandoum recurso em determinado equipamentoda rede, o usuário daquele equipamentonota uma significante degradação da per-formance no equipamento. Este tipo de re-de também tem muita limitação no núme-ro de licenças para que poucos usuáriosconsigam acessar simultaneamente o mes-mo recurso. Elas têm algumas vantagens,especialmente para pequenas empresasque não querem fazer um grande investi-mento em hardware e software servidor.

Uma rede baseada em servidor normal-mente é definida pela presença de servido-res na rede que provêm segurança e admi-nistração centralizada para a rede. Os ser-vidores têm diversos papéis na rede. Redes

  baseadas em servidores possuem clientesque utilizam os serviços providos por es-tes, como armazenamento de arquivos eimpressão. Clientes são computadores me-

nos potentes que computadores servido-res.

2.2 Rede Baseada em Servidor

Uma rede baseada em servidor que utili-

za o software MS Windows NT Server,pode ser organizada em domínios, quesão vários computadores clientes conec-tados a um servidor que controla a segu-rança na rede. A segurança do domínio epermissão de logon são controlados porservidores especiais chamados de Con-troladores de Domínio (Domain Controlers).Existe um Controlador de Domínio Mestre(Master Domain Controler) Chamado dePDC (Primary Domain Controler) ou(Controlador de Domínio Primário) que po-de ser assistido pelos Controladores de Do-mínio Secundários  , chamados de BDC(Backup Domain Controlers) ou(Controladores de Domínio Backup). Os u-suários não podem acessar os recursosda rede enquanto não forem validadospelo PDC.

Redes baseadas em servidores possuemgrandes vantagens:

• Servidor dedicado otimizado;•   Armazenamento de arquivos centrali-

zado, permitindo Backup de dados Im- portantes;

• Fácil gerenciamento para um grande

número de usuários;• Exigência de senha para acesso aos re-

cursos compartilhados da rede.

Redes baseadas em servidores não pos-suem muitas desvantagens, entretantotambém é importante conhecê-las:

•  Alto investimento para o hardware de-

dicado (Servidor);•  Alto investimento para o sistema ope-

racional servidor e licenças para os cli-

Servidores no Contexto de Redes Plataforma Microsoft

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 36/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

36363636Ago / Set - 2009 | 

entes;• Requer um Administrador de Redes dedi-

cado.

As estações de trabalho são os computado-res clientes da rede e normalmente nãocompartilham recursos para a rede. Os cli-entes da rede rodam sistemas operacionaiscomo  MS-DOS ,   MS-Windows 95 ,  MS-Windows 98 , MS Windows NT Workstation eàs vezes podem ter o sistema operacionalMS-Windows NT Server. Em uma rede lo-

cal Microsoft, podemos ter clientes Macin-tosh e Novell, para utilizar ferramentas de:

• Desenvolvimento de Sistemas;• Consulta a Banco de Dados;• Apresentação e Análise de Informa-

ções.

Os servidores da rede são máquinas maispotentes que os clientes que compartilhamrecursos para a rede como: impressoras,discos entre outros. Em uma rede Micro-soft o servidor terá o sistema operacionalMS-Windows NT Server como PDC. Tam-

 bém podemos ter servidores Novell e Unixem uma rede Microsoft, sendo que paraconversar com Novell a Microsoft provê umprotocolo que possibilita a conexão comesses servidores. No servidor Unix é neces-

sário ter o software SAMBA instalado econfigurado corretamente para que máqui-nas com sistemas operacionais da Micro-soft possam acessá-lo. Abaixo temos as ca-racterísticas necessárias para que o SAM-BA funcione corretamente:

• Geralmente possui um sofisticado sistemaoperacional;

• Grande memória interna;•   Armazena grande quantidade de infor-

mações;

• Sistema de interrupção;• Sistema de I/O assíncrono;• Dispositivos para facilitar e controlar

comunicação;• Software para controle de comunica-

ção;• Software para controle de banco de da-

dos;•  Multiprogramação e esquema de prio-

ridade;• Compartilha recursos;• Define os tipos de interconexão, siste-

ma operacional, protocolos e até aplica-tivos a serem usados na rede;• SGBD (Sistema Gerenciador de Banco

de Dados;• Servidor de Arquivos e Impressão;• Servidor de Comunicação;• E-mail.

2.3 Protocolos

Os Protocolos são regras e procedimen-tos para comunicação. A utilização dasregras de comunicação aplica-se da mes-ma maneira no ambiente de computado-res. Quando diversos computadores es-tão interligados em rede, as regras e pro-cedimentos técnicos que administramsua comunicação e interação são chama-dos de protocolos.

Toda a operação técnica de transmissãode dados através da rede precisa ser di-vidida em etapas sistemáticas distintas.Em cada uma delas, ocorrem certas a-ções distintas que não podem ocorrer emnenhuma outra. Cada uma tem suas pró-prias regras e procedimentos, ou proto-colo. Elas devem ser utilizadas em uma

ordem consistente, que seja igual em to-dos os computadores da rede. No com-putador remetente, essas etapas devem

Servidores no Contexto de Redes Plataforma Microsoft

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 37/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

37373737Ago / Set - 2009 | 

ser realizadas de cima para baixo. Na má-quina receptora, devem ser realizadas de

 baixo para cima.

NetBEUI  é o padrão e significa NetBIOSExtended User Interface. A sigla NetBIOS sig-nifica Network Basic Input/Output System. Oprotocolo NetBEUI  implementa o protoco-lo de transporte NetBIOS Frame (NBF),que foi desenvolvido pela IBM para traba-lhar em grupos de trabalho utilizando OS/-2 e LAN Manager.

O protocolo NetBEUI  foi também desen-volvido para trabalhar em grupos de tra-

  balho com até 200 computadores. Nesteprotocolo não pode ser roteado entre re-des, isto é, está limitado a pequenas redeslocais. A versão 3.0 do NetBEUI é uma atu-alização da Microsoft do mesmo protocoloda IBM. Ele fornece ferramentas para queum programa estabeleça uma sessão comoutro programa através da rede. É muitopopular porque muitos programas aplica-tivos o suportam.

Além disso, o protocolo NetBEUI  é umprotocolo simples, rápido e eficiente que éfornecido com todos os produtos de rededa Microsoft. Está disponível desde mea-dos dos anos 80 e foi fornecido com o pri-

meiro produto de rede Microsoft, o  MS-NET . As vantagens desse protocolo inclu-em seu pequeno tamanho de pilhas(importante para computadores baseadosem MS-DOS), sua velocidade de transfe-rência de dados na mídia da rede, fácil im-plementação e sua compatibilidade comtodas as redes baseadas em Microsoft.

Em ambos os computadores envolvidos noprocesso de transmissão de dados, é neces-sário seguir cada etapa da mesma maneira,

assim os dados recebidos terão a mesmaaparência de quando enviados. Portanto,é necessário que os dois computadores

envolvidos utilizem o mesmo protocolo,pois protocolos diferentes realizarão eta-pas diferentes no processo de envio erecebimento dos dados.

2.4 MS Windows NT 

O Windows NT Workstation 4.0, tem amesma interface conhecida e funcionalapresentada pelo Microsoft Windows 95.Mas por trás dele está o robusto sistemaoperacional de 32 bits e multitarefa que aMicrosoft criou para usuários avança-dos. Essa versão fundamentou-se nosmesmos princípios de projeto das ver-sões anteriores e conserva seus avançosmais importantes. O Windows NTWorkstation continua sendo compatívelcom muitos outros sistemas operacio-

nais, sistemas de arquivos e redes. Eleroda em computadores com conjuntosde instruções complexas (Complex Ins-truction Set Code – CISC) e computado-res com conjuntos de instruções reduzi-das (Reduced Instruction Set Code –RISC). O Windows NT também suportaa computação de alto desempenho, for-necendo suporte de kernel ao multipro-

cessamento simétrico.

Windows NT é um sistema operacional32-bits multitarefa, que faz parte da fa-mília de sistemas operacionais Micro-soft. E Está disponível em duas versões:

• Windows NT Workstation , Desenvol-vido para trabalhar como membro

de uma rede organizada em Grupode Trabalho (Workgroup), comoum cliente de um domínio Win-

Servidores no Contexto de Redes Plataforma Microsoft

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 38/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

38383838Ago / Set - 2009 | 

dows NT Server, como cliente de u-ma rede Novell NetWare, ou comouma estação de trabalho stand-alone.

É recomendado para usuários queprecisam de um sistema operacionalcom um alto nível de segurança;

• Windows NT Server , Muito idêntico aoWindows NT Workstation, mas comalguns recursos que habilitam o Win-dows NT Server a trabalhar como umsistema operacional de rede (NOS –Network Operating System).

Windows NT é um sistema operacionalseguro para microcomputadores de 32-bitscom uma interface gráfica. Não é uma revi-são de outra versão do Windows comoWindows 3.x ou Windows for Workgroup3.x, mas um novo sistema operacional. Ainterface gráfica do Windows NT 4.0 utili-za a mesma interface gráfica do Windows95.

Diferentemente de muitos sistemas opera-cionais, Windows NT pode rodar em umavariedade de plataformas. Windows NTfoi desenvolvido para rodar em platafor-mas Intel 80386 DX, 80486 e computadores

 baseados em processadores Pentium, bemcomo em computadores RISC (ReducedInstruction Set Computers). Windows NT

suporta os seguintes processadores:

• IBM PowerPC;•  MIPS R4x00;• DEC Alpha AXP;• Intel 386 e superiores.

O Windows NT pode rodar diferentes ti-pos de aplicações simultaneamente. En-

quanto o usuário está trabalhando em umaaplicação, outra aplicação pode estar ro-dando em segundo plano. Um sistema o-

peracional multitarefa oferece os meiospara um computador processar mais deuma tarefa de cada vez. Um verdadeiro

sistema operacional multitarefa pode e-xecutar tantas tarefas quantos forem osprocessadores. Quando houver mais ta-refas do que processadores, o computa-dor precisará alocar os intervalos detempo de modo que os processadoresdisponíveis dediquem uma determinadaparcela de tempo para cada tarefa, alter-nando entre as tarefas até que tudo este-

  ja terminado. Este sistema faz com ocomputador pareça estar trabalhandoem diversas tarefas ao mesmo tempo.

O Windows NT 4.0 suporta três tipos desistemas de arquivos:

• File Allocation Table (FAT): Sistemade Arquivos utilizado com o MS-DOS;

• New Technology File System (NTFS):Sistema de Arquivos implementa-do pelo Windows NT;

• Virtual File Allocation Table (VFAT):Sistema de Arquivos implementa-do pelo Windows 95.

O Windows NT pode rodar os seguintestipos de aplicações:

• DOS 16-bits;• Windows 3.x 16-bits (Win16);• POSIX (Implementação UNIX);• OS/2 1.x;• New 32-bits (Win32).

O Windows NT suporta os seguintesprotocolos de rede:

• TCP/IP;• DLC;

Servidores no Contexto de Redes Plataforma Microsoft

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 39/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

39393939Ago / Set - 2009 | 

• NetBEUI;•  AppleTalk;• NWLink (Microsoft’s 32-bits Windows

NT IPX/SPX).

Entre algumas características do WindowsNT Server, podemos citar:

• Windows NT Server permite estabelecersessões ilimitadas com clientes, enquantoo Windows NT Workstation permite so-mente 10;

Windows NT Server suporta até quatro processadores, enquanto o Windows NT Workstation pode suportar somente dois;

• Windows NT Server pode suportar 256sessões simultâneas através do RAS, en-quanto que o Windows NT Workstation

 permite apenas uma;• Windows NT Server pode importar e ex-

 portar replicações de diretórios, enquantoo Windows NT Workstation pode somen-te importar.

O Windows NT Server oferece serviços pa-ra Macintosh, validação de logon e tolerân-cia a falhas de disco, enquanto o WindowsNT Workstation não oferece nada disso. Ogerenciamento de rede inclui monitoraçãodo comportamento da rede como parte deuma abordagem específica à resolução de

problemas. Se o planejamento, a monitora-ção e o gerenciamento forem efetuados demodo adequado, a necessidade de resolu-ção será mínima. Ao planejar uma rede, oadministrador deve implementar planos eprocedimentos para evitar problemas an-tes que apareçam. Estes planos incluem

 backups, padronização, atualizações regu-lares e documentação.

Existem utilitários disponíveis para ajudaro administrador da rede nessas tarefas. O

Windows NT tem programas internosde monitoração e gerenciamento de re-de, que oferecem estatísticas de utiliza-

ção e desempenho, além de registros deevento.

Como parte do gerenciamento da rede, éimportante estabelecer uma linha de ba-se do comportamento típico da rede. Issoé feito ao longo do tempo e deve ser bemdocumentado. Se realmente surgiremproblemas, a linha de base é o primeiro

recurso a que o administrador pode re-correr para comparação com padrões deutilização diária, gargalos em potencial,contagens de erro e estatísticas gerais dedesempenho. Os Softwares de Redes Mi-crosoft de Servidores disponíveis nomercado atualmente são os: SQL Server2008 e o Windows Server 2008 Standard.?

2.5 SQL Server 2008 

O SQL Server 2008 baseia-se na visão daPlataforma de Dados da Microsoft, o queajuda as organizações no gerenciamentodos dados, em qualquer local e a qual-quer momento. Ele permite que você ar-mazene seus dados a partir de documen-tos estruturados, semi-estruturados oumesmo não estruturados, como imagens

e músicas, diretamente dentro do bancode dados. O SQL Server 2008 fornece umvasto conjunto de serviços integradosque permitem que você faça muito maiscom seus dados como consulta, pesqui-sa, sincronização, relatórios e análises.Os dados podem ser armazenados emgrandes servidores de um data center eacessados a partir deles para desktops e

dispositivos móveis, fornecendo controlesobre os dados, não importando o localem que estão armazenados.

Servidores no Contexto de Redes Plataforma Microsoft

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 40/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

40404040Ago / Set - 2009 | 

O SQL Server 2008 permite que você utilizeseus dados em aplicativos personalizadosdesenvolvidos no Microsoft .NET e Visual

Studio, na arquitetura SOA (service-oriented architecture - arquitetura orienta-da a serviços) e em processos de negóciospor meio do Microsoft BizTalk Server, en-quanto os profissionais da informação po-dem acessar os dados diretamente nas fer-ramentas que utilizam no dia-a-dia, como oMicrosoft Office System 2007. O SQL Ser-ver 2008 fornece uma plataforma de dados

confiável, produtiva e inteligente para to-das as suas necessidades relacionadas aosdados.

2.6 Windows Server 2008 Stan-dard

O Windows Server 2008 é o mais sólido sis-tema operacional da família Windows Ser-ver já lançado. Com os recursos internos

aprimorados para Web e virtualização, oWindows Server 2008 foi projetado paraaumentar a confiabilidade e flexibilidadeda infra-estrutura de seus servidores, aju-dar a reduzir custos e ganhar tempo. Pode-rosas ferramentas proporcionam maiorcontrole sobre os servidores, bem como ta-refas de gerenciamento e configuração sim-plificadas. Somado a isso, os recursos de

segurança aprimorados agem na proteçãodo sistema operacional para assegurar arede e os dados, proporcionando uma basesólida e altamente confiável.

2.7 Softwares Servidores Micro-soft 

Os Softwares Servidores Microsoft estão

classificados em: 

• Precursores: MS-DOS; OS/2. 

• Família DOS: 1.0; 2.0; 3.0; 95; 98; ME. 

• Família NT Servidores: 3.1; 3.5;

3.51; 4.0; 200; Server 2003; Server2008. • Outros: Fundamentals for Legacy

PCs; Home Server. • Futuros: 7 (Seven); Azure. Cancelados: Neptune, Nashville, Cairo. 

Existem muitos recursos de suporte derede que o administrador pode acessar

para ajudar a resolução de problemas,como por exemplo,   Microsoft TechNet eBBS.

Conclusão 

Redes foram criadas pelo propósito depoder compartilhar informações, e paraque essa informação chegue mais rápidopara o seu destino final, e também para

interligar cada computador e de cadaponto diferente de uma sala até de umcontinente. No caso de servidores é im-portante ressalvar que dentro de umaempresa, por exemplo, a informação narede é processada com uma maior efici-ência e rapidez. Uma rede que funcionepor si só ainda não foi inventada. É pre-ciso incluir novos usuários. É preciso ex-

cluir usuários existentes. É preciso insta-lar e compartilhar novos recursos, alémde dar as devidas permissões de acesso.Permissões de acesso são normas associ-adas ao recurso, geralmente um diretó-rio de arquivos ou uma impressora. Aspermissões regulamentam o acesso dosusuários ao recurso. Tudo isso significaque, depois que uma rede estiver instala-

da, será indispensável, a necessidade degerenciá-la.

Servidores no Contexto de Redes Plataforma Microsoft

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 41/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g a

z i   n e

e-magazine

41414141Ago / Set - 2009 | 

Referências 

Giungi, D.; Liesenberg, H.K.E.; Pires, F.; Al-meida, R.Q. de; Ussami, M.C. (1998). Soluções Microsoft para Redes Locais, UNICAMP – U-niversidade Estadual de Campinas [on-line].Disponível em: http://www.apostilando.com/download.php?cod=394&categoria=Redes. Úl-timo acesso: 14.06.2009. 

 Microsoft, Servidores, Windows Server. Resu-mos das Edições do Microsoft Windows Server2008 [on-line]. Disponível em: http://www.microsoft.com/brasil/servidores/sql/overview.mspx. Último acesso: 14.06.2009

  Microsoft, Servidores, SQL Server. MicrosoftSQL Server, Visão Geral [on-line]. Disponívelem: http://www.microsoft.com/brasil/servidores/windowsserver2008/editions/overview.mspx. Último acesso: 14.06.2009

  Microsoft, TechNet. TechCenter do WindowsServer. Recursos do Windows Server 2008 [on-line]. Disponível em: http://technet.microsoft.com/pt-br/windowsserver/default.aspx. Último acesso: 14.06.2009

Wikipédia, Windows Server 2008. Cronologiados Softwares Servidores Microsoft [on-line].

Disponível em: http://pt.wikipedia.org/wiki/Windows_Server_2008. Último acesso:14.06.2009

Danilo Marion Munhóz 

Aluno de Tecnologia em Análise e Desenvolvimento de Siste-

mas FATEPA – Faculdade de Tecnologia Unianchieta – Centro

Universitário Anchieta.

Prof. Dr. Juliano Schimiguel 

Professor do Curso de Tecnologia em Análise e Desenvolvi-

mento de Sistemas  Universidade Cruzeiro do Sul, Campus

Anália Franco São Paulo.

Servidores no Contexto de Redes Plataforma Microsoft

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 42/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  42424242

Report Sharp Shooter 

Como escolher o gerador de Relatórios ?

Para usar software de terceiros em nossosprojetos temos a mesma sensação de tirarfotos das Cataratas do Iguaçu. À primeiravista, as Cataratas tiram a nossa respiraçãoe é super promissor, mas você também nãoconsegue ver as pedras escondidas e temque estar equipado para emergências!

O mesmo acontece com software. Você nãoconsegue ver o futuro e se preparar paraele! Mesmo quando parece que você en-controu a ferramenta certa, você nunca sa-

 berá o que o seu cliente irá querer de vocêamanhã, e que tarefas você terá que pro-gramar no futuro.

Então, agora a história… Alguns meses a-trás, eu me deparei com a necessidade dedesenvolver uma solução de ERP de gran-de escala para a minha empresa com mui-tas características específicas. Eu não quero

cansá-los com toda a especificação da mi-nha aplicação, eu apenas gostaria de dizerque requeria a geração de centenas de rela-tórios diferentes e era impossível de prevertodas as particularidades que os relatóriosque meus clientes poderiam necessitar aolongo do tempo.

O desafio maior era como encontrar uma

ferramenta de relatórios para meus aplica-tivos! Eu me perguntei: “Que critério eudevo usar para escolher a ferramenta certa

e que não vá me fazer cair dos 80 metrosdas Cataratas do Iguaçu na água fervidado suporte diário e debugging quandomeus clientes quisessem realizar uma ououtra tarefa?”

Quando você começar a desenvolver al-gum sistema de relatórios, é impossívelpredizer de uma vez quais tipos de rela-tórios serão necessários para o seu clien-te pela sua aplicação. E eu nunca encon-trei clientes que pudessem formular seus

requerimentos suficientemente. Você en-controu?

Um sistema de relatórios é usualmenteestendido por novos relatórios atravésdo tempo e você precisa cuidar e darmanutenção constantemente. Todo de-senvolvedor já se deparou com a situa-ção de quando o cliente fala: “Está bom,

muito bom... mas eu quero que este textofique aqui e não ali, eu quero que estacoluna mostre outra informação...” E daípor diante. Se a sua ferramenta de rela-tórios não puder resolver, estas questõesvocê vai se sentir caindo das muito fala-das Cataratas do Iguaçú...

O que fazer? Escrever sua própria ferra-

menta de relatórios? Com o cronogramadisponível, inaceitável! A pior situaçãoainda é quando você enfrenta estes pro-

Por: Ricardo Quartier

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 43/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  43434343

tórios é muito conveniente; isto permitea você qualquer novo dado que for cal-culado com base na fonte dos dados. Pa-

ra fazer isso, você precisa apenas fazermudanças no modelo de relatório.

Habilidade de dinamicamenteconfigurar parâmetros em ummodelo de relatórios dependen-do da fonte de dados.

Habilidade para dinamicamente confi-gurar parâmetros na base da fonte de

dados permite flexibilidade na apresen-tação dos dados dependendo dos valo-res da fonte dos dados. Um modelo setorna versátil e isto o permite minimizaro número dos modelos de relatórios aserem desenvolvidos. Isto é especial-mente vital quando o desenvolvimentofuturo pode ser requerido.

Habilidade de se extrair qual-quer dado com qualquer confi-guração em qualquer parte dodocumento final.

Habilidade de se extrair qualquer dadoem qualquer lugar do relatório já rende-rizado permite a você gerar o relatóriomanualmente, inteiro ou em parte, casoa funcionalidade provida não permitirresolver uma ou outra questão. É claro,que você deve fugir de criar relatóriosmanualmente, mas isto reserva uma fle-xibilidade que deixará você confidentepara apresentar os dados de qualquerforma que você possa precisar.

Então, uma vez que é impossível a ferra-menta de relatórios ideal, você precisa

de um produto que, de um lado, provejamuitas características avançadas, mas de

 blemas quando sua aplicação está quasepronta!

Após dias procurando, testando, pen-sando e brigando, eu encontrei algumcritério em como encontrar a solução derelatórios correta e me precaver dos mai-ores riscos potenciais quando uma ferra-menta de relatórios não prover a necessi-dade que eu precisar depois:

Bom designe de modelos de re-latórios.

É uma grande sorte quando uma ferra-menta de relatórios tem um design quepermite criar a maioria das ferramentasdo dia a dia e rapidamente e intuitiva-mente relatórios com tarefas específicas.Mesmo se a funcionalidade da ferramen-ta de relatórios possa ser estendida, odesign deve prover a funcionalidade pa-

ra dar certeza a resolver todas as suastarefas principais. Na outra mão, nenhu-ma ferramenta de relatórios provê toda afuncionalidade que você precisa. Sendoassim, o próximo critério principal é:

Arquitetura aberta a plug-ins.

Arquitetura Open plug-in é vital! Se

você encontrar alguma tarefa que é im-possível de resolver com as característi-cas fornecidas, pelo menos, você poderáprogramar a funcionalidade requeridavocê mesmo.

Habilidade de manipular a fontede dados no modelo de relató-rio.

Habilidade de manipular a fonte de da-dos diretamente em um modelo de rela-

Report Sharp Shooter 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 44/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  44444444

ência com você agora.

Primeiro de tudo, o que eu gostei mais

no Report Sharp-Shooter é que ele tem aarquitetura open plug-in.

Um documento e seus próprios elemen-tos definem a lógica não apenas da saídae comportamento no design, mas o maisimportante, eles definem a lógica da ge-ração do documento. Isto significa quevocê pode facilmente estender a funcio-

nalidade da ferramenta redefinindo alógica dos elementos providos ou cria-dos por você mesmo.

Por exemplo, o produto tem um elemen-to para saída do list footer. Na maioriados relatórios, é requerida a saída do fo-oter não à direita após a list, mas na par-te de baixo da página onde a lista acaba.

Eu resolvi este assunto de forma muitosimples: Eu criei um novo elemento re-definindo a lógica do já existente. Aqui,eu adicionei uma nova propriedade,GrowToBottom que decide quando alist footer deve ser colocada na parte de

 baixo da página.

Nós redefinimos a lógica da geração des-

te elemento no método Render onde nóslimitamos o espaço livre na página gera-da para deslocar os elementos que foramgerados pela classe base na parte inferiorda página:

Public Class AdvancedFooter Inhe-rits Perpetuum-Soft.Reporting.DOM.Footer Private _growToBottom As Boolean= False

<System.ComponentModel.Category("Behavior")> _

outro lado, que permita maior extensãoquando e caso você necessite. Sem falaro quanto é muito melhor quando você

pode programar alguma nova funciona-lidade você mesmo, na base de uma fer-ramenta de relatórios do que ter que mu-dar para um novo componente em plenacorrida!

As ferramentas de relatórios que tem u-ma Arquitetura de plug-in e suporte pa-ra scripting são flexíveis o suficiente pa-

ra resolver as tarefas mais complexas.Arquitetura Open plug-in permite a pro-gramar a funcionalidade requerida e usodas novas características em um desen-volvimento futuro.

Usando scripting, você pode definir con-figurações do modelo dinamicamente, cuidar da fonte de dados e até gerenciaro processo programaticamente, por e-xemplo, gerar partes separadas de umdocumento manualmente.

Após dias de procura e testes em muitasferramentas disponíveis no mercado desoftware de diferentes vendedores mun-diais, eu encontrei um produto que fun-ciona com quase todas as minhas expec-tativas e requerimentos, Report Sharp-

Shooter é a ferramenta ideal para relató-rios, ela realmente me surpreendeu coma flexibilidade que é provida. Eu termi-nei minha solução de ERP há cinco me-ses, ela funciona muito bem e os meusclientes estão bem satisfeitos. Como euprevi a diversidade de relatórios que eutive que desenvolver funcionou comouma bola de neve, mas eu tenho que ad-

mitir que consegui cuidar de tudo e ficocontente de compartilhar minha experi-

Report Sharp Shooter 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 45/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  45454545

que eu não preciso mais.

Perpetuum-Soft.Reporting.DOM.ReportControl.

ControlTypes.Remove(GetType(Perpetuum-Soft.Reporting.DOM.Footer))Perpetuum-Soft.Reporting.DOM.ReportControl.ControlTypes.Add(GetType(CustomControl.AdvancedFooter))

O que me fez fã deste produto é o scrip-ting que esta ferramenta de relatóriosoferece de suporte.

Você pode usar qualquer linguagem deprogramação .NET (VB.NET ou C#) co-mo uma linguagem de script. Ela permi-te realizar muitas tarefas economizandoassim muito tempo, uma vez que a mai-oria das outras ferramentas de relatóriostem uma linguagem de scripting que de-ve ser aprendida do início.

Os scripts do Report Sharp-Shooter pro-vêm acesso completo a todos os elemen-tos dos relatórios e você pode manipulá-los programaticamente. Um modelo derelatório e um relatório mesmo represen-tam o open object model.

Scripts permitem buscar a Informação

sobre o relatório corrente e influenciá-lo.Você pode usar quaisquer característicasda sua aplicação ou bibliotecas de tercei-ros com os scripts!

Existe a habilidade de atribuir a expres-são a cada propriedade e o valor de cadapropriedade será calculado dinamica-mente.

Quando qualquer relatório for gerado,um script especial será executado e lá

<System.ComponentModel.DefaultValue(False)> _

<PerpetuumSoft.Framework.Serialization.XSerializable()> _

<PerpetuumSoft.Reporting.DOM.ReportBindable()> _Public Property GrowToBottom() As BooleanGet

Return _growToBottomEnd GetSet(ByVal value As Boolean) _growToBottom = value

End SetEnd Property

Public Overrides Sub Render()If Me.GrowToBottom Then

MyBase.Prepare()If (MyBase.Engine.FreeHeight

> MyBase.Size.Height) ThenEngine.UsedHeight =

(Engine.UsedHeight +(MyBase.Engine.FreeHeight - My-Base.Size.Height))

End IfEnd IfMyBase.Render()

End Sub End Class 

Como você pode ver, é muito fácil. Eutambém gostaria de chamar a sua aten-ção para o comportamento do controleno design que pode ser definido por atri-

  butos padrões tendo o mesmo destinocomo do Visual Studio, assim como osespeciais.

Por exemplo, o atributo ReportBindablenotifica que é possível fazer uma cone-xão com esta propriedade. Isto significaque a nova propriedade“GrowToBottom” pode ser atribuída nãosomente como uma constante mas comoum valor calculado.

Um novo controle pode ser facilmenteregistrado no designer e preliminarmen-te, eu removo o velho controle, uma vez

Report Sharp Shooter 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 46/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  46464646

or que $ 20.00.iif(GetData("Products.UnitPrice") > 20,"Hightlight", "Normal")

E aqui está!

Mais um exemplo. Eu quero numerar as

páginas com algum grupo de dados.É claro, tem uma variável para numera-ção contínua, mas para este caso em par-ticular, nós podemos tirar vantagem dosscripts.

Para se fazer isso, eu defino uma variá-vel comum contendo uma nova página:

private GroupPageCount as integerInicio a variável antes da gera-ção: GroupPageCount = 0;

você poderá fazer todas as configuraçõesrequeridas.

Sendo assim os scripts no Report Sharp-Shooter trazem a possibilidade de nãosomente o ajuste das características pro-vidas, mas desenvolver novas também!Agora, eu gostaria de mostrar alguns e-xemplos para você. Eu usei a linguagemVB. NET aqui.

Eu vou demonstrar como programar u-

ma funcionalidade com relativa facilida-de, mas do outro lado, isto poderia serpraticamente impossível de se fazer semscripting. Para ser mais fácil de enten-der, eu tenho uma data usando a funçãoGetData (“SourceName.FiledName”)onde o SourceName é o nome da fonte eo FieldName é o nome do campo fonte.

Então, por exemplo, eu quero ajustar a apa-rência dos dados dependendo dos seus valo-res.

Para se fazer isso nós precisamos dina-micamente definir o estilo para um ele-mento que exibe um valor.

Então, nós definimos a seguinte expressão paraa propriedade Style de um elemento de relató-

rio:

iif(<Condition >, "Hightlight", "Normal")<Condition > - é algum critério na baseda fonte dos dados.

"Hightlight" e "Normal" aqui são nomesde estilos vindos de uma tabela de esti-los que eu defini antes.

Então, por exemplo, eu quero destacartodos os produtos onde o preço for mai-

Report Sharp Shooter 

Figura 1. Design do Report Sharp Shooter 

Figura 2. Exemplo pronto selecionando pela cor ! 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 47/48

www.codificando.net 

 C o d  i   f   i   c a n d  o . n e t   e- m a g az i   n e

e-magazine

Ago / Set - 2009 |  47474747

(Informações do Report Sharp Shooterpara Silverlight)

http://www.perpetuumsoft.com/sf/en/fls/suite/SuiteUserGuide/index.htm(documentação do Report Sharp Shootere outras ferramentas)

Reset da variável no groupfooter: GroupPageCount = 0;Aumento o contador na hora decriar a página: GroupPageCount+= 1

Uso a seguinte expressão para mostrar onúmero da página: “Página ” & Page-Count.

Conclusão

Espero que você se divirta codificando!Eu espero também que você nunca sesinta como se estivesse caindo das Cata-ratas do Iguaçu!

Com um pouco mais de trabalho nossosrelatórios podem ficar mais elaborados,o importante é usar uma boa ferramentapara ajudar, coloquei alguns exemplosem Silverlight. Sim SILVERLIGHT, ele éo único que faz relatórios em Silverlightno mundo todo e é claro já está traduzi-

do para o nosso português, aliás, comotodos os produtos da Perpetuum Soft-ware. Um forte abraço a todos!

Links:

www.perpetuumsoftware.com.br(Perpetuum Software – Desenvolvedorado Report Sharp Shooter)

http://www.perpetuumsoft.com/Demo/slviewer/default.aspx (demo da ediçãocom Silverlight)

http://www.perpetuumsoft.com/Product.aspx?lang=pt&pid=46(Informações do Report Sharp Shooter)

http://www.perpetuumsoft.com/Product.aspx?lang=pt&pid=104

Report Sharp Shooter 

Ricardo Quartier

Fez trabalhos em sistemas de cias aéreas e trabalhou

com ERPs de audio-visual e hoje desenvolve sistemas na

Dream & Magic Works. Trabalha com desenvolvimento

de software em Visual Basic.Net, C#, Mono, é fã do Sil-verlight e hoje em dia é o CEO da Perpetuum Software

da América Latina. 

8/3/2019 codificando 11

http://slidepdf.com/reader/full/codificando-11 48/48

A alguns anos atrás tomei uma decisão...contribuir com comunidades de desenvolvi-mento... Porque cheguei a essa conclusão?Não tenho idéia, achava sensacional pessoascontribuindo e ao mesmo tempo criando umposicionamento/relacionamento muito

 bom entre as pessoas... não necessariamenterelacionamento para arrumar emprego, mes-mo porque na nossa área, dificilmente al-guém fica desempregado.

Contribuir para comunidade é uma misturade ação social, hobby, marketing pessoal,motivação para estudo, experiência, amiza-de, etc etc etc.

O Codificando .Net a alguns anos foca emdesenvolvimento Microsoft e por muitotempo atuamos com revista, site, blog, even-

tos, pod cast, etc. Porém, se notarem, prati-camente sempre são os mesmos colaborado-res? Por quê? 

Panela? Grupinho? Máfia? Cartel? 

Nada disso! Nós praticamente imploramospara conseguir conteúdo, público, colabora-dores, etc. e o retorno é muito baixo... qualserá a razão disso?!?!

que isso pode ser a maior ferramenta para de-senvolvimento pessoal?

A revista sempre está aberta para contribui-ções e sempre a equipe editorial sofre muitopara conseguir o conteúdo e quase sempre osmesmos?

Se você não colabora ou nunca colaborou, tedesafio a fazer isso... Ao menos uma vez! E ve-

  ja, se não obter nenhum benefício/prazer/resultado/retorno nunca mais contribua... Acerteza é grande que você não vai arrepender-se!

Claro, que o desafio não serve somente para oCodificando, contribua em qualquer lugar, se-

 ja site pessoal, You Tube, o que for!!! 100% doscasos que conheço de pessoas que se arrisca-ram, hoje estão cada vez mais fortes contribu-

indo!

Lembre-se, isso não é um trabalho de graçapara a Microsoft ou para o Codificando e simum investimento totalmente pessoal!

Se você for de São Paulo, participe do nossoHappy Hour, visite o sitewww codificando net e veja a data no quadro

   e  -   m   a   g   a   z   i   n   e

Comunidade, comunidade e

comunidade.Por: Alexandre Tarifa