32
outubro 2008

outubro 2008 - The Club · sionou com a ousadia da Microsoft em mudar completamente o padrão de menus das apli- ... instalação de pacotes através de arquivos .bpl. Na seção

  • Upload
    hacong

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

outubro 2008

outubro 2008

outubro 2008 03

LegendaIniciante

Intermediário

Avançado

Índice

Editorial

04 05

Coluna do Leitor

Olá amigos do The Club! Quem não se assustou e ao mesmo tempo não se impres-sionou com a ousadia da Microsoft em mudar completamente o padrão de menus das apli-cações de sua nova versão do Office? ...

Ribbon Controls

Delphi

Instalação de Componentes (VCL) no DELPHI

.NET

Criando Consultas Pa-rametrizadas com FIREBIRD

LINQ - Language Integra-ted Query

20

Dicas Delphi

Dicas.NET

Boa prática de AJAX - Dis-parando eventos com trigger (Update Pannel) 29

Firebird – Retornar Interva-los entre horas em um período.

ADO – Tratar erros

BDE – Retorna lista de usuá-rios logados no BDE

BITMAP – Como jogar uma imagem de um campo para uma variável

BOTÃO – Rotina para contro-le de botões de edição

CLIPBOARD – Como limpar

RAVE REPORT – Alterar numeração da página corrente 27

08NFe - Conceitos gerais

de Nota Fiscai Eletronica

Na revista deste mês nós do The Club temos o prazer de trazer até você leitor, mais uma novidade, “O Desafio The Club”, esta nova seção tem por objetivo trazer um jogo, que teste seus conhecimen-tos técnicos. 10

16

Desafio The CLub

30

Esta nova seção tem por ob-jetivo trazer um jogo, que teste seus conhecimentos técnicos, e estimule-o a pesquisar e co-nhecer mais sobre a tecnologia que nós usamos no dia-a-dia, sem deixar também de entreter.

outubro 200804

Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP 18.707-150

Informações: (14) 3732-1529 Suporte: (14) 3733-1588

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected] Informações: [email protected] Cadastro: theclub_cadastro

Skype Suporte: theclub_linha1 theclub_linha2

Copyright The Club Megazine 2008

Diretor TécnicoMarcos César Silva

Diagramação e ArteVitor M. Rodrigues

RevisãoMarcos César Silva

ColunistasAlessandro Ferreira

Antonio Spitaleri NetoFabiano BelmonteFellipe Capolupo

Gildicley Alves PereiraLuís Alexandre de OliveiraMarco Antonio Armando

Marcos César SilvaVictory Fernandes

Impressão e acabamento:GRILL - Gráfica e EditoraRua São Paulo, nº 447

Cep: 18740-00 - Taquarituba-SPTel. (14) 3762-1345

ReproduçãoA utilização, reprodução, apropriação, armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada publicação da revista “The Club Megazine” são terminantemente proibidos sem autorização escrita dos titulares dos direitos autorais.

Bem-vindo

Delphi é marca registrada da Borland International, as demais marcas citadas são registradas

pelos seus respectivos proprietários.

Marcos César Silva - Editor [email protected]

Na revista deste mês nós do The Club temos o prazer de trazer até você leitor mais uma novidade, “O Desafio The Club”, esta nova seção tem por objetivo trazer um jogo, que teste seus conhecimentos técnicos, estimule-o a pesquisar e conhecer mais sobre a tecnologia que nos usamos no dia-a-dia, sem deixar também de entreter.

Além desta novidade, abrimos também espaço este mês para uma coluna de artigos enviados por nossos sócios, onde o sócio Gildicley Alves Pereira em seu primeiro artigo fala do novo controle inserido no Delphi 2009, o Ribbon Controls.

Neste mês, Victory Fernandes e Fellipe Capolupo vêm com o tão aguardado artigo sobre Conceitos de Nota Fiscal Eletrônica, sendo este o tema mais comentado do momento, onde abordam a sua criação, validação e envio. Outro assunto, embora simples, mas de grande importância é a instalação de componentes, sempre questionado no setor de suporte, onde Marco Armando, consultor do The Club, mos-tra como instalar componentes a partir de apenas do seu .pas até a instalação de pacotes através de arquivos .bpl.

Na seção .net Fabiano Belmont mostra o poderoso recurso de con-sulta a dados, o QLinq, onde a partir dele é possível executar queries em dados armazenados na memória ou em um repositório de dados externo, como um SGBD ou arquivo XML.

E Luiz Alexandre, nos mostra como fazer uma simples aplicação Web usando o banco de dados Firebird com Asp.net através do Data provider para firebird.

Bom, é isto ai pessoal, espero que gostem, e caso queiram nos enviar seus artigos como ao exemplo do sócio Gildicley fiquem a vontade.

Um grande abraço e bom aproveito desta revista.

outubro 2008 05

Coluna do Leitor

Olá amigos do The Club! Quem não se assustou e ao mesmo tempo não se im-pressionou com a ousadia da Microsoft em mudar completamente o padrão de menus das aplicações de sua nova versão do Office? No princípio tudo muito lindo, mas ao mesmo tempo a mudança gerou certos transtornos ao tentarmos fazer operações básicas como cortar uma figura. Com um pouquinho de atenção, observamos como o menu é total-mente intuitivo e facilita o acesso às funções e esse novo padrão de menus deve se tornar tendência nas novas aplicações for Windows, principalmente porque o Delphi 2009 traz o Ribbon Control, componente responsável por esse novo menu da Microsoft. Caso você ainda não tenha o Delphi 2009, você pode baixar uma versão Trial no endereço http://cc.codegear.com/Free.aspx?id=26043.

Acredito que o Windows apesar de muito criticado, sempre visou ser intuitivo e é importante valorizarmos essa característica em nossas aplicações.

E vamos abordar aqui de maneira bem simples como criar um menu super charmoso que vai dar um novo visual para a sua aplicação.

Primeiro, inicie um novo projeto no Delphi 2009 clicando em File / New / VCL Forms Appli-cation – Delphi. Salve o projeto com o nome que

desejar. Vá na paleta de componentes e localize Ribbon Controls. É o último da lista. Se quiser chegar mais rápido, digite no campo Search lo-calizado no início da paleta o nome Ribbon que o componente aparecerá logo abaixo. Essa consulta de componentes no Delphi 2009 é maravilhosa! Depois do nosso velho e bom Delphi 7, só agora o Delphi facilita de vez o acesso aos componentes

Ribbon Controlsum novo visual para a sua aplicação.

outubro 200806

que não são poucos, graças a Deus! Coloque um componente Ribbon no formulá-

rio. Deixe o seu nome como Ribbon1 mesmo. Altere a propriedade Caption do Ribbon1 para “The Club Megazine Control”. Primeiro grande impacto é que o novo menu assume a barra de títulos da aplicação e caso quando maximizado, a janela perde as bor-das. Isso torna o formulário visualmente agradável. Agora adicione abas dentro do Ribbon1 clicando com o botão direito do mouse e escolhendo a opção Add Tab. Você pode fazer a mesma coisa adicionando items na propriedade Tabs. Adicione 3 abas e altere a propriedade “caption” de cada uma. Pode ser Cadastro para a primeira, Financeiro para a segunda e Relatórios para a terceira aba. Observe que algumas propriedades são similares às do componente PageControl.

Agora dentro da aba Cadastro adicione três grupos clicando com o botão direito do mouse e escolhendo Add Group. Fique a vontade para a propriedade caption dos RibbonGroups. Seus nomes serão RibbonGroup1, RibbonGroup2, respectivamente. Agora vamos colocar mais um componente no nosso projeto: é o “Action Manager” que vai gerenciar os objetos que irão compor os botões (grupos) do nosso componente Ribbon. Vá na propriedade “ActionManager” do Ribbon1 e selecione ActionManager1. Vá na pro-priedade Style do Ribbon1 e altere para “Ribbon

– Obsidian”, depois “Ribbon – Silver” e volte para “Ribbon – Luna” que é o padrão do XP. Viu que o visual mudou bastante? Na propriedade Style do ActionManager1 você também tem esse controle, porém, com mais opções.

Bom, vamos ao que interessa realmente! Insira um componente ImageList e insira nele várias ima-gens. Observe que o Delphi 2009 lê imagens do tipo .PNG que é mais uma novidade. Altere a propriede

Image do ActionManager1 para ImageList1. Veja que podemos colocar vários componentes Image-List e associando às propriedades DisabledImages para quando os botões estiverem desativados, LargeImages para que as mesmas imagens sejam exibidas num tamanho maior.

Dê duplo clique no ActionManager1 e na aba Actions pressione a tecla Insert para inserir uma nova ação que vai ser posicionada no nosso menu

outubro 2008 07

Sobre o autor

Gildicley Alves Pereira é diretor de de-senvolvimento da Tecnocompany (Taubaté-SP) e da Gsoft (Conc. Arag.- Pará). Bacharel em Pedagogia(UEPA) e tecnólogo em Desen-volvimento de Sistemas(UNAMA). Desenvolve em Delphi desde a versão 1.0.

em forma de botão, checkbox, combobox, etc. Insira 6 Actions.. Em ImageIndex, clique com o mouse e escolha a figura desejada para o Action. Faça o mesmo para todos os Actions. Depois de definidas as figuras, arraste os objetos Action1 e

Action2 para o RibbonGroup1 do Ribbon1. Arraste também o 3 e o 4 para o RibbonGroup2 e os Ac-tions 5 e 6 para o RibbonGroup3 . Agora vamos na propriedade CommandStyle do Action1 e defina como csButton. Faça o mesmo para o Action2.

Nos Actions 3 e 4 defina como csCheckBox e no 5 e 6 defina como csRadioButton. Veja na imagem abaixo o resultado.

Antes de concluir, só uma pequena observa-ção. Se você pretende criar interfaces para seus aplicativos parecidas com a do Office 2007, utili-zando os “Ribbons”, é necessário uma licença da Microsoft. Felizmente essa licença não tem custo nenhum. Basta acessar o link https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=10&ct=1223961880&rver=5.0.3265.0&wp=MCMBI&wreply=https:%2F%2Fprofile.microsoft.com%2FRegSysProfileCenter%2Fwizard.aspx%3Fwizid%3D5fed1051-2e7b-4049-8177-0fdaae5f475c%26lcid%3D1033&lc=1033&cb=LCID%3D1033%26WizID%3D5fed1051-2e7b-4049-8177-0fdaae5f475c%26brand%3-DOffice%2B2007&id=74335 e logar com suas credenciais do Windows Live ID (hotmail), preen-cher alguns dados, confirmar e pronto! Você está licenciado para usar livremente a nova interface da Microsoft.

Conclusão

Finalizando, podemos perceber que com pou-cos cliques temos um novo menu super flexível, poderoso e elegante. Podemos também adicionar o menu de sistema semelhante ao do Word 2007, além dos outros componentes que compõem a paleta Ribbon Controls, mas isso fica pra uma próxima edição. Dê uma olhadinha no menu do Office 2007 e fique a vontade para criar seu novo menu. Grande abraço e até a próxima!

O The Club agradece e parabeniza a sócio Gildicley pela matéria sobre “Ribbon Controls”.

Se você tem facilidade para escrever e gostaria de ver suas matérias publicadas na “The Club - megazine” entre em contato conosco e nos envie sua matéria.

outubro 200808

Delphi

No dia a dia, em nosso trabalho nos deparamos com a necessidade da utilização de componentes específicos de terceiros, daí a necessidade da instalação dos mesmos no Delphi. Para um programador dotado de alguma experiência pode ser uma tarefa rotineira e até repetitiva, mas para quem está iniciando no mundo dos “developers”, pode ser tarefa árdua.

Assim neste artigo vamos passar em síntese as diversas formas de instalação de componentes junto ao Delphi.

Um componente ou pacote de componentes podem possuir as seguintes extensões de arquivos:

*.pas*.dcu*.dpk*.bpl

Instalando a partir do arquivo *.pas

Os arquivos cuja extensão é *.pas, são arqui-vos onde todo o código fonte do componente está

disponível. Caso o componente venha apenas com este arquivo, o processo de instalação do mesmo deve ser feita da seguinte maneira:

Execute o Delphi e feche o projeto, vá para o menu e clique em “COMPONENT”, em seguida clique na opção “INSTALL COMPONENT”, após abrirá uma tela, clique na aba “INTO NEW PACKA-GE, clique em “BROWSE¨ na opção Unit file name, conforme a figura 1, em seguida abra o arquivo *.pas, clique em OK, assim será criado um novo pacote (.dpk), clique em compile e install (Figura 2). Após a execução destes procedimentos, você verá que o Delphi criará poderá criar uma nova aba na barra de componentes com o nome do componente instalado caso isto seja definido no

componente, ou então o componente pode ser inserido numa aba já exisitente.

Instalando a partir do arquivo *.dpk

Este arquivo (.dpk) é o pacote proopriamente dito, nele contém a referência de um ou mais componentes que podem fazer parte do pacote, assim ao contrário do interior não precisamos criar o pacote, pois o mesmo já existe.

Para instalá-los, clique em Menu, clique em “Open”, em seguida selecione o arquivo que con-têm a extensão *.dpk, posteriormente o Delphi abrirá uma tela, como na figura 2, contendo os pacotes de componentes, após clique no botão compile na parte superior esquerda da tela, onde

Figura 1

outubro 2008 09

Delphi o Delphi gerará arquivos compilados *.dcu. Em seguida clique no botão install para instalar os com-ponentes. Note que, como no exemplo anterior, será exibida uma mensagem com os componentes instalados.

Instalando a partir do arquivo *.bpl

São arquivos que contêm pacotes de compo-nentes já compilados, ou seja, prontos para sua instalação. Normalmente não temos os fontes disponíveis, nem será necessário criar um novo pacote (.dpk), pois como já foi dito o pacote já está compilado.

Para instalarmos, primeiramente devemos clicar em Menu – Component – Install Package, logo em seguida será disponibilizada na tela a Figura 3.1:

Em seguida, clique no botão Add., após abrirá um caixa do tipo Open Dialog, como na figura 3.2 abaixo, onde iremos apontar para o diretório que contêm o componente que desejamos instalar:

Clique no arquivo que contêm o pacote a ser instalado e após em abrir.Observe que o compo-nente será incluído na caixa Design Package. Assim como nos outros exemplos, poderá ser incluída uma nova aba na barra de componentes do Delphi, ou então os componentes podem ser adicionados numa aba já existente.

Conclusão

Embora este seja um artigo simples, tem como objetivo atingir os mais novatos em Delphi, passan-do conceito básico de instalação de componentes, aonde abordei as duvidas freqüentes dos iniciantes sobre este assunto.

Ate o próximo artigo.

Figura 2

Figura 3.1

Figura 3.2

Sobre o autor

Marco Antonio ArmandoConsultor Técnico The club

outubro 200810

Nota Fiscal Eletrônica (NF-e) é o tema do momento. Seus clientes precisam atender à nova legislação, sua empresa precisa fornecer solução imediata e os leitores querem saber mais sobre o assunto.

A NF-e é um documento emitido e armazenado eletronicamente, com validade jurídica garantida por processo de assinatura digital.

O principal objetivo da implantação desta nova modalidade é o acompanhamento em tempo real das operações comercias pelo Fisco e a substituição do modelo atual de emissão de documentos fiscais em papel, de forma a simplificar uma série de obrigações do contribuinte. Maiores informações podem ser obtidas através do portal nacional da NF-e em www.nfe.fazenda.gov.br

Este artigo apresenta uma introdução geral sobre o tema, seus conceitos e tecnologias envolvi-das no desenvolvimento e implantação de soluções para NF-e. Ao final deste artigo o leitor terá uma visão geral de como funciona o processo.

Descrição Simplificada do Processo

O diagrama a seguir apresenta estrutura sim-plificada dos processos relacionados à NF-e.

De maneira simplificada, o modelo operacio-nal da NF-e pode ser assim descrito:

1. A empresa emissora da NF-e gera um arquivo eletrônico contendo as informações fiscais da operação comercial em questão.

O arquivo eletrônico gerado pelo sistema gerencial contendo as informações fiscais da ope-ração comercial em questão terá extensão .XML (Extensible Markup Language) e deverá ser gerado conforme padrão pré-estabelecido vigente.

Este documento eletrônico contém informa-ções equivalentes às informações contidas no modelo atual de notas fiscais em papel, tendo validade jurídica equivalente.

O formato padrão pré-estabelecido vigente dos arquivos XML de NFe é determinado pelos chamados “Pacotes de Liberação” que contém arquivos .XSD (XML Schema Definition) onde é determinada a estrutura e conteúdo de todos os

arquivos relacionados aos processos de NFe.O pacote de liberação atual encontra-se na

versão PL005a e está disponível para download em www.nfe.fazenda.gov.br/portal/schemas.aspx

Com base nas especificações contidas nos pacotes de liberação, bem como na documentação detalhada apresentada nos Manuais de Integração, devem ser geradas as classes para geração e mani-pulação dos arquivos XML de NFe.

O manual de integração atual encontra-se na versão v2.02a e está disponível para download em :www.nfe.fazenda.gov.br/portal/integracao.aspx

outubro 2008 11

Com base na Figura 01 percebe-se que a no-menclatura dos arquivos também segue uma pa-dronização, e para o caso específico do arquivo de NFe apresentado, o nome do arquivo que contém as informações de uma determinada Nota Fiscal segue o padrão Chave_de_Acesso + “-nfe.xml”. Este arquivo deve então ser encapsulado em um arquivo de Lote, contendo um limite máximo de 50 notas e tamanho máximo de 500Kb, com nomenclatura padrão Nº_do_Lote + “-env-lot.xml”

Algumas alternativas possíveis para geração de arquivos de NFe são:

1. Utilizar o programa Emissor (versão de Homologação) disponibilizado para download pela SEFAZ no link www.nfe.fazenda.gov.br/portal/emissor.aspx de forma a realizar o preenchimento de uma NFe e a posterior exportação do arquivo XML.

2. Utilizar os arquivos de exemplo dis-ponibilizados para download pela SEFAZ-RS no link www.sefaz.rs.gov.br/SEF_ROOT/inf/SEF-NFE.htm#NotaEX

3. Utilizar o aplicativo demo, desenvolvido em Delphi, disponibilizado para download no site www.igara.com.br/produto.php?cod_produto=114 a partir do qual é possível gerar o XML necessário clicando no botão “Nova NF-e”, depois no botão “Salvar NF-e” e por fim selecionando o diretório onde deseja salvar o arquivo .XML gerado.

4. Implementar o seu próprio sistema de geração de arquivos XML ou utilizar qualquer outra solução de terceiros para tanto.

Em qualquer uma das alternativas o arquivo em questão pode ser visualizado no Internet Explo-rer ou em qualquer outro browser de internet com suporte a XML, e o resultado é conforme mostrado na Figura 02.

2. O documento da NF-e emitido deve ser assinado digitalmente, de maneira a garantir a integridade dos dados, a autoria do emissor e a validade jurídica do documento.

O processo de assinatura digital deve ser feito utilizando-se certificado digital tipo A1 ou A3 emi-tido por autoridade certificadora credenciada pela Infra-estrutura de Chaves Públicas Brasileira – ICP-Brasil (www.icpbrasil.gov.br). Atualmente existem diversas autoridades certificadoras credenciadas, a exemplo da CertSign (www.certisign.com.br) e Serasa (www.certificadosdigitais.com.br), ficando a escolha do fornecedor e do tipo de certificado a

ser utilizado a cargo do leitor.Os certificados digitais são documentos eletrô-

nicos que identificam pessoas físicas ou jurídicas e através do uso de criptografia asseguram a confia-bilidade, privacidade, integridade, inviolabilidade e autenticidade de informações de transações realizadas via Internet.

O processo de assinatura digital utilizando certificados digitais nas operações via Internet tem validade jurídica para ser utilizado como assinatura de próprio punho, comprovando que seu proprietá-rio concorda com o documento assinado.

Tipicamente o certificado tipo A3 oferece

maior segurança, já que seu é gerado, armazenado e processado em cartão inteligente (SmartCard) ou token (espécie de hardlock para conexão na porta USB), tendo validade de 3 anos.

O certificado tipo A1 é gerado e armazenado no computador pessoal do usuário, não sendo necessário o uso de cartões inteligentes ou token, com validade de 1 ano, contado a partir de sua data de emissão.

Acessando o site da CertSign no link específico de certificados digitais para emissão de NF-e, temos acesso à lista de tipos de certificados, conforme mostrado na Figura 03.

Figura 01: Diagrama geral do processo de NFe

outubro 200812

Para assinar o arquivo gerado utilizando o certificado adquirido, é possível utilizar o aplica-tivo assinador de NFe disponível em http://www.nfe.fazenda.gov.br/portal/assinador.aspx. Este aplicativo, além de possibilitar a assinatura de arquivos, permite também efetuar a verificação e validação do Schema XML e da assinatura digital, sendo particularmente interessante para aqueles que detêm a tecnologia do processo de geração dos arquivos XML e não dispõe de solução para assinatura digital dos arquivos.

Outra opção é utilizar a assinaturaNFe32dll.dll, desenvolvida para facilitar e agilizar o processo de assinatura digital de arquivos de NFe. O objetivo é disponibilizar uma solução simples e acessível a todos os desenvolvedores onde, através da cha-mada de uma única função, seja possível se indicar o conteúdo a ser assinado, abstraindo a complexi-dade desta camada, que envolve conhecimentos aprofundados acerca de funções e tecnologias de certificação.

Sendo assim, a dll contém uma única função que recebe como parâmetro uma variável TStrings com o conteúdo a ser assinado e retorna o con-teúdo devidamente assinada como String. Mais simples que isso, impossível!

Function fncAssinarXML(sXml: TStrings): String; StdCall; external ‘assinaturaNFe32dll.dll’;

O uso da dll permite ao desenvolvedor abstrair completamente a camada de assinatura do arquivo magnético, dispensando o estudo e aprofunda-mento teórico relativo às ferramentas e funções complexas aplicadas no processo.

Maiores informações, bem como o download de versão de funcional da assinaturaNFe32dll.dll pode ser feito pelo site http://www.igara.com.br/produto.php?cod_produto=114

3. O arquivo deve então ser transmitido, via Internet, para a Secretaria da Fazenda do Es-tado (SEFAZ) onde reside o contribuinte emissor, através de tecnologia WebService.

Após gerado e assinado digitalmente, o arquivo XML deve estão ser transmitido utilizando-se da tecnologia de WebServices com base nos endere-ços fornecidos para cada estado, bem como na sua respectiva disponibilidade.

O WebService possibilita que dois aplicativos, independente de suas linguagens, utilizem uma

padronização para enviar e receber dados de forma transparente, sendo utilizada para facilitar a comunicação e integração de sistemas distintos, tornando-os compatíveis. A tecnologia de Web-Service propõe uma integração compreensível, reutilizável e padronizada. Para tanto, utiliza-se, como base de construção, o padrão XML e, para encapsulamento, o protocolo SOAP (Simple Object Access Protocol). Seu transporte normalmente é

feito via protocolo HTTP.Para o caso do projeto de NFe, realizamos o

envio de arquivos para os WebServices instalados nos servidores da Secretaria da Fazenda de cada estado, preparados para responder ao receber os respectivos arquivos requisição.

Na prática o envio de arquivo contendo in-formações de uma nota fiscal é apenas uma das funcionalidades previstas no projeto de NF-e. Além

Figura 02: Arquivo .xml de NF-e visualizado no Internet Explorer

Figura 03: Certificados para emissão de NF-e no site da CertSign

outubro 2008 13

desta funcionalidade, pode-se ainda: realizar o can-celamento de uma NFe, consultar o status de uma NFe, consultar a disponibilidade dos webservices etc. Para cada funcionalidade existe um tipo de arquivo e um serviço de transmissão específico, conforme listagem completa a seguir:

• Recepção de NF-e;o Recepção de Lote;o Consulta Processamento de Lote;• Cancelamento de NF-e;• Inutilização de numeração de NF-e;• Consulta da situação atual da NF-e;• Consulta do status do serviço.

Os serviços disponibilizados seguem a seguinte sistemática, conforme descrito na documentação oficial de NF-e:

• Para cada serviço oferecido existe um WebService específico. O fluxo de comunicação é sempre iniciado pelo aplicativo do contribuinte através do envio de uma mensagem ao WebService com a solicitação do serviço desejado.

• O WebService sempre devolve uma mensagem de resposta confirmando o recebimento da solicitação de serviço ao aplicativo do contri-buinte na mesma conexão.

• A solicitação de serviço poderá ser atendida na mesma conexão ou ser armazenada em filas de processamento nos serviços mais críticos

para um melhor aproveitamento dos recursos de comunicação e de processamento das Secretarias de Fazenda Estaduais.

• Os serviços podem ser síncronos ou assíncronos em função da forma de processamento da solicitação de serviços:

o Serviços síncronos – o processamento da solicitação de serviço é concluído na mesma conexão, com a devolução de uma mensagem com o resultado do processamento do serviço solicitado;

o Serviços assíncronos – o processamento da solicitação de serviço não é concluído na mesma

conexão, havendo a devolução de uma mensagem de resposta com um recibo que apenas confirma o recebimento da solicitação de serviço. O aplicativo do contribuinte deverá realizar uma nova conexão para consultar o resultado do processamento do serviço solicitado anteriormente.

Uma alternativa simples para transmissão de arquivos de NFe, conforme mostrado na Figura 04, é o uso da transmissaoNFe32dll.dll, desenvolvida para facilitar e agilizar o processo de transmissão de arquivos. O objetivo é disponibilizar uma solução simples e acessível a todos os desenvolvedores onde, através da chamada de uma única função para cada serviço, seja possível indicar o conteúdo a ser transmitido, abstraindo a complexidade desta camada, que envolve conhecimentos aprofundados acerca de funções e tecnologias de comunicação via WebService.

A dll de transmissão contém uma função para cada serviço que recebe como parâmetro uma variável PChar com o conteúdo a ser transmitido e retorna a resposta do WebService. Mais simples que isso, impossível!

O uso da dll permite ao desenvolvedor abs-trair completamente a camada de transmissão do arquivo magnético, dispensando o estudo e aprofundamento teórico relativo às ferramentas e funções complexas aplicadas no processo.

Maiores informações, bem como o download de versão de funcional da transmissaoNFe32dll.dll pode ser feito pelo site:

http://www.igara.com.br/produto.php?cod_produto=114

Figura 04: Aplicativo de transmissão de NF-e. Retorno da transmissão da NF-e.

outubro 200814

4. Após receber o arquivo, a SEFAZ realiza um processo de pré-validação e devolve uma Autorização de Uso, permitindo com isso o trân-sito da mercadoria e a continuação da transação comercial.

O resultado da transmissão de um arquivo XML de NFe para o WebService é um retorno, também em formato XML, contendo informações referentes ao processamento do respectivo arquivo transmitido.

O XML de retorno da SEFAZ deve ser proces-sado pelo seu aplicativo, de forma a avaliar os campos do mesmo que contém informações sobre o correto processamento do arquivo transmitido ou prováveis erros encontrados.

Tanto os arquivos gerados pela sua aplica-ção quanto os arquivos de retorno, podem ser validados quanto à sua estrutura e conteúdo, através do uso do validador online de mensagens, disponibilizado gratuitamente pela SEFAZ-RS no link http://www.sefaz.rs.gov.br/AAE_ROOT/NFE/SAT-WEB-NFE-VAL_1.asp

Para testar sua mensagem basta abrir o arquivo .XML desejado no NotePad.exe (Bloco de Notas do Windows), copiar seu conteúdo completo, colá-lo no campo de dados e clicar no botão “Validar”. É importante ressaltar que este validador pode ser utilizado para validar qualquer tipo de mensagem do Projeto NFe, incluindo mensagens de NFe, Can-celamento, Inutilização, Consulta e etc. O resultado da validação de arquivos de NFe válidos é mostrado na Figura 05.

5. Para acompanhar o trânsito da merca-doria o sistema deve imprimir, em papel comum, geralmente em única via, uma representação gráfica simplificada da NF-e, chamada de DANFE (Documento Auxiliar da Nota Fiscal Eletrônica)

O DANFE não é uma nota fiscal, nem a subs-titui, servindo apenas como instrumento auxiliar para consulta da NF-e na internet. Na prática o DANFE é um relatório de padrão pré-determinado que constitui uma representação gráfica simpli-ficada da NF-e que, impresso em papel comum, geralmente em única via, contém informações da mesma.

O DANFE deve conter impressa uma chave de acesso que possibilita a consulta da NF-e na inter-net, de forma que qualquer pessoa possa confirmar as informações impressas com as informações

contidas no site da SEFAZ.A implementação do DANFE no Delphi pode

ser feita utilizando um componente da classe TRv-Project, conforme mostrado nas Figura 06.

Vale lembrar que a utilização da ferramenta Rave Reports não é obrigatória, ficando essa esco-

Figura 05: NFe válida conforme validador online de mensagens do Projeto NFe disponibilizado pela SEFAZ-RS

lha a cargo do desenvolvedor. A preferência pelo Rave Reports se deu, pois o mesmo acompanha a instalação padrão do Delphi, bem como possui componentes que facilitam a geração do código de barras Code-128C.

outubro 2008 15

Figura 06: Estrutura do DANFE Retrato no Rave Report

Sobre os autores

Victory Fernandes é Engenheiro Mestrando em Redes de Computadores, e de-senvolvedor sócio da TKS Software - Soluções de Automação e Softwares Dedicados. Pode ser contatado em [email protected], ou através dos sites www.igara.com.br – www.igara.com.br/victory

Fellipe Capolupo é estudante de Engenharia Elétrica e desenvolvedor da TKS Software - Soluções de Automação e Softwares Dedicados. Pode ser contatado em [email protected]

Conclusão

Com este artigo abordamos conceitos gerais sobre os processos que envolvem NF-e.

A NF-e já é uma realidade, e muito em breve todos serão obrigados a adotar este novo formato. Mesmo as empresas não obrigadas, estão inte-ressadas em ter seus sistemas atualizados para trabalhar nesta nova modalidade de emissão de documentos fiscais que permite reduzir o uso e armazenamento de papel.

Daremos continuidade à nossa série de artigos sobre NFe, e seguiremos demonstrando como implementar recursos de NFe em sua aplicação, sempre de forma simples e prática! Enquanto a próxima edição não chega, com mais um artigo exclusivo, sugiro consultar também a internet onde você encontrará diversos arquivos que já publiquei sobre o tema em sites relacionados com programação.

Anuncie

conosco

Solicite um orçamento:

Skype: theclub_cadastro

E-mail: [email protected]

Fone: (14) 3732-1529

Anuncie na revista e ganhe um

banner publicitário no site do The Club

outubro 200816

Olá pessoal, vou começar uma série de artigos falando do LINQ. Mas, antes de co-meçarmos a trabalhar diretamente com ele, gostaria de falar um pouco sobre sua teoria e explicar melhor seu conceito para que possa-mos explorar o máximo de seus recursos.

Primeiro vou falar sobre a ferramen-ta, em seguida vamos percorrer quase todas suas funcionalidades. Acredito que isso levara uma serie

de artigos espero que vocês gostem e passem a aproveitar o máximo desta ferramenta que tanto tem a nos oferecer. Vamos La...

Definição:

Segundo a definição da Microsoft Linq é um conjunto de extensões do .Net Framework, bem como das novas linguagens (VB9 e C#) que provê-em novas capacidades dentro de um ambiente de programação, executar queries em dados armaze-nados na memória ou em um repositório de dados

LINQ Language

Integrated Query

externo, como um SGBD ou arquivo XML.Transformando em uma linguagem mais prá-

tica, é uma tecnologia que nos permite abstrair a sintaxe SQL (no caso de pesquisa em BD) e ao mes-mo tempo unificar a sintaxe de pesquisas nos mais diversos meios de armazenamento de informações como: Arrays, XML, etc.

A Microsoft então diferenciou o LINQ de acordo com o tipo de dado onde ele vai realizar a pesquisa, daí surgiram os nomes:

Neste primeiro artigo vou explorar o LINQ to

SQL e nos próximos vamos falando de suas outras extensões.

LINQ to SQL:

É uma implementação específica do LINQ para o SQL Server que converte consultas escritas em C# ou Visual Basic em SQL dinâmico, provendo uma interface que permite mapear os objetos do banco de dados gerando as classes para realizar as operações usando a sintaxe LINQ;

Também permite realizar alterações nos obje-tos e atualizar o banco de dados.

Inicialmente o LINQ To SQL só funciona com Banco de Dados SQL Server devido ao padrão adotado pela Microsoft “ANSI“

Se todos os fabricantes de Banco de Dados adotassem este mesmo padrão então o LINQ funcionaria para todos os Bancos de Dados, mas a equipe do projeto LINQ esta trabalhando para que outros fornecedores de banco de dados fa-çam a implementação para seus produtos. Vamos aguardar...

O/R Mapping O modelo de mapeamento objeto relacional

para banco de dados SQLServer, consiste no ma-peamento das:

• Tabelas do banco de dados como clas-ses;

• Campos como propriedades; • Procedures e funções como métodos;

Desta forma você tem no designer de classe da aplicação um conjunto de classes que representam visão 1:1 do seu banco de dados. Ver “Figura 1”.

Note que a representação de classes é a

mesma que a do banco de dados, até mesmo suas

outubro 2008 17

chaves primárias e relacionamentos. Esse passa a ser nosso modelo de entidades, e também o Objeto de Acesso ao Banco de Dados.

Ele mantém toda esta estrutura para utilizar da melhor forma possível na hora de montar a

string SQL.

Entendendo o objeto DataContext:Após você arrastar suas tabelas e procedures

para dentro do diagrama como no exemplo acima, ao clicar no salvar o Visual Studio ira gerar classes

que representam as entidades e relacionamentos que temos de dados modelado. Para cada diagrama LINQ SQL e adicionado à nossa solução, uma classe DataContext. Esta classe é o principal canal pelo qual nós teremos acesso a entidades de pesquisa do banco de dados, bem como inserções as alte-

Figura 1

outubro 200818

rações. A classe criada DataContext terá proprie-dades que representam cada um quadro dentro de nós modelado o banco de dados, bem como métodos para cada procedimento armazenado é acrescentado.

Por exemplo, abaixo na “Figura 2” está a classe DataClassesDataContext que é baseado no modelo que criamosna “Figura 1”:

Figura 2

Note que temos a classe Customer com todas as colunas da tabela agora como Propriedade da classe, e isso para todas as outras tabelas adicio-nadas no diagrama.

Gostaria de deixar claro que tudo que e gerado automaticamente pelo LINQ e feito de uma maneira muito mais clara e limpa que por exemplo os DataSets Tipados, agora conseguimos ter o controle total do que esta sendo gerado, pois como mostrei acima conseguimos ver as classes geradas ter acesso ao código e ate mesmo criar tudo isso na mão, gosto de ressaltar isso porque traz mais confiança no processo, pois muitas pes-soas criticavam muito a MS pelos códigos gerados

dinamicamente de baixa qualidade com o LINQ isso e muito diferente.

E o que e mais legal e a economia de tempo acompanhada com a qualidade de arquitetura que ganhamos utilizando os diagramas LINQ, pois quantos projetos foram gerados sem terem ao menos um único diagrama de classe, agora você será obrigado a ter pelo menos um, mas isso e um outro assunto... Não quero começar a falar de arquitetura neste artigo mais podemos falar disso no futuro, de como ficaria uma arquitetura de aplicação com LINQ.

Agora que já vimos as facilidades e vantagens de definição de projeto, vamos colocar a mão na massa.

Criando Querys:

Agora que já temos nosso diagrama criado vamos escrever facilmente algumas Querys muito utilizadas em nosso dia a dia, onde poderemos ter idéia da potencia e facilidade agregada a rotinas de acesso a dados.

O código a seguir usa sintaxe LINQ query para obter uma seqüência de Produto. Observe como o código está pesquisando em todos os Produto/Categoria fazendo um JOIN para obter apenas os produtos da categoria “Confections”:

DataClassesDataContext Db = new DataClassesDataContext();

var ProdutosConf = from p in Db.Products where p.Category.CategoryName == “Confections” select p;

O código abaixo demonstra como recuperar um único produto a partir do banco de dados, atua-lizar o seu preço e, em seguida, salvar as alterações de volta no banco de dados

DataClassesDataContext Db = new DataClassesDataContext();Product produtoDb = Db.Products.Single(p =>

p.ProductID == 54);

produtoDb.UnitPrice = 25;produtoDb.UnitsInStock = 4;

Db.SubmitChanges();

O código abaixo demonstra como inserir um novo produto na tabela.

DataClassesDataContext Db = new DataClassesDataContext();Product produtoDbNew = new Product();

produtoDbNew.ProductName = “The Club”;produtoDbNew.SupplierID = 1;produtoDbNew.CategoryID = 2;produtoDbNew.QuantityPerUnit = “35 pages”;produtoDbNew.UnitPrice = 99;produtoDbNew.UnitsInStock = 150;produtoDbNew.UnitsOnOrder = 15;produtoDbNew.ReorderLevel = 50;produtoDbNew.Discontinued = false;

Db.Products. InsertOnSubmit (produtoDbNew);Db.SubmitChanges();

Agora vamos deleterar um produto.

DataClassesDataContext Db = new DataClassesDataContext();Product produtoDbRemove = Db.Products.Single(p => p.ProductID == 54);

outubro 2008 19

Sobre o autor

Db.Products.DeleteOnSubmit(produtoDbRemove);

Podemos tambem deletar varios produtos de uma so vez, como no exemplo abaixo onde faço um select de todos os produtos que tenhão “HOT” em seu nome e mando deletar todos eles.

PS: o Contains utilizado na query abaico cor-responde ao LIKE %% do SQL.

var produtos = from p in Db.Products where p.ProductName.Contains(“Hot”) select p;

Db.Products. DeleteAllOnSubmit (produtos);

Agora vamos fazer a chamada da storeproce-dure adicionada em nosso diagrama, lembrando que quando adicionamos procedures elas se tor-nam métodos e sua chamada fica bem simples de implementar como no exemplo abaixo onde chamo a proc “CustOrdersOrders” que passado um Id de cliente ela retorna todas as ordens do cliente.

DataClassesDataContext Db = new DataClassesDataContext();var resultadodaconsulta = Db.CustOrdersOrders (“BONAP”);

O que e bem legal e que os parametros da pro-cedure passam a ser parametros da assinatura do metodo criado pelo Visual Studio e quer mais uma coisa muito legal após obtermos o resultado pode-mos ter acesso direto no intelisence aos campos de retorno da procedure como na “Figura 3”.

Isso e muito legal, veja o compilador foi la na procedure viu os campos de retorno e já disponi-bilizou aqui para que possamos utilizar sem nem

Figura 3

Fabiano BelmonteSenior 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 Visual Studio desde suas primeiras versões, responsável pela implementação de uma Metodologia de trabalho e melhoras significativas no resultados e na qualidade do time de Desen-volvimento de muitas empresas por onde passou como (Saraiva.Com) e ferramentas como TFS (Team Foundation Server).

Foi palestrante em eventos como Codificando. NET 2008 e outros eventos sobre Tecnologia .NET.Instrutor da e-TNIAX Group especialista em C#, ASP.NET e Silverlight. www.etniax.com.br

sequer sabermos quais campos tinhas para retorno dentro da procedure.

Espero que tenham gostado tanto do artigo como do LINQ, nos próximos artigos continuarei falando de LINQ talvez explore um pouco mais o SQL mais falaremos bastante de LINQ ainda.

Bons Códigos...

outubro 200820

Neste artigo abordarei como trabalhar com o firebird em aplicações .net no visual studio. A grande maioria dos sócios do The Club já conhecem esse poderoso SGDB .

DOWNLOAD

A primeira tarefa a ser feita para realização a conexão, é efetuar o download do SGDB Firebird e do Provider Firebird, para o

.NET. Tanto o Firebird quanto o Provider podem ser encontrados através do endereço http://www.firebirdsql.org . Neste artigo utilizarei a verão 2.0 do provider e a versão 1.5 do Firebird.

FERRAMENTA DE GERÊNCIAMENTO DO FIREBIRD

Podemos utilizar diversas ferramentas para administração do banco de dados como o IB MANAGER FOR INTERBASE AND FIREBIRD ou o IBEXPERT, que possui uma versão free. Você pode

encontrá-la no site http://www.ibexpert.comObservem que na listagem 1 temos o script de

criação do banco e da tabela ALUNOS.

Listagem1.

SET SQL DIALECT 3;SET NAMES ISO8859_1;

CREATE DATABASE ‘E:\TheClub\Alexandre\Artigos\Paises.gdb’USER ‘SYSDBA’ PASSWORD ‘masterkey’PAGE_SIZE = 4096DEFAULT CHARACTER SET ISO8859_1;

/*Incremento campo chave*/CREATE GENERATOR GEN_ID_PAISES;SET GENERATOR GEN_ID_PAISES TO 0;

/*Tabela PAISES*/

CREATE TABLE PAISES( ID_PAIS INTEGER NOT NULL, NOME VARCHAR(30) CONTINENTE VARCHAR(25), );

ALTER TABLE PAISES ADD CONSTRAINT PK_PAISES PRIMARY KEY (ID_PAIS);

SET TERM ^;

/* trigger */CREATE TRIGGER TRG_PAISES FOR PAISES ACTIVEBEFORE INSERT POSITION 0ASBEGIN NEW.ID_PAIS = GEN_ID(GEN_ID_PAISES,1);

outubro 2008 21

END^

SET TERM;^

Nota do consultor 1: Podemos criar o script no IBExpert através do menu toolsScript Executive. Após isso fazer o registro no IBExpert em DataBase Register Database.

Nota do consultor 2: Foi utilizado um generator em conjunto com uma trigger para gerar o valor chave primária automa-ticamente .

APLICAÇÃO ASP.NET

No Visual Studio 2008 crie um novo Web Site em FileNewWeb Site. Defina a linguagem C# e nomei a aplicação de AlunosFB.

Com o botão direito no Solution Explorer de nosso projeto > Add Reference > Selecionar a Aba, Browse > Selecionar o arquivo conforme figura1.

Na pagina default.aspx adicione um GridView, uma label com sua propriedade text modificada para “Escolha o Tipo de Pesquisa” , um dropdown-list, um label com a propriedade text “Digite um valor a ser pesquisado” e um textBox.

Na SmartTag do DropDownList , clique em Edit Items... Adicione alguns valores na lista conforme a figura2:

Observe que temos três “members” com os valores 1,2 e 3 respectivamente. Esses valores serão passados como parâmetro para o DataSet.

Adicione um ObjectDataSource .

Este componente ObjectDataSource nos per-mite conectar com algum objeto de negócio criado por nós na camada lógica de negócio e e também nos possibilita selecionar métodos implementados

Figura 1.

Figura 2.

outubro 200822

inclusive com parâmetros.

Com o objecto DataSource podemos encapsu-lar as funcionalidades de acesso à uma classe.

Nossa página default.asp vai ficar como na imagem ao lado:

CLASSE DE ACESSO AOS DADOS

A criação de uma classe de acesso ao banco é uma boa prática de desenvolvimento em camadas e que podemos evitar redundância de código, podemos reutilizar os códigos, tento uma lógica centralizada. Um tipo de código que tem muita tendência a ser repetitivo é o código de acesso a banco. Para evitar a repetição deste código criam-se camadas de acesso a dados isolando o código de acesso aos dados do código da camada de regras de negócio.

Vamos implementá-la na prática. Clique com o botão direito do mouse no Soluction

Exploreradd new item. Escolha a opção Class e de o nome de Paises(figura3)

Observe o script de codificação da classe na listagem 2.

Na listagem 2, Criamos um método na classe chamado GetPaises, que retorna um DataSet. Esse DataSet é preenchido com os dados retornados por um FbDataAdapter, através do método Fill.

Criamos uma variável SQL que serve para armazenar a instrução SQL:

string SQL = “select * from Paises”;

Verificamos se o argumento Pais é diferente de vazio.

if (Pais != “”)

Figura 3.

outubro 2008 23

sing System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using FirebirdSql.Data.FirebirdClient;

/// <summary>/// Summary description for Alunos/// </summary>public class Paises{ public Paises() { // // TODO: Add constructor logic here // } public DataSet GetPaises(string Pais,int Tipo) { FbConnectionStringBuilder cno = new FbConnectionStringBuilder(); cno.UserID = “SYSDBA”; cno.Password = “masterkey”; cno.Database = @”’E:\TheClub\Alexandre\Artigos\Paises.gdb’ “; cno.DataSource = “localhost”; FbConnection cn = new FbConnection(cno.ToString()); string SQL = “select * from PAISES”; if (PAIS != “”) { switch (Tipo) { case 1: SQL = “select * from PAISES where UPPER(NOME) LIKE ‘” + Nome.ToUpper() + “%’”; break; case 2: SQL = “select * from PAISES where UPPER(NOME) LIKE ‘%” + Nome.ToUpper() + “%’”; break; case 3: SQL = “select * from PAISES where UPPER(Nome) = ‘” + Nome.ToUpper() + “’”; break; default: SQL = “select * from PAISES “; break;

} Listagem 2

outubro 200824

Caso seja verificaremos o argumento Tipo. Seus valores são:

• 1 para pequisar nas iniciais• 2 para pesquisar em qualquer parte do

texto• 3 para uma pesquisa exata

Veja Listagem 3

O FBprovider d isponib i l i za a c lasse FbConnectionStringBuilder,na qual montamos a string de conexão . Instanciamos o componente que faz a conexão.

Criamos um fbCommand para executar a ins-trução .O fbDataAdapter carrega o dataset.

FbCommand cmd = new FbCommand(SQL, cn); FbDataAdapter fda = new FbDataAdapter(cmd); DataSet ds = new DataSet(); fda.Fill(ds); return ds;

No Objectdatasource vá em configure Data-Source. Selecione a classe Paises.(Figura 4)

Nesse momento vamos escolher o método . Observem que aqui já é listado o método com os argumentos definidos na classe. (Figura 5 )

Na próxima janela definimos os valores dos parâmetros.(Figura 6)

Esses parametros que serão passados para método GetPais, na classe Paises

Pronto, é só clicar em finish e nossa aplicação já esta pronta!

} FbCommand cmd = new FbCommand(SQL, cn); FbDataAdapter fda = new FbDataAdapter(cmd); DataSet ds = new DataSet(); fda.Fill(ds); return ds; } }

switch (Tipo) { case 1: SQL = “select * from PAISES where UPPER(NOME) LIKE ‘” + Nome.ToUpper() + “%’”; break; case 2: SQL = “select * from PAISES where UPPER(NOME) LIKE ‘%” + Nome.ToUpper() + “%’”; break; case 3: SQL = “select * from PAISES where UPPER(Nome) = ‘” + Nome.ToUpper() + “’”; break; default: SQL = “select * from PAISES “; break;

} }

Figura 4.

Continuação Listagem 2

Listagem 3

outubro 2008 25

Sobre o autor

Luís Alexandre de Oliveira é Téc-nologo em Processamento de Dados ,graduado pela Faculdade de Técnologia de Sorocaba, Consultor técnico do The Club

Docente do curso técnico informática - Etec de Avaré e do curso Tecnologia em Redes de Computadores - Fatec Eduvale – Avaré

Conclusão

Nesse simples artigo abordei a utilização do firebird como um outra opção e o encapsulamento da regra de négocio. Observe que o ObjectDataSource permite tratar uma classe de negócio como um fonte de dados.

Figura 5. Figura 6.

outubro 200826

outubro 2008 27

Dicas DELPHI

Firebird – Retornar Intervalos entre horas em um período

SELECT TEMPO, EXTRACT(HOUR FROM

TEMPO)*60 + EXTRACT(MINUTE FROM TEMPO)

FROM BIOLIFE

WHERE EXTRACT(HOUR FROM TEMPO)*60 +

EXTRACT(MINUTE FROM TEMPO) >= :PARAMETRO

AND

EXTRACT(HOUR FROM TEMPO)*60

+ EXTRACT(MINUTE FROM TEMPO) <=

:PARAMETRO

ADO – Tratar erros

procedure TForm1.Button1Click(Sender:

TObject);

begin

try

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add(‘INSERT INTO

CadAntimicrobianos (Aerobico,

Codigo, Gram, Nome)’);

ADOQuery1.SQL.Add(‘VALUES (“”, “”,

“”, “”)’);

ADOQuery1.ExecSQL;

except on E: EOleException do

begin

ShowMessage(E.Message);

end;

end;

end;

BDE – Retorna lista de usuários logados no BDE

procedure TForm1.Button1Click(Sender:

TObject);

begin

GetNetUsers(Memo1.Lines);

end;

procedure GetNetUsers(Strings:

TStrings);

var

hCur: hDBICur;

rslt: DBIResult;

User: USERDesc;

begin

Check(DbiOpenUserList(hCur));

repeat

rslt := DbiGetNextRecord(hCur,

dbiNOLOCK, @User, nil);

if rslt = DBIERR_NONE then

Strings.Add(User.szUserName)

else

if rslt <> DBIERR_EOF then

Check(rslt);

until rslt <> DBIERR_NONE;

end;

BITMAP – Como jogar uma imagem de um campo para uma variável

procedure TForm1.BitBtn1Click(Sender:

TObject);

var

BMP1: TBitmap;

begin

BMP1 := TBitmap.Create;

outubro 200828

BMP1.Assign(Table1Graphic);

Image1.Picture.Assign(BMP1);

end;

BOTÃO – Rotina para controle de botões de edição

procedure TForm1.

DataSource1StateChange(Sender: TObject);

begin

BT_Inclui.Enabled :=

Not (DataSource1.State in

[DSINSERT,DSEDIT]);

BT_Altera.Enabled := Not

(DataSource1.State in

[DSINSERT,DSEDIT]);

BT_Exclui.Enabled :=

Not (DataSource1.State in

[DSINSERT,DSEDIT]);

BT_Pesquisa.Enabled :=

Not (DataSource1.State in

[DSINSERT,DSEDIT]);

BT_Fim.Enabled :=

Not (DataSource1.State in

[DSINSERT,DSEDIT]);

BT_Grava.Enabled :=

DataSource1.State in [DSINSERT,DSEDIT];

BT_Cancela.Enabled :=

DataSource1.State in [DSINSERT,DSEDIT];

end;

CLIPBOARD – Como limpar

procedure TForm1.Button1Click(Sender:

TObject);

var

Clip: TClipBoard;

begin

Clip := TClipBoard.Create;

Clip.Clear;

end;

RAVE REPORT – Alterar numeração da

página corrente

procedure TForm1.

RvSystem1NewPage(Sender: TObject);

begin

with Sender as TBaseReport do

begin

MarginTop := 0.5;

Home;

SetFont(‘Arial’,24);

PrintFooter(IntToStr(CurrentPage+1

0), pjCenter);

MarginTop := 1.0;

Home;

SetFont(‘Arial’,10);

end;

end;

Anuncie

conosco

Solicite um orçamento:

Skype: theclub_cadastro

E-mail: [email protected]

Fone: (14) 3732-1529

Anuncie na revista e ganhe um

banner publicitário no site do The Club

outubro 2008 29

Dicas .NETBoa prática de AJAX - Disparando eventos com trigger

(Update Pannel)

O Microsoft AJAX Framework oferece muitos muitos, muitos e muitos recursos interessantes. Porém, é necessário tomar ns cuidados para evitar a má utilização destes recursos em funcionalidades desnecessárias.

Um exemplo simples: um formulário com 1 botão e label e quando clica-mos no botão, alteramos a propriedade texto do label para DateTime.Now.ToStiong() e com isso exibimos a hora atual.

Procedimento padrão de ajax: colocar um Script Manager e um Upda-tePanel… arrasta os controles para o UpdatePanel e pronto!!!! AJAX imple-mentado…

Claro que isso é o suficiente para dar a impressão que estamos melho-rando muito a performance de nossa página, porém podemos melhorar muito mais.

O botão está dentro do Update Panel de forma desnecessária, isso por-que ele simplesmente faz o evento click para alterar o valor do Label, ou seja, somente o Label precisa ser enviado para o servidor.

Solução:

• Tirar o botão do Update Panel • Adicionar uma trigger para o botão dentro do Update Panel

Veja o código:

<asp:UpdatePanel ID=”UpdatePanel1”

runat=”server”>

<Triggers>

<asp:AsyncPostBackTrigger

ControlID=”Button1” />

</Triggers>

<ContentTemplate>

<asp:Label ID=”Label1”

runat=”server” Text=”Label”></

asp:Label>

<asp:Button ID=”Button1”

runat=”server” onclick=”Button1_

Click” Text=”Button” />

</ContentTemplate>

</asp:UpdatePanel>

Com isso diminuímos o tráfego de dados entre applicação e servidor! em um cenário maior, isso pode mudar muito a performance de sua aplicação.

Conclusão:

Não utilize o Update Panel em toda a página, é preferível colocar mais do que um Update Panel na página do que colocar em lugares desnecessários.

Alexandre Tarifa

outubro 200830

Verticais

1- Objeto da aba Qreport que insere data/hota ou número de página no relatório.2- Unit necessária para utilizar os registros do Windows.3- Evento disparado quando um item da combo é selecionado.5- Constante que indica a tecla enter no envento OnKeyDown.6- Propriedade do form que habilita o reconhecimento de teclas.8- Objeto que insere gráficos ligados ao banco de dados.9- Clausula para sobrecarregar métodos.11- Função para concatenar duas strings.

Horizontais

4- Cláusula de sobreposição de métodos.7- Unit do sqldatase.10- Maior clube de programadores do Brasil. (palavra chave)12- Método que localiza registros no adotable.13- Função para comparar datas.14- Função para incrementar uma data.Confira as respostas do desafio no site do The Club.

outubro 2008

outubro 2008