Escolar Documentos
Profissional Documentos
Cultura Documentos
NÃO A
Adriano Santos
A ClubeDelphi tem uma novidade para você que comprou este
C
PER
28 - SOAP - Aprenda técnicas avançadas em um exemplo passo a passo exemplar na banca de jornal: você pode acessar GRATUITAMENTE,
46 - Boas práticas para trabalhar em equipe O acesso é válido por 30 dias a partida da data de lançamento da revista. Todos os
meses a ClubeDelphi lhe dará uma senha válida para acessar o portal. Comprando a
Fernando Sarturi Prass e Cristiano Caetano
revista regularmente em bancas, você terá acesso ininterrupto a ele!
Edição 86 - ClubeDelphi 3
SubComponentes
Como alguns componentes da VCL, como Listagem 1. Exemplo de AutoRefresh
o SimpleDataSet e LabeledEdit, conseguem unit uCDSRefresh;
interface
ter subcomponentes associados com todas uses
as propriedades acessíveis internamente? SysUtils, Classes, DB, DBClient, ExtCtrls;
type
Gostaria de criar um componente com essas TCDSRefresh = class(TClientDataSet)
private
características mais não sei como. FTimer: TTimer;
Rodrigo Pizolotto procedure DoTimer(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
A partir da versão 6, o Delphi passou published
property Timer: TTimer read FTimer;
a suportar o recurso de SubComponentes. end;
Como exemplo, vamos criar uma classe procedure Register;
www.clubedelphi.net/portal
O portal ClubeDelphi PLUS é a continuação, na Web, da Sistema completo com Delphi 7, dbExpress e Firebird 2.0
revista ClubeDelphi. O portal recebe um conteúdo novo Acompanhe a criação de um sistema completo de gerenciamento de locadora,
todo dia e hoje conta com: i) mais de 390 vídeo aulas; ii) usando Delphi, dbExpress e Firebird 2.0. Luciano Pimenta, mostrará todos os passos
6 cursos online; iii) 1 livro eletrônico gratuito, de Guinther necessários para a criação do projeto em todas as fases de implementação, desde a
Pauli, sobre ADO.NET e BDP; iv) mais de 150 artigos criação do banco de dados, até a migração para .NET.
exclusivos (que não foram publicados na revista)!;
Acesse o portal ClubeDelphi PLUS e receba muito mais Criando uma tela de consulta dinâmica – Parte IV e V
conteúdo sobre Delphi! E o que é melhor: de graça! Veja nessa vídeo aula de Paulo Quicoli, como criar um tela de consulta dinâmica.
Todo leitor da revista ClubeDelphi, seja ele assinante ou
Mini curso de ClientDataSet - Parte I a VI
comprador da revista em bancas, tem acesso ao portal (para
Veja nessas aulas de Guinther Pauli um mini curso exclusivo sobre dicas avançadas
quem compra em bancas, o acesso é válido por 30 dias).
sobre o ClientDataSet.
Se você é assinante, utilize o seu login e senha pessoais
para acessar o portal. Se você comprou em bancas, utilize MainMenu no Delphi for PHP
o login e senha publicados na página do editorial desta Veja nessa vídeo aula de Fabricio Desbessel como criar um menu no Delphi for PHP.
edição.
Confira a seguir as últimas novidades do portal! Trabalhando com Word no Delphi – Parte III
Veja nessa vídeo aula de Jefferson Junglaus, como trabalhar com o Word no Delphi.
Boa leitura e sucesso!
Equipe DevMedia Instalando o FastReport 4 no Delphi 2007 – Parte I e II
Veja nessa vídeo aula de Paulo Quicoli, como instalar a nova versão no FastReport no
Delphi 2007.
N
a edição 70 da ClubeDelphi, camadas. Teremos uma camada servido-
propus uma solução baseada em ra, na forma de um Web Service, que se
SOAP, XML e ClientDataSet para encarregará de acessar o banco de dados.
permitir que aplicações se comunicassem Diferentes tipos de aplicação farão acesso
através de Web Services. Entre algumas a esse Web Service, solicitando dados
vantagens da solução, destacaria o acesso e chamando métodos para atualizar
ao BD a partir de qualquer lugar da In- informações.
ternet e centralização do acesso a dados
em uma única camada. Arquitetura da solução
A aplicação cliente Win32 poderia, por Para ter uma visão geral da arquitetu-
exemplo, ficar em um determinado país e ra da aplicação que será criada, veja o
obter dados via Web Services de um servi- esquema da Figura 1. Durante todo este
Guinther Pauli dor rodando em um outro canto do globo. tutorial, sempre que tiver uma dúvida de
guinther@devmedia.com.br) Tudo trafegado através de XML sobre o como a solução está sendo implementada
Atua no ramo de tecnologia e programação há HTTP. São as facilidades da distribuição e em que camada está sendo empregada
mais de 17 anos, é autor de mais de 100 artigos
Web aliadas ao RAD para Desktop. determinada tecnologia, consulte essa
publicados, 200 vídeo-aulas e do livro "Delphi
– Programação para Banco de Dados e Web". É Neste artigo vamos dar um passo a figura. Ela será nosso “mapa”.
Bacharel em Sistemas de Informação, Microsoft mais nessa proposta. Além de permitir O Web Service será criado em Delphi for
Certified: MCP, MCAD, MCSD.NET, Borland Certi- todas essas vantagens já citadas, vamos .NET e utilizará ADO.NET para comuni-
fied: Delphi 6, 7, 2005, 2006, Web e Kylix. Editor adicionar mais um elemento importante cação com o banco de dados (SQL Server
Geral das Revistas .net Magazine, ClubeDel-
na arquitetura: nossa mesma solução ou Firebird para este exemplo). Um cliente
phi, WebMobile (.NET) e Mr.Bool. Palestrante
em vários eventos pelo Brasil, como TechDay poderá ter clientes rodando em diferentes ASP.NET será a interface Web da solução,
SP,RJ,POA,BH, Web Days e todas as edições da plataformas. permitindo que a aplicação seja acessada
Borland Conference. Nossa solução será, obviamente, multi- por qualquer browser pela Internet.
6 ClubeDelphi - Integrando aplicações .NET, Win32 e Mobile com SOAP e Web Services
Uma aplicação Win32 em Delphi 7 aces- wnload o SQL Server Management Studio No Delphi, clique em File>New>Other
sará os mesmos dados, comunicando-se Express, front-end para trabalhar com o e na categoria Delphi for .NET Projects
com o Web Service através de SOAP pela SQL Server 2005. escolha ASP.NET Web Service Application.
Intranet ou Internet. E finalmente, uma Usando o Management Studio, crie um Dê o nome de “DataServer” para a nova
aplicação Mobile construída com Delphi novo banco de dados chamado CUSTO- aplicação e salve o arquivo ASMX como
for .NET e Compact Framework vai per- MERS e dentro dele crie uma nova tabela “customer.asmx”, alterando o seu nome
mitir acesso aos mesmos dados a partir também chamada CUSTOMERS. A estru- no Project Manager. O arquivo ASMX é
de Pocket PCs. tura dessa tabela deve seguir o modelo o que define o nosso Web Service. Cada
Usando as tecnologias abordadas neste mostrado na Tabela 1. Lembre-se de definir classe dentro de um ASMX representa
artigo, você poderá ao final: o campo chave como Identity para que os uma tabela do banco de dados nessa
• Acessar seu banco de dados a partir de valores sejam criados automaticamente. solução que estou propondo.
qualquer lugar da Internet, usando qual- Note que vamos criar uma tabela
quer um dos três tipos de cliente. Mesmo extremamente simples, para que possa- Nota: Na arquitetura proposta, o Web
a solução Desktop pode se conectar ao BD mos focar nossas atenções nos aspectos Service é a camada que será encarrega-
remotamente através da Internet, graças relativos à multicamadas, Web Services da do acesso e persistência dos dados,
ao SOAP; e multi-plataforma. Caso queira usar um camada também conhecida como DAL
• Criar aplicações distribuídas para a banco de dados maior e pronto, como o (Data Access Layer).
Internet. Você pode, por exemplo, cen- Northwind ou Employee, fique a vontade.
tralizar o banco de dados e servidor de A solução demonstrada neste exemplo Acesse o código do serviço, clican-
aplicação na matriz da empresa e distri- funciona perfeitamente com o Firebird, do na aba customer.pas logo abaixo no
buir as aplicações clientes para as filiais, caso queira utilizar esse banco de dados. editor, e renomeie a classe criada para
que terão acesso a dados em tempo real e No endereço para download deste artigo, “TCustomer”. Lembre-se de fazer essa
que se mantêm sempre atualizados, sem você encontra uma versão do mesmo alteração em todo o código já criado. Se
a necessidade de sincronização; aplicativo deste artigo usando o banco quiser, pode usar o recurso de SynchEdit
• Poderá ter sua aplicação oferecida de dados open source. para alterar todas as referências de uma
como um serviço: seus clientes podem Após criado o banco de dados, insira única vez, bastando para isso selecionar
acessar a aplicação através da Internet, alguns registros na tabela CUSTOMERS todo o código, clicar no botão e fazer
sem a necessidade de nenhuma con- para facilitar nossos testes quando for- a alteração (use o TAB).
figuração local na empresa, tudo fica mos construir a aplicação no Delphi.
configurado e armazenado no servidor; Métodos para manutenção
• Centralizar todo o acesso a dados em Construindo o servidor Nossa classe TCustomer vai prover os
uma única camada servidora, que também Essa será a camada responsável por métodos necessários para manipular os
contém as regras de negócio. Os aplicati- toda a comunicação com o banco de da- dados da tabela CUSTOMERS. Vamos
vos clientes compartilham essa mesma dos. Por ser baseada em XML Web Servi- começar implementando as operações
camada, garantindo independência de ces, essa camada poderá ser acessada por básicas de manutenção de clientes.
banco de dados e tecnologia de acesso. Por diferentes tipos de aplicação rodando em Declare os métodos da Listagem 1 na
exemplo, uma única modificação em um diferentes plataformas. Além disso, esse seção public da classe. Observe que os
SQL ou código de negócio deve ser feito acesso não precisa necessariamente ser métodos precisam ter o atributo WebMe-
apenas no servidor e automaticamente é feito em uma LAN, pois dados em XML thod para poderem ser acessados através
refletido nas aplicações clientes; e chamadas a métodos SOAP podem ser de SOAP. Aperte Shift+Ctrl+C e imple-
• Oferecer ao seu cliente três tipos de feitos através da Internet. mente os métodos conforme mostrado
acesso ao servidor. Poderá utilizar a in- na Listagem 2.
terface Web para acesso via browser. A Estamos usando ADO.NET para comu-
aplicação desktop pode ser usada tanto nicação com o SQL Server. O namespace
em ambiente Intranet quanto Internet. E System.Data.SqlClient deve ser importado
finalmente, os clientes podem usar dis- para termos acesso às classes necessárias.
positivos móveis como Pocket PCs para Em ambos os métodos, criamos um obje-
acessarem o mesmo servidor e BD. to de conexão (SqlConnection) e utilizamos
um SqlCommand para executar um deter-
Criando o banco de dados minado comando.
O primeiro passo será a criação do
banco de dados. Para este exemplo, vou Coluna Tipo
utilizar o banco de dados free SQL Server CustomerId Integer (chave)
2005 Express, que pode ser obtido no FirstName Varchar(50)
endereço indicado na seção Links. Nesse Company Varchar(50)
mesmo endereço você encontra para do- Figura 1. Arquitetura da solução Tabela 1. Campos da tabela CUSTOMERS
Edição 86 - ClubeDelphi 7
8 ClubeDelphi - Integrando aplicações .NET, Win32 e Mobile com SOAP e Web Services
metro que é a condição where do Select. Listagem 5. Métodos para atualização de DataSets
Edição 86 - ClubeDelphi 9
10 ClubeDelphi - Integrando aplicações .NET, Win32 e Mobile com SOAP e Web Services
Edição 86 - ClubeDelphi 11
12 ClubeDelphi - Integrando aplicações .NET, Win32 e Mobile com SOAP e Web Services
Edição 86 - ClubeDelphi 13
14 ClubeDelphi - Integrando aplicações .NET, Win32 e Mobile com SOAP e Web Services
Edição 86 - ClubeDelphi 15
D
esde a minha primeira experi- em conexões com o banco ou formata-
ência com o ASP.NET, um dos ções do controle. Temos ótimos artigos
controles que mais utilizei foi o publicados (edição 66), mostrando essas
DataGrid, pela sua facilidade em mostrar características, bem como temos vídeos
os dados no formato de tabela. Adicionar aulas no Portal do Assinante. Apenas
imagens, controles e formatações de indicaremos quando usar FbCommand
acordo com determinado campo, são as ou DataSet.
primeiras funcionalidades que deseja- Formate o DataGrid na opção que deseja
mos nesse controle. O DataGrid é muito e conecte ao banco de dados Employee que
customizável e neste artigo, veremos acompanha o Firebird. Você pode usar
algumas dicas úteis para a utilização do outro banco de sua preferência. Para este
mesmo em suas aplicações Web. exemplo, use os dados da tabela Customer
(selecione apenas alguns campos).
Adicionando controles Acesse a propriedade Columns do Data-
A funcionalidade de templates do ASP. Grid, adicione um campo do tipo Template
NET ajuda em muito a customização Column e clique em OK (Figura 1).
do DataGrid para a adição de controles. Clique com o botão direito no DataGrid
Luciano Pimenta Basta criar um coluna do controle do tipo e acesse a opção Columns[0]. Na seção
(lucianopimenta@clubedelphi.net) Template Column e adicionar os controles ItemTemplate, adicione um CheckBox.
é Técnico em Processamento de Dados, Editor necessários. Feche o editor, rode a aplicação e veja os
Técnico da Revista ClubeDelphi, .net Maga-
Neste exemplo, vamos trabalhar o Che- CheckBoxes adicionados ao DataGrid.
zine e WebMobile. Editor de vídeo aulas do
Portal DevMedia (www.devmedia.com.br). ckBox. Crie uma nova aplicação Web no Para saber as linhas que foram “sele-
Palestrante da 4ª edição da Borland Conference Delphi 2006. Na WebForm1.aspx adicione cionadas” com o CheckBox, adicione um
(BorCon). um DataGrid. Não vamos no concentrar botão e um TextBox na página. No Click do
Rode a aplicação, marque alguns Che- Listagem 1. Obtendo a linha com o CheckBox marcado
Edição 86 - ClubeDelphi 17
www.devmedia.com.br/clubedelphi/portal.asp
Listagem 5. Filtrando os dados do DataTable
Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a uma if e.CommandName = ‘Select’ then
vídeo aula de Luciano Pimenta que mostra como fazer um master/detail begin
{ Preenche o DataSet }
no DataGrid usando somente um controle DataGrid. FbDetail.Fill(dsMasterDetail, ‘Employee’);
www.devmedia.com.br/articles/viewcomp.asp?comp=2050 { Filtra os dados do DataTable com uma expressão }
dsMasterDetail.Tables[‘Employee’].DefaultView.RowFilter :=
‘DEPT_NO = ‘+DataGrid1.DataKeys[e.Item.ItemIndex].ToString;
{ Repassa para o DataGrid Details a fonte de dados }
DataGrid2.DataSource := dsMasterDetail.Tables[‘Employee’].DefaultView;
www.devmedia.com.br/clubedelphi/portal.asp DataGrid2.DataBind;
end;
Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a uma Listagem 6. Criando um método que retorne o nome do arquivo
vídeo aula de Luciano Pimenta que mostra como salvar imagens em
function TWebForm1.GetImagem(aSexo: string): string;
diretórios e exibi-las no DataGrid. begin
if aSexo = ‘M’ then
www.devmedia.com.br/articles/viewcomp.asp?comp=2853
Result := ‘~/imagens/M.bmp’
else if aSexo = ‘F’ then
Result := ‘~/imagens/F.bmp’
end;
Imagens de acordo com Listagem 7. Indicando a imagem de acordo com o campo SEXO
determinada condição var
Em uma tabela de clientes, certamente, aControl: Control;
begin
possuímos um campo indicador do sexo aControl := e.Item.Cells[2].FindControl(‘Image1’);
do mesmo. Que tal mostrar no DataGrid if aControl <> nil then
(aControl as Image).ImageUrl := GetImagem(e.Item.Cells[2].Text);
a listagem dos clientes e de acordo com o end;
Somatório no rodapé
Se o DataGrid possui um campo com
valores, certamente você gostaria de
mostrar um total no rodapé da página. E
essa técnica é bastante simples. Primei-
ramente, altere para True a propriedade
ShowFooter do DataGrid. Figura 4. Master/detail usando DataSet e filtro
Edição 86 - ClubeDelphi 19
Conclusão
Vimos neste artigo algumas dicas avan-
çadas para a utilização do DataGrid, um
Figura 7. Mostrando o somatório no DataGrid
dos controles mais utilizados em aplica-
ções ASP.NET.
Para quem quiser avançar, que tal co- www.devmedia.com.br/clubedelphi/portal.asp
D
urante todo o mês de Março até 2006, porém a página inicial, chamada
o início de Abril, a CodeGear, de Home pela CodeGear, contém um item
nova divisão da Borland criada bastante prático: os favoritos. Nesse item
para atender 100% dos desenvolvedores é possível adicionar os projetos que são
e responsável pelo desenvolvimento do mais utilizados no dia a dia e até criar
Delphi, JBuilder, C++ Builder e outras fer- grupos para o acesso rápido.
ramentas da empresa, esteve mostrando Após a abertura ou criação de algum pro-
as novidades para o ano. jeto é gravada uma referência do mesmo na
Entre elas estão o Delphi for PHP, fer- seção Recently Opened Projects e ao lado de
ramenta para desenvolvimento de aplica- cada projeto aparece o link (Make me a Fa-
ções com PHP, e a nova versão do Delphi vorite). Basta clicar nesse link que o mesmo
para Win32, o Delphi 2007. Estive no será adicionado a seção My Favorites.
evento e pude ver, testar e comprovar de Nessa última encontramos as opções
perto os novos recursos da ferramenta. Show Favorites e Manage Favorites. Clican-
Neste artigo veremos as principais novi- do em Manage Favorites observamos que
dades e faremos alguns exemplos pra de- ao centro da página inicial é mostrada
monstrar os novos recursos disponíveis. uma nova seção: Create New Favorites
Group e nela a opção Group Title. Para criar
Adriano Santos Nota: Para uma introdução ao Delphi um novo grupo basta digitar o nome dele
(artes@doiscliques.com) 2007, consulte a edição 84. e clicar em Create.
é desenvolvedor Delphi desde 1998. Professor Instantaneamente seu novo grupo
e programador PHP. Bacharel em Comunicação
Social pela Universidade Cruzeiro do Sul, SP. É
Favoritos aparecerá na seção Manage Your Favorite
colunista e membro da Comissão Editorial da Logo que iniciamos a ferramenta no- Projects logo acima. Desse momento em
revista ClubeDelphi. tamos uma leve semelhança com o BDS diante você poderá mover o atalho para
seu projeto apenas clicando em Move de projeto abertas clique em Build Events. ser utilizados e mesclados entre si para
e escolhendo o grupo que deverá ser Nesse item encontramos dois grupos criação de pequenas tarefas em lote.
incluído. de opções: Pre-Build e Post-Build. Cada Para as opções Compiler, Compiler Mes-
Ainda falando de favoritos, a seção um deles possui um campo para edição e sages, Linker e Directories/Conditionals foi
Recent Projects, à esquerda da página um botão. No primeiro deles digite “calc. criada a opção de guardar configurações
inicial, contém os últimos cinco projetos exe” e no segundo “notepad.exe”. Clique específicas para cada Build da aplicação.
abertos e ainda as opções Show Recent em OK e efetue a compilação do projeto Dessa forma você pode organizar melhor
Projects, Open Project, New Project e pressionando CTRL+F9. as opções do projeto e determinar como
Help, agilizando ainda mais a visua- Nesse ponto notará que a calculadora cada compilação será efetuada.
lização de últimos projetos, abertura, do Windows se abre, isso porque deter- Entre em Project>Options novamente e
criação e ainda acesso à ajuda do IDE minamos que a mesma seria aberta antes clique em uma das opções mencionadas.
(Figura 1). da compilação. Para continuar o processo Note que à direita surge um ComboBox
feche a calculadora e note que logo que chamado Build Configuration. Clicando
MSBuild, Vista e XP Themes o IDE encerra o Build o Bloco de Notas é nele podemos notar que há dois itens
E falando em facilidades ao desenvol- mostrado. criados: Release e Debug. Podemos criar
vedor, a CodeGear tratou de criar um Isso facilita a automatização de ta- nossos próprios itens.
excelente recurso que auxilia e ajuda a refas, já que no lugar da calculadora e Clique em Compiler e nas configurações
automatizar tarefas na hora do Build. do NotePad podemos incluir comandos desmarque as caixas Optimization e Gene-
Chamado de MsBuild, o recurso dá a que serão executados antes e depois da ration XML documentation ou marque e
oportunidade ao desenvolvedor de compilação. desmarque outras opções a sua escolha.
determinar tarefas pré (Pre-build) e pós Em Compiler Messages retire alguns War-
(Post-build) compilação. Vamos fazer Nota: Observe que tanto no pré quanto nings do grupo principal e em Directories/
um exemplo simples para entendermos no pós build o Delphi 2007 fica aguar-
melhor como funciona. dando até que a tarefa seja efetuada.
www.devmedia.com.br/clubedelphi/portal.asp
Crie uma nova aplicação no Delphi
usando o menu File>New>VCL Forms Volte ao Project>Options e clique agora Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a uma
Application – Delphi for Win32 e logo em no botão Edit da opção Pre-Build. Note que vídeo aula de Adriano Santos que mostra como utilizar as configurações
de Build no Delphi 2007.
seguida clique em Project>Options ou pres- a tela que se abre contém uma série de
www.devmedia.com.br/articles/viewcomp.asp?comp=5349
sione CTRL+SHIFT+F11. Com as opções comandos pré-configurados que podem
Edição 86 - ClubeDelphi 23
se abre adicione três itens e modifique a O código identifica o RadioButton cli- Personalizado”. Adicione novos itens e
propriedade Caption de cada um para que cado e configura a propriedade Position configure a seu gosto.
fique como “Item1”, “Item2” e “Item3” da ProgressBar de maneira que fique Após as devidas configurações adicione
respectivamente. com 10, 50 e 100 por cento preenchida. um Button no formulário e o faça a cha-
Retornando ao componente abra a Vamos a mais um exemplo agora usando mada ao método Execute do componente.
propriedade Flags e marque como True a propriedade Buttons do componente Execute a aplicação e clique no botão
a opção tfShowProgressBar. Dessa forma em questão. para executar a caixa de diálogo. Veja na
adicionamos três RadioButtons e um Pro- Clique duas vezes na propriedade Figura 5 a caixa de diálogo em execução
gressBar na caixa de diálogo. e insira um novo item no editor que no Windows Vista.
No evento OnRadioButtonClicked do se abre. No item criado configure sua
TaskDialog digite o código da Listagem 1. propriedade Caption para “Meu Botão Nota: Os componentes, obviamente,
serão mostrados apenas se você estiver
Listagem 1. Código de atualização da ProgressBar no TaskDialog trabalhando com o Windows Vista.
www.devmedia.com.br/clubedelphi/portal.asp
Edição 86 - ClubeDelphi 25
Figura 8. Exemplo de tela em VCL for Web Figura 9. Aplicação Web utilizando AJAX
Edição 86 - ClubeDelphi 27
N
a primeira parte deste artigo, co- são por natureza stateless, o que significa
meçamos a construir nosso dis- que nenhuma informação é persistida entre
co virtual, um aplicativo onde o as requisições processadas. Mas o servidor
usuário poderá enviar arquivos para um precisa “lembrar” dos identificadores ge-
servidor remoto, listá-los e recuperá-los rados, para poder comparar com os forne-
posteriormente. Criamos a interface grá- cidos pelos clientes. Como conseguir isso?
fica do cliente, vimos um pouco sobre au- Uma alternativa é controlar sessões.
tenticação com SOAP, exceções remotas, A implementação do protocolo SOAP
envio e recebimento de SOAP Headers e disponível com o Delphi não fornece ne-
como rastrear as chamadas ao servidor. nhum mecanismo de persistência nativo.
Nesta edição, veremos gerenciamento Dessa forma, precisamos criar um. Atente
de sessão, envio de arquivos via SOAP, então para um detalhe importante: nosso
compactação e muito mais. Web Service reside em uma DLL ISAPI,
Michael Benford que é carregada pelo IIS na primeira re-
(michael@devmedia.com.br) Gerenciamento de sessão quisição recebida pelo servidor.
é Acadêmico do curso de matemática da Uni- O mecanismo de autenticação que imple- Essa DLL fica no contexto do processo
versidade Federal Fluminense e desenvolvedor
Delphi e .NET da QSi, Qualidade em Sistemas
mentamos funciona, mas não está completo. DLLHost.exe, também conhecido como
de Informação. Programa em Delphi há 5 anos, Ele retorna sempre o mesmo identificador COM Surrogate. E ela ficará lá, em memó-
desenvolvendo aplicações cliente/servidor, mul- de sessão, definido de forma hard-coded no ria, até ser descarregada, como você fez
ticamadas, Web, utilitários de uso geral, com- código do servidor, o que não é, obviamente, algumas vezes ao longo desse artigo. Mas
ponentes, experts e aplicativos não-comerciais. uma solução segura. Precisamos gerar um Web Service não são statesless?
É colunista do portal da DevMedia, articulista e
membro da comissão editorial da revista Clube-
valor que seja único entre todos os usuários Sim, são! Abra novamente uDiscoVirtu-
Delphi. Palestrante da primeira edição do Deve- que podem vir a se autenticar. alImpl e observe a classe TDiscoVirtual.
loperís Webdays e da BorCon Brasil 2006. Aqui temos um problema: Web Service Esse é o nosso Web Service. É essa classe
Edição 86 - ClubeDelphi 29
Edição 86 - ClubeDelphi 31
tipo de dado através desse método, Listagem 7. Evento OnClick do botão Procurar
basta serializá-lo. Em alguns casos,
procedure TfrmMain.btnBrowseForFileClick(Sender: TObject);
porém, pode não ser tão fácil realizar var
essa conversão. Para enviar um DataSet, FileName: string;
begin
por exemplo, há uma forma muita mais if PromptForFileName(FileName,
‘Todos os arquivos|*.*’, ‘’,
simples e pronta. ‘Procurar arquivo’) then
edtFileName.Text := FileName;
Se o leitor já tiver alguma experiência end;
com SOAP, deve conhecer a interface
IAppSOAPServer. É ela que torna possível
conectar um ClientDataSet a um provider po BLOB do arquivo. Isso é proposital, fra grandes inclusões e/ou exclusões, para
remoto, exibir e atualizar seus dados. Isso pois não queremos carregá-lo para a evitar efeitos visuais, como flickering.
é feito através do método remoto GetRe- memória, sobrecarregando desnecessa- Depois, como de costume, preparamos
cords, que retorna um OleVariant. riamente o servidor. o cabeçalho da mensagem com Prepa-
E se você já observou, a propriedade Descarregue a DLL no IIS e recompile o reHeader e invocamos o método remoto
Data da classe TClientDataset é do mesmo projeto. Selecione o projeto DiscoVirtual- GetFileList, atribuindo o seu retorno dire-
tipo (acredite, não é mera coincidência). Client e insira um ClientDataSet no formu- tamente à propriedade Data do ClientDa-
Dessa forma, é perfeitamente possível lário. Chame-o de “cdsFiles”. Vá então para taset, preenchendo-o, dessa forma.
trafegar todo o conteúdo de um DataSet a seção private da classe do formulário e crie Em seguida, iteramos pelos registros
através desse tipo de dado. um método chamado “DoGetFileList”. recebidos e os adicionamos ao ListView.
Voltando para a prática, selecione o pro- Pressione Ctrl+Shift+C e digite o código Há duas funções no código que merecem
jeto do servidor, abra uDiscoVirtualImpl e da Listagem 9. ser comentadas: GetFileType e AddFileIcon.
localize o GetFileList. Codifique-o como Vamos entender o que fizemos. A A primeira recupera a descrição do tipo
mostrado na Listagem 8. primeira linha chama o BeginUpdate, da do arquivo, baseado em sua extensão.
Esse método é auto-explicativo, exceto propriedade Items da classe TListView. Já a segunda extrai o ícone do programa
por um detalhe: estamos fazendo uso Juntamente com EndUpdate, ele deve ser vinculado à extensão informada e o inclui no
do cdsFileSelect, que não possui o cam- executado sempre antes que o controle so- ImageList, a fim de ser utilizado no ListView
Edição 86 - ClubeDelphi 33
Isso removerá a barra de títulos da Listagem 11. Excluindo arquivos do banco de dados
janela. Salve tudo e vá para o formulário
procedure TDiscoVirtual.DeleteFile(const FileName: string);
principal da aplicação. Adicione então var
SessionID: string;
dois métodos à seção private da classe begin
CheckHeader(SessionID);
TfrmMain, chame-os de “ShowProgres-
sDialog” e “HideProgressDialog”, e with TDataAccess.Create(nil) do
try
implemente-os (Ctrl+Shift+C) como cdsFileSelect.Params.ParamByName(
‘ID_USUARIO’).AsInteger := Sessions.GetUserID(SessionID);
mostrado na Listagem 13. cdsFileSelect.Open;
Muito bem. Implemente agora os even- if cdsFileSelect.Locate(‘NOME_ARQUIVO’, FileName, [loCaseInsensitive]) then
tos OnPostingData e OnReceivingData, begin
cdsFileSelect.Delete;
do HTTPRIOEx, como mostrado na cdsFileSelect.ApplyUpdates(0);
end;
Listagem 14. finally
Volte ao OnClick do Enviar e adicione as Free;
end;
linhas destacadas na Listagem 15. end;
procedure TfrmMain.HideProgressDialog;
begin
Self.Enabled := True;
frmProgress.Hide;
end;
e pressione Ctrl+Enter) e localize o Receive. projeto ou ao Library Path do IDE. Comprimindo os pacotes SOAP
Adicione a ele as seguintes variáveis: transmitidos
TotalSize, TotalRead: DWORD; Dica: Para entender melhor essas alte- Os dados transmitidos através do proto-
rações no código do SOAP, consulte a colo SOAP passam por processos de seria-
Nota: Faça uma cópia dessa unit antes seção Links. lização e desserialização. Em nossa aplica-
de realizar qualquer alteração. ção, os arquivos binários são expandidos
Em seguida, desça algumas linhas Listagem 14. Exibindo o progresso de envio e recebimento
e localize o comentário Extract Mime-
procedure TfrmMain.HTTPRIOExHTTPWebNode1PostingData(Sent, Total: Integer);
Boundary. Adicione então acima dele o begin
frmProgress.StatusLabel.Caption := Format(
código a seguir: ‘Enviando %d de %d kbytes’, [Sent div 1024, Total div 1024]);
frmProgress.Progressbar.Position := Trunc(Sent/Total * 100);
Index := 0;
if Sent = Total then
HttpQueryInfo(Pointer(Context),
frmProgress.StatusLabel.Caption := ‘Salvando arquivo no banco de dados...’;
HTTP_QUERY_CONTENT_LENGTH or
Application.ProcessMessages;
HTTP_QUERY_FLAG_NUMBER,
end;
@TotalSize, Len, Index);
TotalRead := 0;
procedure TfrmMain.HTTPRIOExHTTPWebNode1ReceivingData(Read, Total: Integer);
begin
frmProgress.StatusLabel.Caption := Format(
Por último, localize o repeat, mais abai- ‘Recebendo %d de %d kbytes’, [Read div 1024, Total div 1024]);
frmProgress.Progressbar.Position := Trunc(Read/Total * 100);
xo, e substitua as linhas: if Read = Total then
frmProgress.StatusLabel.Caption := ‘Salvando o arquivo no disco...’;
if Assigned(FOnReceivingData) then Application.ProcessMessages;
FOnReceivingData(Size, Downloaded) end;
Edição 86 - ClubeDelphi 35
compressão Zlib, que acompanha o Delphi. LogMessages(False, MethodName, TempStream, CompressedSize, OriginalSize);
finally
Para entender como os métodos Com- TempStream.Free;
DecryptedStream.Free;
pressStream e DecompressStream funcio- end;
nam, não deixe de olhar esse arquivo. As end;
Criptografia de pacotes
Os dados trafegados entre o cliente e o
servidor são transmitidos em texto puro,
sem nenhuma proteção. Se você observou
o trace para o método Login, deve ter
notado que a senha do usuário está lá, Figura 5. Barra de progresso em ação
Conclusão
Esse artigo foi extenso, mas o assunto
assim o exigiu. Espero ter conseguido pas-
sar para o leitor algumas técnicas não tão
óbvias sobre os Web Services criados com o Figura 6. Comprimindo os pacotes enviados e recebidos
Edição 86 - ClubeDelphi 37
N
este artigo veremos como é pela segunda alternativa. Descompacte
simples, fácil e rápido montar o arquivo baixado, crie um novo projeto
um projeto que imprima dados em Delphi, copie todos os arquivos da
em uma impressora matricial usando as pasta src do arquivo baixado e adicione-
classes do componente VDO, que é fre- os ao projeto.
eware e open-source. O componente VDO Alguns formulários automaticamente fi-
tanto imprime em impressoras matriciais carão no Auto-create do projeto, transfira-
como em impressoras de Jato. os colocando no Available forms, são eles:
Em nosso exemplo mostraremos como frmVDOPreview, frmVDOPrinterTypeDlg e
imprimir em uma impressora matricial frmVDOPrintProgress. O único formulá-
usando a classe VDODmPrinter, para rio que ficará na criação automática é o
impressoras Jato basta usar a classe formulário principal (Figura 1).
VDOCaPrinter. Como o VDO não envia os
dados direto à porta, envia para o Spool Propriedades
do Windows, não teremos problemas com A seguir temos as principais proprie-
impressoras USB ou em Rede. dades do VDO.
• CurrentLine: Integer - Leitura do núme-
Rodrigo Otto Mostaert Criando um projeto e usando as ro da linha atual de impressão dentro da
(otto3d@gmail.com) classes página;
é Analista/Desenvolvedor Delphi/C#/C++. Tra- Primeiro temos que baixar o compo- • CurrentPage: Integer - Leitura do núme-
balha com desenvolvimentos Win32/.NET com
nente no site indicado na seção Links, ro da página atual de impressão;
banco de dados MySQL e Firebird em projetos
Cliente/Servidor/n-tier. Especializado em siste- poderemos instalar o componente ou • IsPrinting: Boolean - Leitura do estado
mas WMS e possui diversos cursos oficiais Bor- adicionar os fontes dele ao projeto e da impressora. Retorna True se a impres-
land pela Facilit em Recife (www.facilit.com.br). instanciar as classes na mão, faremos sora estiver imprimindo ou False se não
Edição 86 - ClubeDelphi 39
Métodos
Os métodos principais são:
• Abort: Procedure - Sua função é abortar
o trabalho de impressão;
• BeginDoc: Procedure - Sua função é
iniciar o trabalho de impressão;
• EndDoc (AEjectPage: Boolean = True):
Procedure - Sua função é finalizar o traba-
lho de impressão. O parâmetro EjectPage
indica se a página deve ser ejetada após
a finalização. Se AEjectPage for True, a
impressora será orientada a realizar um
Eject antes de finalizar o trabalho de
impressão. O valor default do parâmetro
AEjectPage é True. O resultado esperado
Figura 3. Preview do relatório usando o VDO
de AEjectPage := True depende diretamen-
te do ajuste correto da propriedade Lines
de TVDODmPaper;
• NewLine (ALines: Integer = 1): Procedure -
Sua função é avançar o número de linhas
determinadas pelo parâmetro ALines.
Caso não seja informada a quantidade
linhas o valor default é 1;
• NewPage (APages: Integer = 1): Procedure
- Sua função é avançar o número de pági-
nas determinado pelo parâmetro APages.
Caso não seja informada a quantidade de
páginas o valor default é 1. O resultado es-
perado do NewPage depende diretamente
do ajuste correto da propriedade Lines de
TVDODmPaper.
• Print (AColumn: Integer; AText: String;
ALine: Boolean = False): Procedure - Sua
função é efetuar a impressão na coluna
determinada pelo parâmetro AColumn
do texto determinado pelo parâmetro
AText. O ALine é opcional e é o indicador
de que a linha foi finalizada e que a im-
pressora deve avançar para a próxima. Ao
informar o parâmetro ALine como True, Figura 4. Preview do relatório usando o VDO
não é necessária a chamada posterior ao
NewLine, a não ser que o salto de linhas
adicionais seja desejado. coloque dois botões (Figura 2). banco de dados.
No evento OnClick do Gerar relatório sem
Colocando a mão na massa banco faremos um exemplo sem acesso a Mostrando dados do banco
Já temos nosso projeto pronto para mon- banco, com o código da Listagem 1. No evento OnClick do Gerar relatório com
tar um relatório para imprimir. O VDO dá O código da listagem anterior adiciona banco faremos um exemplo acessando o
uma boa facilidade na hora de programar, várias linhas ao objeto de impressão com banco de dados do BDE (tabela Employee)
devido a sua simples codificação e um várias formas de formatação, como: tipo com o código da Listagem 2. Você pode
resultado bastante satisfatório na hora da fonte, alinhamento, tamanho, estilo da adaptar o exemplo para qualquer tecno-
de imprimir. Chega de conversa e vamos letra etc. A Figura 3 mostra o resultado logia de acesso a dados e banco, como o
ao que interessa. No formulário principal final do nosso exemplo sem acesso a um Firebird ou SQL Server.
{ Enquanto não chegar no último registro imprime no relatório } - TVDOCaPrinter: Destinado a impressão em
while not Qry.Eof do impressoras jato de tinta e laser. Utiliza inter-
begin
{ Na variável Linha será feito a concatenação namente o objeto TPrinter da VCL em con-
dos dados pra que saiam formatados } junto com o Canvas para efetuar a escrita.
Linha := Format(‘%6.6d’,
[Qry.FieldByName(‘empno’).AsInteger])+’ | ‘+ Utiliza o driver instalado no Windows e obe-
CompletaComBranco(FormatFloat(‘#,###,##0.00’, Qry.FieldByName(‘salary’).AsFloat), 11, dece a todas as configurações de perfil do
lEsquerdo)+’ | ‘+ Qry.FieldByName(‘firstname’).AsString;
Print(0, Linha, True); usuário e da impressora. Pode ser utilizado
{ Próximo registro } em impressoras matriciais, mas a impressão
Qry.Next;
end;
é consideravelmente mais lenta;
FreeAndNil(Qry);
EndDoc; - TVDODmPrinter: Destinado a impressão
end;
FreeAndNil(VDOImpressao); em impressoras matriciais. Efetua gravação
end; do documento no spool de impressão do
Windows. Não envia os dados diretamente
às portas de impressão, e por esse motivo
pode ser usado, sem nenhum problema,
com impressoras USB e de rede. Utiliza o
padrão Epson de caracteres de controle da
impressora (Escapes).
O código da listagem anterior cria uma tendo como objetivo mostrar como é sim-
conexão com o banco dbdemos e faz uma ples, rápido e fácil fazer um relatório para
consulta na tabela employee trazendo todos imprimir em impressora matricial em
os dados. Criamos um laço e adicionamos Delphi usando os componentes VDO.
os registros dentro do objeto com uma Recomendo o uso desses componentes, Figura 5. Componentes instalados no IDE
formatação simples de cada linha um re- pois, é realmente muito rápido a impres-
gistro. A Figura 4 mostra o nosso exemplo são usando as classes do VDO, basta
acessando um banco de dados. pesquisar as propriedades e eventos a Links
fundo do mesmo e olhar os exemplos em
Site do VDO
Conclusão anexo ao componente. vdo.sourceforge.net
O exemplo desenvolvido é bem básico, Bons estudos e até a próxima!
Edição 86 - ClubeDelphi 41
E
ste artigo vai mostrar como é Criando o projeto Web
possível aproveitar relatórios do Como a idéia é utilizar relatórios já
QuickReport para serem exibidos desenvolvidos, vamos adicionar as units
na Web, através da exportação para PDF. que contenham relatórios ao nosso projeto.
Com isso, você não precisará reconstruir Também teremos uma página inicial, que
seus relatórios existentes para que pos- funcionará como um menu, exibindo to-
sam ser disponibilizados na Web, po- dos os relatórios disponíveis ao usuário.
dendo ser acessados a partir de qualquer Para criar uma aplicação WebBroker
lugar da Internet. acesse o menu File>New>Other e na aba
New escolha o ícone Web Server Applica-
Instalações necessárias tion (Figura 1).
Primeiramente precisamos ter a paleta Na tela seguinte escolha o tipo de apli-
de componentes do QuickReport dispo- cação CGI Stand alone executable. Se você
nível no IDE do Delphi 7. Se você não tem interesse em saber as diferenças des-
está com a paleta visível, acesse o menu ses tipos de aplicação, pode acessar um
Component>Install Packages. Clique no artigo de minha autoria, através do link:
Fabrício Desbessel botão Add e, dentro do diretório Bin do www.devmedia.com.br/articles/viewcomp.
(fabricio@fabricio.pro.br) Delphi, escolha o arquivo dclqrt70.bpl. asp?comp=1652. Salve a unit e para o pro-
é professor de Linguagem de Programação do Como o QuickReport não possui um
Curso Técnico em Informática do Colégio Fre- componente ou método para exportar o www.devmedia.com.br/clubedelphi/portal.asp
derico Jorge Logemann de Horizontina/RS e relatório em PDF, será necessário utilizar
da FAHOR Faculdade Horizontina. Delphiano de Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a
coração está sempre disposto a provar que com
o componente ExportQR. A instalação é uma vídeo aula de Luciano Pimenta que mostra como trabalhar com o
o Delphi sempre teremos a melhor solução. Site simples (o componente está para down- ExportQR.
www.fabricio.pro.br. load com os fontes do artigo). www.devmedia.com.br/articles/viewcomp.asp?comp=3130
Adicionando os relatórios
Nesse momento já é possível adicio-
nar ao projeto as units dos relatórios
existentes. Para tanto, clique no botão
Add file to project e selecione as units que
contenham relatórios, desenvolvidos com
o QuickReport.
Depois de adicionar as units ao projeto,
é necessário certificar-se que a aplicação
Figura 1. Criando o projeto Web Server Application
não criará os formulários na sua inicia-
lização, o que poderá gerar uma exceção.
No menu Project>Options>Forms coloque Listagem 1. Declarando variáveis ao projeto
todos os formulários de relatórios para uses Forms;
...
Available forms (direita), deixando so- Classes: Array[1..5] of TFormClass;
mente o WebModule1 no Auto-create forms Formularios: Array[1..5] of TForm;
Menu: Array[1..5] of string;
(esquerda). Qtde: Integer;
Link: string;
Nota: É importante salientar que nes- Listagem 2. Informando os relatórios disponíveis no OnCreate
te exemplo, os formulários que con-
procedure TWebModule1.WebModuleCreate(Sender: TObject);
tenham os relatórios do QuickReport begin
Classes[1] := TrelEmpregados;
possuam os componentes de acesso a Formularios[1] := relEmpregados;
Menu[1] := ‘Listagem de Empregados’;
dados no próprio relatório. Classes[2] := TrelPaises;
Formularios[2] := relPaises;
Menu[2] := ‘Listagem de Países’;
Nesse momento precisamos dizer ao Qtde := 2;
end;
WebModule1 para utilizar as units dos
formulários que contenham relatórios. Listagem 3. Código HTML do PageProducer ppMenu
Para fazer isso acesse o menu File>Use
<html>
Unit, selecione os formulários e pressio- <head><title>Clube Delphi - Exportação PDF</title></head>
<body>
ne OK. <p><font color=”#000000”><strong>
Para que o WebModule saiba quais os <font size=”3” face=”Verdana, Arial, Helvetica, sans-serif”>
Sistema Relatórios na WEB - Clube Delphi</font>
relatórios estão disponíveis, vamos criar </strong></font></p><p>
<font size=”2”><strong><font color=”#000000” face=”Verdana, Arial, Helvetica, sans-serif”>
arrays para os formulários, classes, op- Menu de Relatórios</font>
</strong></font></p>
ções de menu, bem como variáveis para a <hr/>
quantidade de relatórios e link dos PDFs <p><#menu></p>
</body>
gerados. Acesse o código do WebModule1 </html>
Edição 86 - ClubeDelphi 43
http://localhost/scripts/Relatorios.exe
Será mostrada uma tela semelhante a informando o código da Listagem 5 na a função Exporta, conforme o seguinte
Figura 2. propriedade HTMLDoc. código:
A idéia do ppRelatorio é redirecionar a
function Exporta(Classe: TFormClass;
Exportando para PDF página para o PDF exportado, através Formulario: TForm): string;
Para exportar os relatórios escolhido no de uma função JavaScript. Em tempo de
menu, crie uma nova ação no WebModule execução vamos alterar a tag <#rel> para Pressione SHIFT+CTRL+C para que o
(clicando duas vezes sobre o mesmo) e o caminho do PDF. Para isso, no evento Delphi implemente a estrutura da função
depois no Add New. Configure a proprie- OnHTMLTag do ppRelatorio, adicione o e codifique-a conforma é apresentado na
dade Name para “waiRelatorio” e PathInfo seguinte código: Listagem 6.
para “/Rel”. A função será responsável por criar o
if TagString = 'rel' then
Adicione ao WebModule um ExportQR. ReplaceText := 'http://localhost/'+Link+'.PDF'; formulário em tempo de execução, pre-
Coloque também mais um PageProducer, parar o relatório e exportá-lo. Você pode
alterando seu Name para “ppRelatorio” e Na seção private do WebModule, declare exportar para qualquer diretório que
Edição 86 - ClubeDelphi 45
A s metodologias de desenvolvimento
foram criadas visando coordenar
esforços, estabelecer ordem, padrões e
que visam facilitar o trabalho em grupo
e, mais do que isso, garantir que o grupo
trabalhe de forma correta e gere ao final
técnicas. Entre as melhores metodologias do processo um produto de qualidade.
estão O Guia do Conjunto de Conhecimentos
Fernando Sarturi Prass em Gerenciamento de Projetos (PMBOK) do Divisão de tarefas
(fernando@dotbr.com.br) Project Manager Institute (PMI), o Capabi- O fator fundamental para que o trabalho
é Mestre em Ciência da Computação pela UFSC. lity Maturity Model (CMM) e o modelo em equipe obtenha sucesso é a correta
Professor da Universidade Luterana do Brasil brasileiro desenvolvido pela SOFTEX ba- divisão das tarefas. A forma mais correta
(ULBRA) nos campus de Santa Maria e Cacho-
seado no CMMI chamado de Melhoria de a ser seguida na divisão é tentar atender a
eira do Sul. Sócio-diretor da dotBR Soluções em
TI (www.dotbr.com.br), empresa que presta Processo do Software Brasileiro (MPS.BR). duas afirmações: cada um deve fazer aquilo
serviços de desenvolvimento de sistemas e de Por essas metodologias serem bastante que sabe (assim não haverá necessidade
consultoria em Bancos de Dados e Metodolo- completas, o seu uso, muitas vezes, se de tempo de aprendizado) e sempre que
gias de Desenvolvimento. torna difícil em pequenas empresas ou possível deve fazer sozinho (a divisão de
pequenos grupos de programadores. uma tarefa entre duas ou mais pessoas,
Cristiano Caetano
Entretanto, por menor que seja o grupo muitas vezes obriga um dos membros
(c_caetano@hotmail.com)
é certificado pela Associação Latino-Americana ou a empresa, o desenvolvimento de da equipe a ficar parado esperando pela
de Teste de Software e autor do livro CVS: Con- sistemas em equipe requer uma série de finalização do trabalho do outro).
trole de Versões e Desenvolvimento Colaborativo cuidados para que o trabalho de um não Por exemplo, suponha um determinado
de Software. Com 10 anos de experiência, já tra- seja refeito ou alterado erroneamente por sistema que usa funções que estão num
balhou na área de qualidade e teste de software
outro membro do time. Web Service. Pode-se designar um pro-
para grandes empresas como Zero G, DELL e HP
Invent. O autor também pode ser contatado em Este artigo mostrará uma série de gramador experiente para codificar as
spaces.msn.com/softwarequality. pequenas dicas e ferramentas, muitas classes e exportá-las como Web Services
delas retiradas dos modelos já citados, e passar a construção das telas e dos mó-
dulos locais (processos bem mais simples) Para ganhar tempo, sem perder qualida-
para programadores com menor experi- de, os autores aconselham que a equipe
ência ou até mesmo para estagiários. faça ao menos os seguintes documentos:
A divisão correta das atividades do pro- • Estrutura Analítica do Projeto (EAP);
jeto traz benefícios como a economia com • Casos de uso e Diagramas de Caso de
programadores, pois não é necessário Uso (Use Cases);
manter um time inteiro de profissionais • Diagramas de Classes;
experientes, e facilidades no controle de • Modelo de Dados.
versão e na gerência da segurança (no
exemplo dado, os profissionais com me- A Estrutura Analítica do Projeto (Figura
nor experiência não precisariam ter aces- 1), também conhecida como Work Breakdo-
so aos fontes das classes por exemplo). wn Structure (WBS), é uma estrutura em
Para finalizar, é preciso que os membros forma de árvore que organiza e define o
da equipe saibam exatamente quem faz o escopo total do projeto. É uma ferramenta
que no projeto. Esse artigo traz uma seção de decomposição do trabalho, cujo obje-
intitulada Matriz de Designação de Respon- tivo principal é identificar os itens que
sabilidades que trata sobre o assunto. serão desenvolvidos (PMBOK, 2004).
Aqueles que estão habituados ao uso de
Documentação da Análise softwares de gestão de projetos, como o
O projeto de um novo software começa Project ou Open WorkBench não encon- Figura 1. Parte da EAP de um projeto de desenvolvimento
sempre pela análise. Bem, ao menos de- trarão nenhuma dificuldade para montar
veria começar! É por essa razão que se diz uma. Maiores informações sobre a EAP informações contida nele.
que a documentação é a base de qualquer podem ser obtidas em en.wikipedia.org/ Existem motivos que praticamente obri-
trabalho de desenvolvimento. wiki/wbs. gam a documentação do código-fonte,
Os softwares possuem um ciclo de vida Os Diagramas de Caso de Uso e de vale destacar os seguintes:
com constantes alterações. A documen- Classes não serão explicados aqui por • Evita o retrabalho (exemplo: um pro-
tação é um importante instrumento a ser serem amplamente conhecidos pelos gramador escrever uma classe ou função
utilizado para manter o histórico, pois desenvolvedores, além do mais, esse não já desenvolvida por outro);
conta toda a história do aplicativo, desde é o foco do artigo. Maiores informações • Diminui o número de interrupções
sua concepção, passando pelo desenvol- sobre eles pode ser obtidos em Spínola e para sanar dúvidas (ao invés de pergun-
vimento e chegando até o acompanha- Araújo (2006) na seção Links. tar para quem escreveu determinado
mento da manutenção. método quais parâmetros que ele aceita,
Pode parecer desnecessário fazer tais Documentação do código-fonte basta que olhe o documento);
afirmações já que elas são de senso co- Embora essa seção também trate sobre • Mantém o histórico do projeto em todo
mum, mas muitas vezes essa fase não é documentação, ela foi separada da anterior o seu ciclo de vida;
concluída em sua plenitude para que sobre por ser a fase de desenvolvimento mais • Facilita a substituição e a incorporação de
mais tempo para a fase de programação. longa do projeto, logo é nela que estão con- membros à equipe de desenvolvimento;
Entretanto para que a documentação centrados os maiores esforços da equipe. • Facilita a visualização do tamanho do
possa cumprir o seu papel, ela necessita Pode-se afirmar que a documentação produto, uma vez que todos os módulos
ser elaborada durante cada uma das fa- do código-fonte é um dos artefatos que podem ser reunidos em um único docu-
ses de desenvolvimento e ser atualizada tornam o desenvolvimento e manutenção mento;
sempre que houver uma modificação, de sistemas, seja ele individual ou coleti- • Acrescenta qualidade ao produto final
independente da metodologia adotada vo, mais simples e eficiente. entregue ao cliente.
pela empresa. Deve ser vista como uma O problema é que normalmente a docu-
ferramenta de auxílio a ser utilizada por mentação do código não é feita ou, quando Além dos motivos citados, existe um que
todas as pessoas envolvidas no processo feita, não é atualizada. As razões (para não é o principal: facilita a manutenção do sis-
e não como uma obrigação a mais. escrever as desculpas) mais comuns são: tema. No site da SoftConsult (www.softcon-
Para que o processo de documentação falta de tempo, indisposição ou até mesmo sult.se) tem um provérbio que diz: If it was
não se torne um entrave ao andamento o desconhecimento de suas vantagens. hard to write, it should be hard to read ou
do projeto é preciso que a equipe escolha Por causa da complexidade e prin- algo como se foi difícil codificar, deve ser
corretamente que tipos de documentos cipalmente da alta mutabilidade do mais difícil ler e entender o código.
serão gerados na fase de análise. Não é código-fonte, não basta apenas elaborar Essa frase define bem a dificuldade
necessário dizer que o ideal seria gerar o o documento inicial, é preciso também encontrada pelos programadores no
máximo de documentos úteis possíveis, que ele acompanhe todas as manuten- momento em que são obrigados a dar
entretanto a realidade (leia-se: a falta de ções e alterações efetuadas no sistema, manutenção num determinado sistema.
tempo) não permite que isso seja feito. para que seja mantida a integridade das Entretanto não basta que exista um do-
Edição 86 - ClubeDelphi 47
Edição 86 - ClubeDelphi 49
de um conjunto de desenvolvedores. tem crescido à medida que as aplicações unidade, entre outros.
Por essa razão, sem uma ferramenta ou tornaram-se mais complexas. Esse cres- 1
metodologia adequada, esse controle torna- cimento tem sido exponencial em virtude Conclusão
se extremamente complexo e improdutivo. da nossa dependência cada vez maior de Esse artigo trouxe uma série de dicas e 1
É importante ressaltar que o CVS fornece aplicativos que controlam atividades de ferramentas, algumas delas baseadas em 1
uma abordagem consistente, controlada missão crítica; seja num hospital, na bolsa metodologias e outras obtidas na vivên-
e flexível para gerenciar a evolução das de valores ou no ônibus espacial. cia profissional dos autores, que visam 1
mudanças, garantindo a integridade e a ras- Em termos práticos, isso significa que facilitar o desenvolvimento em equipe.
treabilidade dos arquivos modificados. cada vez mais cedo as empresas estão Procurou-se mostrar técnicas para todas 1
Entre as motivações para usar o CVS, introduzindo atividades de qualidade de as fases do ciclo de vida de um projeto de 1
pode-se destacar as seguintes: software nas diversas fases do desenvol- desenvolvimento de software, da análise
• É uma ferramenta open source, madura vimento. Mesmo os bons softwares são aos testes, dando um maior destaque evi- 1
sidade de garantir a qualidade do pro- que existem tantos defeitos? Poderíamos PMBOK - Guia do Conjunto de Conhecimentos em
1
duto que está sendo entregue ao cliente. escrever um livro para tentar responder Gerenciamento de Projetos. Project Management Institute
1
Desenvolver software de qualidade não a essa pergunta e, ainda assim, talvez (PMI). 3ª ed. 2004.
é mais um requinte para poucos, trans- não seriam identificadas todas as causas
SPÍNOLA, Rodrigo Oliveira. ARAÚJO, Marco Antônio P. UML na
formou-se num fator de competitividade possíveis. No entanto, pode-se elencar 1
Prática: Construindo Diagramas de Classes. SQL Magazine,
num mercado cada vez mais exigente. algumas causas como as mais prováveis,
ed. 34, 2006.
O filósofo Nietzsche, no século passado, como as destacadas abaixo:
1
alertava: Com o aumento da competição, a • Falta de comunicação entre os mem-
1
qualidade se torna mera propaganda. Vence bros da equipe; Links
aquele que melhor engana. Essa receita é • A complexidade do software;
Home page do TortoiseCVS
muito simples e fácil de seguir, todavia, • Erros de programação; www.tortoisecvs.org
1
10:30-11:50 Interfaces ricas na Web com Padrões de Projeto Java EE - Mercado de Jogos para Celulares Desenvolvimento para Mini-curso de C# - Parte 1 ASP.NET Caching
Ajax - Parte 2 Parte 2 dispositivos móveis na
plataforma .NET 2.0 - Parte 2
13:30-14-50 Mini Curso 1 - Java ME Struts2 - A Evolução do Utilizando SVG (Scalable Vector Introdução ao ASP.NET AJAX Mini-curso de C# - Parte 2 XAML
Primeiros Passos - Parte 1 framework - Parte Graphics) com Java ME
15:00-16:20 Mini Curso 1 - Java ME Struts2 - Desenvolvendo uma Otimização de Aplicações Java ME Aprenda na prática a criar um Acionamento de dispositivos ASP.NET 2.0 na prática: Profiles e
Primeiros Passos - Parte 2 aplicação com ajax e validação - sistema de enquetes em eletro-mecanicos com Pocket Membership
Parte 1 ASP.NET - Parte 1 PC
17:00-18:20 Além do básico: explorando Struts2 - Desenvolvendo uma iReport/JasperReport - Criando Aprenda na prática a criar um Novidades no Windows Mobile Criação de um portal com ASP.NET
APIs sofisticadas com Java ME aplicação com ajax e validação relatórios para web sistema de enquetes em 6 2.0 e WebParts
nas plataformas Nokia - Parte1 Parte 2 ASP.NET - Parte 2
18:30-19:50 Além do básico: explorando JavaFX: interfaces em Java de Google Web Toolkit passo-a-passo Desenvolvendo programa para Introdução ao Silverlight Desenvolvendo Gadgets
APIs sofisticadas com Java ME forma fácil e portável - Parte 1 - Parte 1 PocketPC com rede sem fio e Corporativos para Windows Vista
nas plataformas Nokia - Parte2 WebServices - Parte 1
JavaFX: interfaces em Java de Google Web Toolkit passo-a-passo Desenvolvendo programa para Criando aplicações WAP com .net 3.0 - Xaml Browser
20:00-21:20 Interfaces ricas para a Web forma fácil e portável - Parte 2 - Parte 2 PocketPC com rede sem fio e ASP.NET Applications
com Flex 2.0 e Java WebServices - Parte 2
13:30-14-50 Implementando uma loja Desenvolvendo um Game em Java Wireless: O que nós precisamos Construa uma aplicação 100% Envio e recebimento de dados Silverlight na prática
virtual em Java EE 5 Java ME - Parte 3 saber sobre MIDP3? OO com ASP.NET - Parte 1 no Pocket usando FTP
utilizando JSF para a interface
com o usuário.- Parte 1
15:00-16:20 Implementando uma loja Introdução ao uso do bluetooth Mini Curso 2 – Conectividade em Java Construa uma aplicação 100% Windows Mobile no Windows WorkFlow Foundation no ASP.NET
virtual em Java EE 5 em J2ME ME - Do básico ao avançado - Parte 1 OO com ASP.NET - Parte 2 CE
utilizando JSF para a interface
com o usuário.- Parte 2
17:00-18:20 Desenvolvendo e implantando Desenvolvendo aplicações Mini Curso 2 – Conectividade em Java AJAX Control Toolkit SQL Server 2005 Compact Desenvolvimento WEB: Uma
uma força de vendas em Palm Web com o Spring Framework ME - Do básico ao avançado - Parte 2 Edition - Parte 1 Abordagem Utilizando OO e
- Parte 1 – Parte 1 Técnicas de Teste de Software
18:30-19:50 Desenvolvendo e implantando Desenvolvendo aplicações Multimídia em J2ME RenatoFaria e Net Framework 3.0 - Conheça SQL Server 2005 Compact Testes automatizados em
uma força de vendas em Palm Web com o Spring Framework eduardo peixoto o WPF e surpreenda-se Edition - Parte 2 aplicações ASP.NET
- Parte 2 – Parte 2
Curso em destaque
Aplicações
Client/Server com
dbExpress e Firebird
Confira neste curso online como criar uma
aplicação client/server completa no Delphi 7,
utilizando dbExpress e Firebird.
Aprenda também: Como trabalhar com um
driver dbExpress específico e gratuito para o
Firebird ; Como utilizar Orientação a Objetos,
e técnicas como herança visual de formulários e
relatórios ; saiba como colocar regras de
negócios no banco de dados, usando Triggers
e Stored Procedures; E crie relatórios com o
Quick Report, Rave Reports e Report
Builder, e muito mais.
Confira o plano de aula completo:
www.devmedia.com.br/clienteserver