Escolar Documentos
Profissional Documentos
Cultura Documentos
Livro Delphi Web Capitulo 11 PDF
Livro Delphi Web Capitulo 11 PDF
Captulo 11
WebSnap
O WebSnap, presente desde a verso 6 do Delphi, e a verso 2 do Kylix, tem como proposta e objetivo principal o
desenvolvimento de aplicaes para Internet com o conceito RAD (Rapid Application Development), ou desenvolvimento
rpido de aplicaes. Na realidade no foi incorporada para substituir o WebBroker, e sim complementar e estender suas
funcionalidades.
Uma das coisas mais interessantes nesta tecnologia a possibilidade de utilizar inmeros formulrios para uma mesma
aplicao. Em WebBroker no era possvel, pelo menos no de maneira organizada e documentada. Na tecnologia WebBroker
as equipes de desenvolvimento precisavam criar projetos diferentes para produzir de maneira adequada. Com o WebSnap essa
barreira foi quebrada, permitindo compartilhar diversas units entre as equipes.
A tecnologia WebSnap tambm permitiu o desenvolvimento de outros frameworks bastante produtivos e que esto fazendo o
maior sucesso entre os desenvolvedores. Prova disso foi a incorporao de um desses frameworks nesta verso do Delphi: o
Intraweb, que veremos no prximo captulo.
Algumas curiosidades
O modelo de desenvolvimento Web no Delphi vem crescendo a cada verso, provando a
forte tendncia deste modelo. Grandes empresas esto partindo para este modelo de
desenvolvimento, justamente pela portabilidade, economia e praticidade. Sinceramente,
sugiro que todos explorem o mximo este modelo de desenvolvimento, pois o mercado
est indo para este lado.
Conhecendo os componentes
Embora a melhor maneira de conhecer os componentes do WebSnap seja praticando alguns exemplos, darei um breve
descritivo de cada um deles.
202
WebSnap 203
A figura 11.1 ilustra a paleta de componentes do WebSnap.
Descrio
Fornece uma interface de scripts e execuo de comandos
TAdapter
TPagedAdapter
TDataSetAdapter
TLoginFormAdapter
TStringsValuesList
TDataSetValuesList
TWebAppComponents
TApplicationAdapter
Controle de informao sobre o usurio, como Nome, ID,
sesso.
TEndUserAdapter
TEndUserSessionAdapter
Descrio
TPageDispatcher
TAdapterDispatcher
TLocateFileService
TSessionService
TWebUserList
TXSLPageProducer
TAdapterPageProducer
C:\CursoWeb
WebSnap
exercicio1
exercicio2
exerccio3
exerccio4
clientes
Diagrama 11.1
WebSnap 205
Primeiro Exemplo
Neste primeiro exemplo, faremos uma simples demonstrao da tecnologia WebSnap. O mais importante neste tpico
compreender toda a estrutura da tecnologia. Todos os passos sero analisados para que voc compreenda de maneira
satisfatria cada detalhe.
Atravs das opes File/New/Other..., selecione a seo WebSnap e escolha a opes WebSnap Application (figura 11.2).
WebSnap 207
un_ex1.PAS
un_form.PAS
wsnap1.DPR
Aps a gravao do nosso projeto, repare que foi gerado automaticamente um arquivo un_ex1.HTML, com o seguinte
contedo.
<html>
<head>
<title>
<%= Page.Title %>
</title>
</head>
<body>
<h1><%= Application.Title %></h1>
<% if (EndUser.Logout != null) { %>
<%
if (EndUser.DisplayName != '') { %>
<h1>Welcome <%=EndUser.DisplayName %></h1>
<%
} %>
<%
if (EndUser.Logout.Enabled) { %>
<a href="<%=EndUser.Logout.AsHREF%>">Logout</a>
<%
} %>
<%
if (EndUser.LoginForm.Enabled) { %>
<a href=<%=EndUser.LoginForm.AsHREF%>>Login</a>
<%
} %>
<% } %>
<h2><%= Page.Title %></h2>
<table cellspacing="0" cellpadding="0">
<td>
WebSnap 209
<%
e = new Enumerator(Pages)
s = ''
c = 0
for (; !e.atEnd(); e.moveNext())
{
if (e.item().Published)
{
if (c>0) s += ' | '
if (Page.Name != e.item().Name)
s += '<a href="' + e.item().HREF + '">' + e.item().Title + '</a>'
else
s += e.item().Title
c++
}
}
if (c>1) Response.Write(s)
%>
</td>
</table>
</body>
</html>
Podemos visualizar o documento atravs das Tabs do nosso editor de cdigo (figura 11.7).
WebSnap 211
{*.html}
Segundo Exemplo
No segundo exemplo vamos conhecer os conceitos de Server Scripts e dos Adapters.
Os Server Scripts nos auxiliam em diversas tarefas, seja para acessar valores em objetos criados atravs do Delphi, ou at
mesmo rotinas dinmicas geradas no servidor. A grande vantagem de utilizar Server Scripts justamente a facilidade da
manuteno do projeto, onde muitas vezes, apenas o arquivo HTML sofre mudanas. Com isso no h necessidade de uma
nova compilao.
WebSnap 213
Em seguida temos a seo Application Module Components, responsvel pela configurao dos mdulos da aplicao.
Clicando no boto Components, voc ter acesso outra caixa de dilogo (figura 11.13) com opes de servio.
un_ex2.PAS
un_form.PAS
wsnap2.DPR
Agora vamos inserir um objeto do tipo TAdapter e, em seguida, acessar a propriedade Data deste objeto, clicando no boto
relacionado (figura 11.16).
WebSnap 215
WebSnap 217
MeuFieldAdapter: TAdapterField;
procedure MeuFieldAdapterGetValue(Sender: TObject; var Value: Variant);
private
{ Private declarations }
public
{ Public declarations }
end;
function index: Tindex;
implementation
{$R *.dfm}
{*.html}
Terceiro Exemplo
No terceiro exemplo vamos trabalhar com mltiplos Page Modules, alm de dispensar o assistente para criao automtica de
pginas.
Atravs das opes File/New/Other..., selecione a seo WebSnap e escolha a opes WebSnap Application (figura 11.21).
WebSnap 219
Em seguida, (figura 11.22) selecione a opo Web App Debugger e informe o nome da classe. Para este exemplo vamos
nomear como classExemplo3.
un_ex3.PAS
un_form.PAS
wsnap3.DPR
Como dispensamos a criao automtica do arquivo HTML, vamos utilizar os novos assistentes do Delphi, para cri-lo.
Atravs das opes File/New/Other..., acesse a seo Web Documents como ilustra a figura 11.25 e selecione a opo HTML.
WebSnap 221
Veja que o seguinte documento foi criado.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Untitled1.html </TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
No editor do Delphi, perceba que existe um assistente code completation para HTML (figura 11.26).
e = new Enumerator(Pages)
s = ''
c = 0
for (; !e.atEnd(); e.moveNext())
{
if (e.item().Published)
{
if (c>0) s += ' | '
if (Page.Name != e.item().Name)
s += '<a href="' + e.item().HREF + '">' + e.item().Title + '</a>'
else
s += e.item().Title
c++
e = new Enumerator(Pages)
s = ''
c = 0
No bloco seguinte estamos iniciando um lao baseado no objeto e criado anteriormente e movendo uma posio no objeto a
cada ciclo. Perceba que o objeto e cria uma matriz de Page Modules da aplicao.
for (; !e.atEnd(); e.moveNext())
No bloco que segue, estamos verificando se o item atual (Page Module) do objeto e possui o mtodo de publicao.
if (e.item().Published)
Em caso afirmativo, acrescenta-se varivel s, espao | espao, onde igual a espao na linguagem HTML.
if (c>0) s += ' | '
Seguindo com o nosso script, este prximo bloco verifica se o item em questo diferente do que solicita o script, ou seja,
verifica se diferente dele mesmo. Em caso afirmativo cria o link da pgina baseado no item atual, seno apenas apresenta o
ttulo da pgina.
if (Page.Name != e.item().Name)
s += '<a href="' + e.item().HREF + '">' + e.item().Title + '</a>'
else
s += e.item().Title
Em seguida apenas incrementamos a varivel c.
c++
E por fim, escrevemos no HTML todo o contedo da varivel s caso a varivel c seja maior que 1, isto , apenas se nossa
aplicao contiver 2 ou mais PageModules.
if (c>1) Response.Write(s)
%>
Agora vamos adicionar Page Modules ao nosso projeto. Atravs das opes File/New..Other..., seo WebSnap, selecione o
assistente WebSnap PageModule (figura 11.27).
WebSnap 223
WebSnap 225
Quarto Exemplo
No quarto exemplo vamos trabalhar com a interatividade do usurio.
Atravs das opes File/New/Other..., selecione a seo WebSnap e escolha a opes WebSnap Application (figura 11.32).
WebSnap 227
Em seguida temos a seo Application Module Options, responsvel pela configurao das opes da aplicao. Clicando no
boto Page Options, voc ter acesso caixa de dilogo (figura 11.35) com opes da aplicao. Selecione Page Producer
para o Producer Type e mantenha a seleo JScript. no Script Engine. Em seguida temos a seo HTML. Desmarque a opo
New File e clique no boto OK.
un_ex4.PAS
un_form.PAS
wsnap4.DPR
Agora vamos criar um novo Web Page Module atravs das opes File/New...Other... e na seo WebSnap, selecione WebSnap
Page Module. Configure de acordo com a figura 11.36.
WebSnap 229
no objeto
Propriedade
Caption
Objeto FldValor1
Valor
Informe o primeiro valor
Propriedade
Caption
Objeto FldValor2
Valor
Informe o segundo valor
WebSnap 231
Agora vamos inserir o boto com a nossa ao.
Selecione o AdapterForm1 e insira um novo componente do tipo AdapterCommandGroup. No objeto criado, faa o vnculo da
propriedade DisplayComponent com o objeto AdapterFieldGroup1. Na realidade estamos colocando o nosso boto dentro do
AdapterFieldGroup1. A figura 11.42 ilustra nosso formulrio atual.
WebSnap 233
{*.html}
WebSnap 235
Anotaes de Dvidas
?
Preciso Revisar
Anotaes Gerais