Vous êtes sur la page 1sur 52

:LQGHY3ULPHLURVSDVVRV

3ULPHLURSDVVR&RQVWUXLQGRD$QiOLVH

No ambiente de programao Windev uma Anlise corresponde ao


Dicionrio de Dados, ou Modelador de Dados.
Como estamos trabalhando com Banco de Dados PostgreSQL, vamos importar os
dados para a nossa anlise de um Banco PostgreSQL.

&ULDQGRXPDQRYD$QiOLVH

Como voc pode ver, a interface


Windev

cuidadosamente
desenhada, visando facilitar ao
mximo
a
interao
do
programador com a ferramenta.
Na janela de componentes,
escolha o cone $QDO\VLV.
Ser aberto um $VVLVWHQWH GH
&ULDomR GH $QDO\VLV, onde,
passo a passo ser definido
como criar a modelagem dos
dados do nosso projeto.

Estando na IDE do Windev, a partir do Menu


Principal escolha :
)LOH!1HZ
Ser aberta uma caixa de dilogo para seleo
de um componente do projeto que ser
construdo.

A primeira tela $QDO\VLV &UHDWLRQ Nos


informa que uma nova Anlise ser criada
informando que uma Anlise permite
definir as estruturas de dados que sero
usados no nosso aplicativo ou em nosso
Website.
Como iremos trabalhar, no momento, com
aplicaes
Desktop,
a
Anlise
corresponde a uma modelagem de dados
para a nossa Aplicao.
Clique no boto 1H[W!!! para

:LQGHY3ULPHLURVSDVVRV
continuar o processo de Modelagem dos dados e acessar a prxima tela do
Assistente.
Nesta segunda tela vamos definir o nome
da nossa anlise e o diretrio onde ela
ser gravada. Preenchemos o campo
1DPH com a expresso 3ULPHLUR
indicando ser este o nosso primeiro
projeto,
de
muitos
que
vamos
desenvolver.
Em seguida, definimos o diretrio onde
nossa Modelagem ser gravada. No
nosso exemplo, preenchemos o campo
'LUHFWRU\ com a expresso:
&?0\3URMHFWV?3ULPHLURZG?
Na realidade informamos ao Assistente que desejamos que a nossa
Definio de Dados seja gravada no diretrio 0\3URMHFWVda unidade &, abaixo
de 3ULPHLURZG
No ltimo campo, (um campo multi-linhas), podemos inserir observaes sobre a
Anlise que estamos criando.
Fizemos uma observao caracterstica,
informando ser esse o nosso primeiro projeto. Clique no boto 1H[W!! para
passar para a prxima tela.
Esta terceira tela do Assistente, permite
configurar uma senha , para a nossa
Anlise, isto , se o &KHFN ER[!!
$QDO\VLVZLOOEHSDVVZRUGSURWHFWHGLQ
H[HFXWLRQ for marcado, sero habilitados
os campos para digitar e confirmar uma
senha para a Anlise, em tempo de
execuo.
Tomar cuidado com esta
senha, pois conforme mensagens que
observamos no frum da linguagem,
esquecer esta senha pode trazer srios
aborrecimentos. Se uma senha for habilitada sempre que a Anlise for aberta, a
senha ser solicitada. No vamos usar senha na nossa Anlise de Exemplo.
Na tela 4 do Assistente onde ser feita
a criao do arquivo. Voc ir optar por
criar um novo arquivo de anlise,
Selecionar um arquivo de anlise
previamente
gravada
ou
Importar
arquivos de uma base externa. Quando
se trabalha com SQL utilizamos a opo
,PSRUW ILOHV IURP DQ H[WHUQDO GDWDEDVH
(Importar os arquivos de uma base
externa) . Essa opo permite importar
dados do SQL Server, Oracle, AS/400,
OLE DB, XML, Text, etc...

:LQGHY3ULPHLURVSDVVRV
Clique no boto 1H[W!! para continuar. Em seguida, na prxima tela, ser
aberta a caixa de dilogo 'DWD6RXUFH6HOHFWLRQ, que nos permite escolher uma
fonte de dados.
Trs botes de rdio oferecem as opes:
External Database
HyperFile 7
HyperFile 5 ou 4
A 2a. e a 3a. opes so utilizadas com
arquivos do tipo ISAM, ou seja, os
arquivos proprietrios do Windev. Para
trabalhar com SQL (Oracle, SQLServer, e
semelhantes) utilizamos a primeira opo
([WHUQDO'DWDEDVHV.
O &KHFN ER[!! )LOH 6WUXFWXUH DOUHDG\ LPSRUWHG utilizado somente com
tabelas HyperFile.
Clique no boto 1H[W!!para ir prxima tela.
A prxima janela a janela de migrao de dados 'DWDPLJUDWLRQ.
Nesta janela iremos definir a forma como
os dados sero utilizados. Se forem
usados no formato em que se encontram,
no caso das tabelas SQL ou se sero
convertidos para HyperFile 7.
A converso para HyperFile 7 s
recomendada quando se convertem
dados de outros arquivos ISAM
e
se
deseja manter o padro ISAM.
Com tabelas SQL mantemos os dados no
formato em que se encontram. Clique no
boto 1H[W!! para prosseguir.
A janela aberta a seguir, o local ideal
para configurar a forma como os dados
sero acessados. O tipo de acesso
definido no campo Type, definido como
2'%& $FFHVV YLD 2/('%. A fonte de
dados definido como 3RVWJUH64/, a
partir de um drop list que nos permite
escolher entre as fontes registradas no
nosso sistema. No campo User name
preencha o nome do usurio do seu
banco, ou o usurio padro do
PostgreSQL, como foi feito na nossa tela.
Se for especificada uma senha para o banco, esta dever tambm estar
especificada na conexo ODBC previamente criada.
Se a senha for preenchida, toda vez que o banco for acessado ela ser solicitada
ao o operador ou dever ser passada via linha de cdigo.

:LQGHY3ULPHLURVSDVVRV

Na prxima tela, o Assistente de Anlise trar todas as tabelas


Sero apresentados dois GURS OLVWV!! , sendo que a lista da esquerda
apresentar as tabelas contidas no Banco e a lista da esquerda receber as
tabelas que se deseja importar para a
anlise.
Voc pode importar todas as tabelas,
utilizando o boto  ou tabela por tabela
( o processo mais usado), utilizando o
boto . Se ocorrer um erro, voc pode
utilizar o boto  para desfazer a
importao de todas as tabelas, ou o
boto
para
importar
a
tabela
selecionada. Se a tabela a ser importada
contiver dados, voc poder ter um
preview desta tabela para ter uma viso
do contedo do arquivo.
Na parte inferior da janela um FKHFN
ER[!! possibilita visualizar tambm as
tabelas do Sistema SGBD.
Clique no boto 1H[W!! para encerrar o
processo de importao das tabelas. Ser
exibida uma tela informando que o
processo de definio dos parmetros de
importao foi concludo. Clique no boto
'RQH!! para que as tabelas sejam
importados.
De acordo com o suporte tcnico da
PCSOFT as chaves das tabelas no so importadas pelo Assistente quando se
utiliza o driver ODBC. Entretanto as chaves podem ser configuradas manualmente
depois que o processo de importao for
concludo.
exatamente este aviso que a janela
,PSRUW aberta a seguir apresenta.
A mensagem reporta a impossibilidade de
se importar as chaves de ndices pelo
driver de acesso ao banco de dados.
Adverte de que as chaves so requeridas
pelo processo. Solicita que se verifique a
existncia destas chaves no banco de
dados e que se configure as mesmas no
Modelador de Dados.
Quando se importam dados de drivers nativos como SQLServer, Oracle, MYSQL,
Acess usando o OLEDB nativo, as chaves e os relacionamentos so importados
normalmente. H um projeto na PCSOFT de desenvolvimento de driver nativo
para PostgreSQL e Firebird.

:LQGHY3ULPHLURVSDVVRV
Ao terminar o processo de importao ser exibido o diagrama de tabelas
importada para que se possa definir as chaves, relacionamentos e outros ajustes
do Banco.

Cada uma das tabelas setadas para importao nas telas anteriores ser colocada
como um objeto de banco de dados no Editor de Modelagem, de forma que se
pode alterar nesta estrutura visual, todas as propriedades da Modelagem. Na
figura acima, esto presentes algumas particularidades interessantes do
Modelador de dados do Windev.
<= Um campo numrico (integer) apresentar um
identificador numrico (123) no lado esquerdo de sua
definio.
<= Identifica um campo do tipo Date. Um campo do tipo Data
um campo tipo data real, no uma estrutura grupo como
acontece em algumas linguagens.
<= A seqncia (ABC) identifica um campo do tipo string, ou
um campo multilinhas, normalmente conhecido como campo
texto.

'HILQLQGRDVFKDYHVGDVWDEHODVLPSRUWDGDVQR0RGHODGRUGH
'DGRV

Execute um duplo clique do mouse sobre o objeto tabela existente no


Modelador para abrir a janela )LOH,WHPV.
Essa janela permite redefinir e configurar praticamente todas as propriedades do
objeto apresentado no Editor de Modelagem.
5

:LQGHY3ULPHLURVSDVVRV
Cada elemento do objeto apresentado com as suas caractersticas.
Na parte superior da tela um drop combo permite selecionar uma outra tabela

diferente daquela que foi inicializada com o duplo clique, se for de interesse do
operador.
Para cada campo apresentado na estrutura do arquivo (mostrado no list box
superior) apresentado um conjunto de 4 guias na parte inferior onde so
mostradas as propriedades. Na guia *HQHUDO so definidos o formato, o tamanho,
o valor default e se o campo ser NULL por default. No canto inferior direito de
cada campo h um grupo de botes de rdio .H\ para definir se o campo chave,
se chave nica ou chave com permisso de duplicao. Se desejar atribuir ao
campo selecionado a condio de chave nica clique no boto de rdio 8QLTXH
.H\. No campo Format voc pode escolher um dos formatos existentes ou definir
uma mscara de entrada de dados personalizada.
A guia 5DG*XL permite definir as caractersticas do campo que sero utilizadas
pelo RAD no momento da gerao da aplicao. As caractersticas definidas aqui
sero aplicadas aos itens definidos na caixa de opes ,WHPLQFOXGHGE\UDG no
lado direto da tela.

:LQGHY3ULPHLURVSDVVRV
Um drop combo permite especificar diversas qualificaes e propriedades
adicionais ao controle associado com o campo. Quanto mais especfico for o nvel
de especializao definido aqui, mais completo ser o controle criado pela
ferramenta RAD na hora da gerao do aplicativo.

Na caixa GURSOLVW!! voc poder definir o tipo de controle que ser criado para
a linha da tabela.
Existem diversas opes para
controles, e se um deles for
escolhido, diferente de 'HIDXOW
&RQWURO , a partir do boto  ser
possvel definir configuraes
adicionais, inclusive sobre os
idiomas que sero utilizados no
projeto. Nesta fase, o ideal
deixar como 'HIDXOW &RQWURO, e
definir as propriedades mais tarde
no projeto, com um nvel de detalhamento maior e de acordo com as
necessidades do momento de programao.
A guia 1RWHV permite associar notas explicativas ao campo.

Na parte inferior da tela, so apresentadas informaes sobre quem criou o


controle, data e hora.
Na guia $GYDQFHG, voc poder definir inclusive a ordem em
que a chave apresentar os dados no Browse, se ascendente ou
descendente. Outras configuraes tambm desta tela
possibilitam configurar se este campo estar disponvel, isto ,
se estar visvel para a ferramenta WdEtat um editor de
relatrios voltado para o usurio final.
7

:LQGHY3ULPHLURVSDVVRV
Para encerrar as definies pressione o boto 9DOLGDWH!!.
Como foi visto acima, definir uma chave muito simples, basta marcar se o campo
chave ou no.

Depois da validao um cone representando uma chave colocado ao lado do


campo na lista de definies.

O campo que for definido com permisso de duplicao apresentar um cone


com duas chaves sobrepostas.
Obrigatoriamente, qualquer tabela SQL, precisa de uma chave nica.
Existem outras definies para os campos, mas no so objetos de estudo no
presente momento (este um passo a passo para criar uma aplicao simples).

&RPRFULDUXPDFKDYHFRPSRVWD

Para criar uma chave composta, adote o seguinte procedimento. Mova o


cursor para a ltima linha de definio do arquivo. Clique no cone
na
parte superior do list box para que seja aberta a definio de chave
composta.

Ser aberta a caixa &RPSRVLWH .H\ mostrando novamente duas tabelas, com a
tabela do lado esquerdo mostrando os campos e a tabela do lado direito que
receber os componentes da chave. O boto  permite inserir um componente na
chave enquanto o boto retira um elemento da chave. Segundo o manual
tcnico da PCSOFT, o ideal que o campo chave nica da chave composta seja o
ltimo a ser includo, aperfeioando sensivelmente o nvel de validao dos
campos para tabelas SQL.
8

:LQGHY3ULPHLURVSDVVRV
Clique no boto 2N!! para confirmar a criao da chave composta.

Clique no campo que contm o nome da chave para alterar o nome para aquele
que voc desejar (por uma questo de padronizao dos nos de chave, por
exemplo). A chave ser criada como .H\ ZLWK 'XSOLFDWHV. Para transform0la
em uma chave nica, clique no boto de rdio 8QLNH.H\. Observe que foi criado
um cone com duas chaves com um sinal de + entre elas.
Assim que a chave for criada o boto (GLW!! estar disponvel para que as
propriedades da chave composta sejam alteradas.

Observe na figura, a maneira como o Modelador identifica as chaves no diagrama.


Rapidamente ao abrir a anlise podemos identificar as chaves compostas e as
chaves simples bem como os ndices.
Uma vez definidos os ndices o prximo passo o estabelecimento das relaes
entre as tabelas uma vez que esta estrutura tambm no importada quando se
trabalha com ODBC.

:LQGHY3ULPHLURVSDVVRV

'HILQLGRRVUHODFLRQDPHQWRV

Estando com a Anlise aberta, clique no boto &UHDWH /LQN!! na barra de


ferramentas do Windev.
O cursor mudar para o
formato de um lpis. Mova o
cursor para a tabela pai que
sobre ela e em seguida mova
para a tabela filha dando um
novo clique. Ser aberta a
janela
de
Edio
de
Relacionamentos.
Nesta Janela que sero estabelecidas as relaes e as regras de integridade.

Observe que gerado um diagrama de relacionamento e na parte inferior os


botes de rdio permitem configurar os relacionamentos. Na figura acima o
relacionamento da tabela *UXSR para a tabela (PSUHVD est sendo feito de 1
grupo para muitas empresas. Atente para o fato de como a ferramenta gerencia os
relacionamentos:
Na coluna da tabela grupo:
Each grupo had a least one empresa
(cada grupo ter uma nica empresa -> est marcado como No
Each grupo can have several empresas
Cada grupo pode ter diversas empresas -> est marcado como Yes
Na coluna da tabela empresa:

10

:LQGHY3ULPHLURVSDVVRV
Each empresas has at least one grupo
Cada empresa tem pelo menos um grupo -> est marcado como No
Each empresa can have several grupos
Cada empresa pode ter diversos grupos -> est marcado como No.
Esta combinao de opes determina o relacionamento 1 para muitos.
Pressione no boto 1H[W!!

Na tela que se abre em seguida, determinamos qual o campo da tabela me far a


ligao com a tabela filha. No caso, o campo cdigo da tabela me.
Na prxima tela, ser definido qual o
campo da tabela filha que estabelecer a
ligao entre as duas tabelas. Este campo
ser uma chave estrangeira e poder ser
duplicado na tabela filha, ao contrrio da
tabela me onde uma chave nica.
Como este campo faz parte de uma chave
composta na tabela filha (no nosso caso) a
caixa 8VH D .H\ EHORZ (use uma das
chaves abaixo) ser apresentada. Escolha
a chave grupo, que um dos componentes
da chave composta na tabela filha, para
que seja estabelecido um link entre as duas
tabelas. Em seguida iremos definir os
atributos
de
integridade
referencial.
Normalmente
estes
atributos
so
especificados no banco de dados, mas o
modelador permite que alguns ajustes
sejam feitos aqui. Estes ajustes dizem
11

:LQGHY3ULPHLURVSDVVRV
respeito forma como o sistema ir gerenciar as operaes de Incluso, Alterao
e Excluso de registros.

Para cada opo crtica das regras de integridade referencial com relao ao
grupo, h um controle drop com as opes. A regra para excluso apresenta as
seguintes opes:
A regra mais utilizada
a que probe a excluso
de um grupo enquanto
existir ao menos uma
empresa
nele.
Esta
opo
evita
o
aparecimento de registros no arquivo de empresa quando se deleta um grupo.
A
regra
para
modificao,
alterao
do campo grupo,
apresentada ao lado,
sendo que a mais
utilizada aquela em
que quando se modifica o grupo no arquivo pai, todos os campos de grupo ligados
no arquivo filho sero modificados.
Pressione o boto 'RQH!! na ltima tela para terminar a definio dos
relacionamentos.
Os relacionamentos para todas as tabelas so feitos sempre partindo da tabela
me para a tabela filha, onde a chave de ligao na tabela me sempre ser uma

12

:LQGHY3ULPHLURVSDVVRV
chave nica, enquanto na tabela filha a chave ser uma chave com duplicao
permitida. O diagrama de entidades mostrado abaixo:

A figura a seguir mostra a composio dos diagramas pelas chaves.


Definir os relacionamentos de forma adequada evita uma srie de problemas no
desenvolvimento futuro.

Clique no boto Generate Analysis para gerar e gravar a anlise do seu projeto.
Podemos dizer que o processo de gerao da Anlise, ou melhor, a Modelagem
dos Dados foi concluda. A prxima etapa neste nosso manual Passo a Passo, diz
respeito construo de um aplicativo
completo utilizando a ferramenta de gerao
RAD
do
Windev.
Embora
cada
elemento/objeto do projeto Windev possa ser
gerado separadamente, a ferramenta RAD
permite
gerar
uma
aplicao
intera
rapidamente e de forma quase que
automtica.

13

:LQGHY3ULPHLURVSDVVRV

6HJXQGR3DVVR5$'

Vamos agora gerar a nossa primeira aplicao com o Windev. Ser uma
aplicao simples utilizando os recursos RAD do Windev 8.
A partir da interface IDE do Windev, escolha
no menu )LOH a opo 1HZ para criarmos um
novo projeto. No Windev, como voc j deve
ter notado, cada elemento do projeto
armazenado em lugares especficos, as
anlises, os projetos, os executveis, e assim
por diante, como convm um verdadeiro
ambiente de desenvolvimento.
Quando clicamos na opo 1HZ a caixa de elementos do
projeto aberta.
Nesta caixa escolha 3URMHFW para dar incio construo de um
novo projeto. Um Assistente de criao de projetos iniciado
para que as principais caractersticas do novo projeto sejam
definidas.
O Projeto agrupa os diversos elementos que compe uma
aplicao e o assistente ir fazer algumas perguntas para
definir o projeto.
medida que estas perguntas vo sendo respondidas pelo
desenvolvedor, isto, os campos das janelas do Assistente vo sendo
preenchidas, o projeto vai sendo montado.
A primeira janela basicamente faz uma explicao rpida de como o projeto ser
gerado. Clique no boto 1H[W!! para ter acesso segunda janela do
Assistente.
Preencha o primeiro campo desta tela,
com o nome do seu Projeto. Para o nosso
exemplo, preenchemos com primeiro
(indicando, ser este o nosso primeiro
projeto). Os demais campos desta tela
so preenchidos automaticamente pela
ferramenta com base naquilo que voc
digitou para o primeiro campo. Entretanto,
voc pode modificar estas informaes
simplesmente editando as partes que lhe
interessarem. Por exemplo, se quiser dar
um nome mais pomposo para o seu projeto, ou se quiser mudar o nome do
diretrio de armazenamento do mesmo. Em seguida pressione 1H[W!! para
passar prxima janela.
Em seguida iremos definir a Anlise utilizada pelo projeto. Um projeto no precisa
necessariamente de uma anlise. Entretanto, o nosso projeto far uso da anlise
que definimos anteriormente. Preencha o campo 8VH H[LVWLQJ DQDO\VLV EHORZ
(use uma das anlises existentes abaixo), escolhendo uma das exibidas pela
caixa GURS GRZQ!! ou escolha na rvore de diretrios utilizando o boto
!! .
14

:LQGHY3ULPHLURVSDVVRV
Todos os dados e definies da anlise que elaboramos no primeiro passo deste
manual, sero agora incorporados ao nosso projeto.
Clique no boto 1H[W!!
Ser aberta uma janela para escolha do
template. O conceito de template utilizado
pelo Windev, diferente do conceito
utilizado pela Linguagem Clarion ou
mesmo pela linguagem Visual Basic.
Template, no caso do Windev refere-se
um conjunto completo de elementos
visuais que comporo um projeto ou
mesmo uma janela do seu aplicativo. O
Windev vem com diversos templates e
voc tem a possibilidade de criar outros templates que comporo os temas visuais
do seu projeto.
Voc pode escolher um dos templates existentes navegando pelos botes e 
da janela de seleo de templates.
Para o nosso projeto escolhemos o
template Eiao, apenas para termos uma
interface diferente.
Clique no boto 1H[W!! .
A prxima janela um dos recursos
interessantes do Windev, a possibilidade
de
se
construir
um
aplicativo
multilinguagem, ou seja, no nosso caso,
vamos construir um aplicativo em ingls,
espanhol e portugus, onde o portugus
ser o idioma padro.
Ao lado de cada bandeira com a
descrio do pas, marque o FKHFN
ER[!! correspondente ao pas ou pases
desejados. Aps definir o pas, pelo 
GURSOLVW!! escolha o idioma padro. No
caso do nosso projeto, ser o portugus
do Brasil.
A prxima janela a janela onde iremos
definir se queremos que a nossa
aplicao ao ser gerada gere tambm os
montadores para a plataforma dot net.
Como este o nosso primeiro projeto, no vamos usar os montadores dot net.
Clique no boto 1H[W!! para configurar se o nosso aplicativo ir utilizar os
servios de um servidor XML da Web. Marque 'RQW XVH ;0/ e clique no boto
1H[W!! . O Windev permite que um projeto seja desenvolvido em equipe, isto
, diversos desenvolvedores podero acessar e desenvolver no mesmo projeto
residente em um diretrio servidor. Para habilitar este recurso o desenvolvimento
deve ser setado na prxima janela. Para este projeto inicial, marque ,ZLOOZRUNRQ
P\RQ, para que o projeto seja um projeto de desenvolvimento individual.
15

:LQGHY3ULPHLURVSDVVRV
Na etapa seguinte, a interface do assistente ir ler todos os dados da anlise e
todas as definies feitas por ns at o momento e ir iniciar a fase de gerao do
aplicativo. Ao terminar a gravao das definies ser apresentada a janela de
opes de gerao.
As opes so para a
gerao completa de um
aplicativo
usando
a
ferramenta RAD, Criar uma
Janela, ou acessar o Editor
do Windev.
No caso do nosso exemplo
escolha a opo )XOO
$SSOLFDWLRQ5$'.
Quando clicamos no boto
RAD
o
assistente
de
Gerao RAD ser aberto
trazendo novamente um
passo a passo para criao
assistida do projeto.
A primeira tela basicamente informa o que ser feito e disponibiliza a aplicao
para ser usada como framework para o desenvolvimento.
Aps o boto 1H[W!! o
gerador abre a escolha do
tipo
de
interface.
As
aplicaes mais consagradas
pelo uso, so as que utilizam
interface MDI, sendo portanto
aconselhvel o uso da
interface MDI no nosso
projeto. A interface MDI o
tipo de interface que permite
que mltiplas janelas sejam
abertas ao mesmo tempo
utilizando os conceitos de
interface de threads e janelas
livres.
Escolha a opo MDI (Multi Document Interface).
Clique no boto 1H[W!! e na prxima janela faa as escolhas do tipo de cdigo
a ser gerado entre as opes 3URFHGXUDO e 2EMHFWHG2ULHQWHG3URJUDP. Quando
se usa o 3URFHGXUDO, na realidade muito mais OOP do que pensamos. Deixe
marcada a opo 3URFHGXUDO. Em seguida escolha o tipo de usado a ser usado
escolhendo para o nosso caso 64/ FRGH LQVWUXFWLRQV e marque o FKHFN
ER[!! With authomatic update.
Confirme o template a ser utilizado e clique no boto 1H[W!! . Na prxima
janela defina a resoluo das janelas para qual ser gerado o sistema. Escolha
800 x 600 pixels, marque o FKHFN ER[!! Proportional Scroll Bar e marque o
boto de rdio $UUDQJHWKHFRQWUROVLQFROXPQV
16

:LQGHY3ULPHLURVSDVVRV
Clique em seguida no boto 1H[W!!.
Ser exibida a janela com os arquivos que sero usados pela ferramenta RAD.
Aqui eventualmente um dos arquivos pode ser retirado da gerao, se for de
interesse do desenvolvedor.
Clique em seguida no boto 1H[W!!.
Neste momento o Windev ir processar a
gerao do aplicativo. Dependendo do
tamanho do seu aplicativo este processo
poder demorar um pouco.
Finalmente o seu projeto ser gerado.
Uma rvore grfica com todas as
entidades ser mostrada. No caso do
nosso projeto a figura abaixo mostra
apenas parte do projeto . Um controle de
zoon permite mudar o ngulo da viso dos
elementos de forma que se possa ter um geral do app.
Depois que a rvore do projeto
montada voc pode navegar por elas
para acessar cada um dos objetos
criados pelo RAD com um duplo clique
sobre ele. Ao clicar sobre o objeto
este ser aberto e o desenvolvedor
ter acesso s suas principais
propriedades. Para compilar o projeto
e ver como que ele roda clique no
boto Go da barra de tarefas. Pronto,
se voc seguiu o passo a passo
corretamente sua aplicao ser
executada.
,PSRUWDQWH
Se os relacionamentos forem definidos adequadamente na anlise, a
ferramenta RAD gerar todos os elementos necessrios ao seu projeto de uma
forma que o seu trabalho manual ser bastante simplificado.

$MXVWDQGRRFyGLJR5$'

Na maioria das vezes, o cdigo gerado pelo RAD, no exatamente aquilo


que desejamos. Faz-se necessrio ento ajustar o cdigo RAD.

0DQLSXODQGR0HQXV
O RAD gera os menus dispostos horizontalmente na Barra de Menus.
Entretanto queremos dispor os menus verticalmente de acordo com as reas de
interesse do Sistema.
Clique na Barra de Menus com o boto direito do mouse, e no menu PopUp que
se abrir escola $''. Digite um nome para o seu novo menu, por exemplo,
&DGDVWURV%iVLFRV e tecle <Enter> . Ser criada uma nov a opo de Menu com
17

:LQGHY3ULPHLURVSDVVRV
o nome escolhido por voc. Clique com o boto direito do mouse na opo
&DGDVWURV %iVLFRV que voc acabou de criar e no menu PopUp que aparecer
escolha a opo Insert Submenu. D um nome qualquer para este tem.
Agora vamos copiar as opes dos outros Menus, para os nosso &DGDVWUR
%iVLFR.
V at o Menu *UXSR clique com o boto direito do mouse sobre ele, e escolha a
opo Cut no menu popup que aparecer. Em seguida v at o Menu &DGDVWURV
%iVLFRV, clique com o boto direito do mouse sobre aquele item de menu que
voc criou e escolha a opo 3DVWH%HIRUH(Colar antes). Seu menu Grupo ser
colocado agora, abaixo de Cadastros Bsicos e acima do item que voc criou.
Proceda da mesma maneira em relao s opes, Empresa, Filial e Unidade

/LPSDQGRWRGDVDVYDULiYHLVGH7HOD
Para limpar todas as variveis de tela, use o comando Reset(true)

/LPSDQGRXPFDPSRHVSHFtILFRQDWHOD

Para limpar somente um campo, iguale este campo a null, assim


Campo=Null

&ULDQGR7DEHODVHP0HPyULDSUHHQFKLGDVDSDUWLUGHXPDUTXLYR
4XHXH 

Crie uma janela e nesta janela crie uma tabela cuja definio dever ser Tabela
Memria
A Querie declarado na rea global da janela, conforme o cdigo abaixo:
Qtabela is Data Source
Adicione os campos Name e FirstName, com os cabealhos Nome e CNPJ.
Ambos os campos sero do tipo Texto.
Crie os botes necessrios Manuteno da Tabela

3UHHQFKHQGRDWDEHODHP0HPyULD

No boto preencher a tabela, insira o seguinte cdigo:


HExecuteSQLQuery(Qtabela,MyConnection,hQueryWithoutCorrection,("SELECT
empresa.nome,empresa.cnpj FROM empresa"))
IF ErrorOccurred THEN Info(ErrorInfo())
HReadFirst(Qtabela)
WHILE NOT HOut
ListAdd(TabelaMemoria,Qtabela.nome+TAB+Qtabela.cnpj)
HReadNext(Qtabela)
END
HCancelDeclaration(Qtabela)

&ULDQGRILOWURVHPUXQWLPH

Acima do controle, Tabela ou Tabela em Memria, crie o campo que


recebera a expresso a ser filtrada. Exemplo: Edit1
Ao lado deste controle, crie um boto cujo evento click deve ter o seguinte cdigo:
18

:LQGHY3ULPHLURVSDVVRV
HExecuteSQLQuery(Qtabela,MyConnection,hQueryWithoutCorrection,("SELECT
empresa.nome,empresa.cnpj FROM empresa WHERE empresa.nome LIKE %"+
Edit1 +"%"))
IF ErrorOccurred THEN Info(ErrorInfo())
TableDeleteAll(TabelaMemoria)
HReadFirst(Qtabela)
WHILE NOT HOut
ListAdd(TabelaMemoria,Qtabela.nome+TAB+Qtabela.cnpj)
HReadNext(Qtabela)
END
HCancelDeclaration(Qtabela)
Onde:
Qtabela um Datasource, declarado globalmente no procedimento.
TabelaMemria o nome da tabela em memria (Queue) -> o prprio controle.

&ODVVLILFDQGRXPDWDEHOD
$VFHQGHQWH

Crie um boto &ODVVLILFDU $VFHQGHQWH ! por exemplo. No evento &OLFN


RQ, insira o seguinte cdigo
Info("A tabela ser classificada em ordem ascendente de nome")
TableSort(TabelaMemoria,"TabelaMemoria.name")

'HVFHQGHQWH

Crie um boto &ODVVLILFDU'HVFHQGHQWH!, por exemplo.No evento &OLFN


RQ insira o seguinte cdigo:
Info("A tabela ser classificada em ordem descendente de nome")
TableSort(TabelaMemoria,"-TabelaMemoria.name")
A nica mudana o sinal de menos (-) frente da classificao.

$SDJDQGRXPDOLQKD

A partir de um boto, $SDJDUOLQKD! por exemplo, inserimos um cdigo


para apagar a tabela em memria.
IF YesNo("Quer mesmo apagar a linha"+TableSelect(TabelaMemoria)+" ?") THEN
Info("A linha ser apgada s da memria... o arquivo ficar intacto")
TableDelete(TabelaMemoria)
END

'RW1HW

Voc pode criar programas .NET (ou montadores .NET) a partir de uma
aplicao Windev.
Os montadores .NET so gerados diretamente a partir das Classes do Windev
com todos os benefcios do ambiente RAD do WINDEV.

19

:LQGHY3ULPHLURVSDVVRV
Voc tambm pode utilizar montadores .NET gerados a partir de outra
linguagem em uma aplicao Windev
Simplesmente especifique o uso de montadores .NET em aplicaes novas
diretamente no assistente de criao de aplicaes.
Em aplicaes j existentes, simplesmente selecione .NET assemblies,
para usar.

8VDQGRGRW1HWHPXPDDSOLFDomR:LQGHY

Para usar o dot net em uma aplicao Windev necessrio que sejam
atendidos os seguintes requisitos:
Instalar o Net Framework na estao onde o aplicativo ser executado
Configurar o nvel de segurana .NET
Criar as Dlls

7HFQRORJLD'RW1HW$FHVVDQGR:HE6HUYLFHV

Ouvimos falar em .NET, J2EE, SOAP, WSDL, XML... e outras abreviaes.


Na verdade todas estas abreviaes dizem respeito mesma coisa XML.
A plataforma Microsoft .NET e a SUN J2EE so usadas para exportar seus
componentes como um servidor Web XML. Um servio WEB normalmente
definido como uma aplicao acessvel via Internet utilizando protocolos
padronizados. Mais especificamente os servios da Web permitem que
computadores conectados atravs da Internet se comuniquem entre si. Voc pode
usar os servios da Web a partir de uma estao cliente para executar
procedimentos e processos e um servidor Web remoto. Esse servidor pode ser
um servidor .NET ou um servidor J2EE .
Usando uma aplicao Windev como cliente, podemos acessar estes
servios via protocolo http-SOAP, utilizando as funes 62$3[[ 'RW1HW[[ e
-(H[[.
Independente de qual plataforma de servidor esteja sendo usada (.NET,
J2EE, etc) um servio WEB sempre acessvel via SOAP.

(QWHQGHQGRR62$3
Entender o SOAP o principal conceito para entender a tecnologia de Web
Services.
Um SOAP um 6LPSOH 2EMHFW $FFHVV 3URWRFRO (Protocolo
Simplificado de Acesso Objetos). Explicou mas no disse nada!
Explicando:
um protocolo de comunicao usado para executar procedimentos em um
servidor remoto enviando e ou recebendo parmetros. Na maioria das vezes este
processo baseado em protocolos http e XML , mas em alguns casos pode ser
usado o protocolo SMTP.
Os dados so transmitidos entre o computador local e o servidor SOAP
como um texto estruturado no formato XML.
A principal vantagem disso deve-se ao fato de que a ao realizada
usando dois protocolos amplamente conhecidos:
XML para a estrutura das mensagens e,
20

:LQGHY3ULPHLURVSDVVRV
HTTP para transferncia de dados.
por causa disso que o SOAP independe de Sistema Operacional,
Linguagens de Programao. No importa se voc vai desenvolver em Windev,
Clarion, Visual Basic, C, Delphi. O protocolo XML, HTTP sempre o mesmo. Se
voc vai trabalhar no UNIX, no LINUX, no Windows ou no MAC... no tem
problema nenhum.
Alm disso, pelo fato de usar o protocolo HTTP para transferir dados, o
SOAP pode circular atravs de Firewalls sem nenhum problema. Ou seja, mesmo
que o seu cliente ou usurio final utilize um Firewall para proteger a sua rede de
ataques de Hackers e ou outros intrusos, no haver problema algum em usar
uma aplicao que utilize o um servidor SOAP.
verdade que o SOAP um pouco complexo para usar. por isso que um
servio padronizado WSDL, foi criado para fazer uma integrao mais fcil entre
os servios Web e a sua aplicao.
No Windev uma definio padro permite ao Windev importar um servio
Web XML. Em poucas palavras, acontece o seguinte:
Voc seleciona um arquivo WSDL atachado a um servio.
O Windev gera uma classe ou um conjunto de procedures que interagem
com este servio. Voc no precisa escrever nenhuma linha de cdigo, o
Windev se encarrega de fazer isto para voc. um assistente onde voc
responde algumas perguntas e pronto. No final, as classes de acesso ao
site remoto Dot Net, J2EE, etc... so geradas de forma global para voc e
voc s tem que chamar os mtodos das classes ou as procedures
includas no seu APP pelo Windev, para ter acesso a um servio WSDL.

&RPRLPSRUWDUXPVHUYLoRGD:HE

Vamos usar este recurso interessante do Windev, para importar um servio


da Web para o nosso APP. Depois que o processo for realizado, vamos ver como
usar estas classes no nosso Aplicativo.
Primeiro Passo: Criando um projeto
No manual do Windev existe um exemplo que permite acessar diversas
estaes meteorolgicas espalhadas pelo mundo e cujas informaes esto
disponveis em um Servidor dot Net.
Crie um novo projeto.
Este projeto receber o nome de: Tempo
Este projeto no usar nenhuma Anlise.
claro que precisaremos ter uma conexo de Internet ativa e funcionando para
continuar.
Como vamos fazer uma importao de um recurso disponibilizado na Web a
mquina do programador, no caso, precisa ter acesso a Web.

21

:LQGHY3ULPHLURVSDVVRV

Segundo Passo: Importando o Servio Web


Em primeiro lugar, vamos importar a estrutura do Servio Web que ns
queremos consultar.
A partir do Menu Principal do Windev, clique na opo de Menu :RUNVKRS
No menu popup que se abrir
escolha ;0/ :HE 6HUYLFH 1(7
-((62$3. No submenu que se
abrir escolha ,PSRUW DQG 8VHU
6HUYLFH LQ 3URMHFW O Assistente
de importao de Servios Web
ser iniciado . Clique no boto
1H[W . Na janela que se abrir
escolha atravs do boto de rdio
da janela 7KH GHVFULSWLRQ LV ORDGHG LQ WKH DGGUHVV EHORZ (a definio
carregada a partir do endereo abaixo):
Preencha o campo http:// com:
ZZZEULQNVWHUFRPEJ[ZHEVHUYLFHV*(7B:HDWKHUDVP[":6'/
Isto significa que iremos carregar a descrio do servio diretamente da internet.
(Como voc deve ter visto no assistente, possvel carregar as definies de um
arquivo).
127$ 2 VHUYLGRU RQGH VH ORFDOL]D R VHUYLoR XVDGR QR QRVVR WHVWH HVWi
ORFDOL]DGRHPXPVHUYLGRUGHWHVWHV$PHULFDQR3RGHVHUTXHTXDQGRYRFr
HVWLYHU OHQGR HVWH PDQXDO R VHUYLGRU QmR HVWHMD PDLV GLVSRQtYHO  3HGLPRV
GHVFXOSDVDQWHFLSDGDPHQWHVHLVWRRFRUUHU
3DUDSRGHUXVDUHVWHVHUYLoRGD:HEFRPHUFLDOPHQWHHOH'(9(VHULQVWDODGR
QR 6(8 SUySULR VHUYLGRU :HE 3DUD PDLRUHV GHWDOKHV VREUH HVWH VHUYLoR
OHLDVDVFRQGLo}HVGHXVRGRPHVPRQRVHJXLQWHHQGHUHoR
KWWSZZZEULQNVWHUFRP%*;
Depois de informar o nome do Servidor, e ler as importantes informaes
acima, clique no boto 1H[W! para continuar.
Na janela seguinte, escolha o tipo de servio Web. Como este servio foi
desenvolvido com tecnologia ASP.Net, um servio dot Net por excelncia,
portanto selecione .Net e clique no boto 1H[W!.
Voc pode escolher entre gerar um conjunto de procedures ou uma Classe
para usar o Servio Web em sua aplicao. Por ser uma maneira mais fcil de
entender, escolhemos a opo DVHWRISURFHGXUHV (um conjunto de procedures).
O Assistente ir criar um conjunto de procedures globais onde cada procedure
criada para cada funo do servio Web.
No altere nada e clique no boto 'RQH.
O Windev ir gerar um conjunto de procedimentos e o servio Web estar agora
integrado sua aplicao. Voc poder localizar o conjunto de procedures
geradas no Kouglof.
Abra cada uma das procedures geradas pelo assistente e veja que o cdigo
gerado contm diversas funes Dot Net da W-Language.
22

:LQGHY3ULPHLURVSDVVRV
Exemplo:
A funo GetStation definida da seguinte forma:
PROCEDURE Get_Station(code)
DotNet.Name[1]="code"
DotNet.Type[1]=DotNetTypeChane
DotNet.Value[1]=code
bRes is boolean
bRes=DotNetRun("http://www11.brinkster.com/bgx/webservices/GET_Weather.as
mx", "Get_Station", "http://www11.brinkster.com/bgx/webservices/publicGET",
"http://www11.brinkster.com/bgx/webservices/publicGET/Get_Station")
IF NOT bRes THEN
IF DotNetError(DotNetErrMessage)~="" THEN
Error(ErrorInfo())
ELSE
Error(DotNetError(DotNetErrMessage))
END
END
RESULT DotNetGetResult(DotNetXMLResult)
Agora que importamos todas as funes do servio Web para o nosso aplicativo
podemos usar os mtodos e propriedades de cada uma das procedures para fazer
funcionar o nosso cliente dot Net.
Terceiro passo: Usando o conjunto de procedures
Os passos realizados anteriormente nos permitiram criar os procedimentos
globais que nos permitiro conversar com um aplicativo dot Net
No momento em que o processo encerrado todas as procedures so
transferidas para a rea de globais do nosso app.

Observe a tela do Kougloff com a lista de procedures. Cada uma destas


procedures foi importada diretamente do servidor SOAP. Agora vamos incorporar
a tecnologia ao nosso aplicativo.

23

:LQGHY3ULPHLURVSDVVRV
1. A partir da rea de projetos crie uma nova janela em branco.

2. Chame esta janela Apl_dotnet


3. Para o ttulo da janela, em portugus, Aplicao Dot Net Usando um
servio Web Net
4. Em seguida salve a janela.

Crie um campo de entrada chamado Nome_da_Estaao . O rtulo do controle


(ttulo) deve ser 1RPHGD(VWDomR0HWHRUROyJLFD.

24

:LQGHY3ULPHLURVSDVVRV
Adicione um campo de entrada chamado Temperatura cujo rtulo deve ser
7HPSHUDWXUD. tipo numrico
Adicione outro campo de entrada chamado Ponto, cujo rtulo deve ser 3RQWRGR
2UYDOKR (no me pergunte o que isso, pois no entendo nada de meteorologia).
Mas um dado que sempre aparece nas condies do tempo.- tipo numrico
Adicione um campo de entrada chamado Umidade, cujo rtulo deve ser 8PLGDGH
GRDU(aqui ser retornado o percentual de umidade relativa do ar).- tipo numrico.
Crie mais um campo de entrada chamado pressao, cujo rtulo deve ser 3UHVVmR
DWPRVIpULFD. No sei para que serve este dado, mas me parece ser um dado
importante para quem entende de meteorologia. tipo numrico.
Crie um campo de entrada chamado Ceu,cujo rtulo deve ser &RQGLo}HVGR&pX.

Clique na guia Details e marque o check box 0XOWLOLQHLQSXW. Isto vai permitir criar
um campo texto na nossa janela. Voltando janela redimensione e arranje os
campos.
Em seguida crie um boto Button1
cujo texto deve ser &RQGLo}HV GR
WHPSR . Escolha as imagens e a
configurao conforme a figura ao
lado. Se quiser pode criar um boto
simples, sem maiores frescuras.
Esse boto ser o responsvel pelo
carregamento dos dados do Servio
Web dot Net para os campos da
nossa aplicao. Prosseguindo crie

25

:LQGHY3ULPHLURVSDVVRV
um outro boto Button2 posicionando no canto inferior direito da janela, cujo texto
deve ser )HFKDU. Crie ainda um terceiro boto Button3 abaixo do Button1. Esse
boto dever ter o texto /LVWDU3DtVHVQR6HUYLGRU. A principal finalidade listar
todos os pases cadastrados no servidor.
Ao lado do campo 7HPSHUDWXUD crie um controle esttico (uma string) cujo texto
deve ser JUDXV. Ao lado do campo 8PLGDGHGRDU crie um controle esttico cujo
texto deve ser . Estes controles estticos visam principalmente dar uma esttica
melhor nossa janela.
Quarto Passo: Escrevendo o cdigo
O servio Web que estamos acessando aqui utiliza o formato XML para
retornar as informaes que sero processadas com as funes de tratamento
XML da W-Language.
De acordo com a documentao do servio Web as mensuraes de tempo
so feitas de acordo com um cdigo ICAO. O cdigo ICAO identifica a estao
meteorolgica. Pelo fato de que no conhecemos este cdigo (e mesmo que
conhecssemos, no seria possvel guardar na cabea), vamos recuperar as
informaes pelo nome da estao utilizando a funo 6HDUFKB6WDWLRQ%\1DPH.
Esta uma das funes que foram recuperadas do servido dot Net.
Clique com o boto direito do mouse no boto e insira o seguinte cdigo
fonte no evento &OLFNRQ%XWWRQ.
//Quando clicamos no boto
XMLResult is string = " "
XMLResult = Search_StationByName(Nome_da_Estaao)
ICAOCode is string = " "
ICAOCode = XMLExtractString(XMLResult,"icao")
IF ICAOCode=" " THEN
Error("Estao " + Nome_da_Estaao + " no localizada pelo servio.")
RETURN
END
IF Nome_da_Estaao = "Estancia Velha" THEN
Temperatura= -58
Ponto= -15
Umidade= -39
pressao= -25
Info("A temperatura tem que estar baixa para manter a pinga gelada")
END
//Chamando a funo Dot.net importada do servio Web
XMLResult=Get_WeatherReport(ICAOCode)
Temperatura=XMLExtractString(XMLResult, "ambient")
Ponto=XMLExtractString(XMLResult, "dewpoint")
Umidade=Val(XMLExtractString(XMLResult, "relative_humidity"))
pressao=XMLExtractString(XMLResult, "altimeter")
Tagceu, Results are strings
Ceu = Null
i is int
Tagceu= XMLExtractString(XMLResult, "sky")
26

:LQGHY3ULPHLURVSDVVRV
i=0
LOOP

i ++
Results=XMLExtractString(Tagceu, "string" ,i)
IF Results ~=" " THEN BREAK
Ceu=Ceu + Results + CR

END
Analisando as duas primeiras linhas, temos a declarao da varivel XMLResult
como uma cadeia de caracteres,
;0/5HVXOWLVVWULQJ 
Na mesma linha a varivel inicializada em branco.
Na linha seguinte a varivel XMLResult recebe o retorno da funo que pega o
nome da estao.
;0/5HVXOW 6HDUFKB6WDWLRQ%\1DPH 1RPHBGDB(VWDoDR 
Onde 6HDUFKB6DWLRQ%\1DPH, a chamada procedure importada do servidor
WebXml e nome da estao o parmetro passado para o procedimento pela
nossa aplicao no momento em que o boto pressionado. Quando clicamos no
boto o campo 1RPHBGDB(VWDomRda nossa janela j deve estar preenchido com
o nome de uma das estaes meteorolgicas cadastradas no servidor dot Net.
;0/5HVXOW 6HDUFKB6WDWLRQ%\1DPH 1RPHBGDB(VWDoDR 
Recupera o cdigo ICAO da estao utilizando a funo XMLExtractString. Esse
cdigo corresponde ao tag icao da sentena XML enviada pelo servio.
ICAOCode is string = " "
ICAOCode = XMLExtractString(XMLResult,"icao")
Em seguida feita uma comparao e se a estao no for reconhecida pelo
servidor ser mostrado um aviso ao usurio.
IF ICAOCode~=" " THEN
Error("Estao " + Nome_da_Estaao + " no localizada pelo servio.")
RETURN
END
O tratamento do retorno da
funo XML precisa ser feito
utilizando o operador ~= . O
operador ~= um RSHUDGRU GH
LJXDOGDGH IOH[tYHO
e opera
unicamente
com
caracteres
strings. Ou seja uma igualdade
especial
para
cadeia
de
caracteres, diferente das igualdades (=) usada para nmeros, por exemplo. O
funcionamento totalmente diferente. Tanto que se voc usar IF ICAOCode =" ",
o procedimento no funciona e no exibe a mensagem acima. Pelo fato de se no
existir a estao no servidor no ser retornado nenhum valor, a falta da
mensagem poder desorientar o usurio final.
IF Nome_da_Estaao = "Estancia Velha" THEN
Temperatura= -58
Ponto= -15
27

:LQGHY3ULPHLURVSDVVRV
Umidade= -39
pressao= -25
Info("A temperatura tem que estar baixa para manter a pinga gelada")
END
As linhas acima constituem um teste e uma brincadeira que fizemos com o
nosso colega Eduardo Wolack, residente em Estncia Velha. Como sabido, l
no existe estao meteorolgica, mas fizemos um procedimento para que fossem
retornados valores negativos e usando a funo Info, retornamos uma mensagem
de tela. Com isto mostramos que o seu programa pode interagir com os dados
retornados do servidor dot Net e tomar decises em cima destes dados.
//Chamando a funo Dot.net importada do servio Web
XMLResult=Get_WeatherReport(ICAOCode)
Temperatura=XMLExtractString(XMLResult, "ambient")
Ponto=XMLExtractString(XMLResult, "dewpoint")
Umidade=Val(XMLExtractString(XMLResult, "relative_humidity"))
pressao=XMLExtractString(XMLResult, "altimeter")
As linhas listadas no quadro acima atribuem varivel XMLResult as
condies do tempo atravs da funo *HWB:HDWKHU5HSRUW que recebe o
parmetro ICAOCode passado quando preenchemos o campo com o nome da
estao.
O
campo
7HPSHUDWXUD

preenchido
usando
a
funo
;0/([WUDFW6WULQJ ;0/5HVXOW DPELHQW  onde ambient uma tag xml
enviada pelo servidor e um valor numrico para o nosso aplicativo.
O campo 3RQWR preenchido pela varivel GHZSRLQW Observe que as tags so
chamadas sempre entre aspas duplas. Como o sistema sabe destas coisas? Ele
no sabe... simplesmente pega os dados do servidor XML com uma linha
semelhante :
DotNet.Name[1]="code"
DotNet.Type[1]=DotNetStringType
DotNet.Value[1]=code
Estes dados so devolvidos pelo servidor em formato XML. O que o cdigo acima
faz pesquisar nos esquemas cada um dos parmetros necessrios para
preencher os campos do nosso aplicativo conforme as tags abaixo obtidos no site
do Web Service.
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: OHQJWK
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Get_WeatherReportResponse
xmlns="http://www.bgxcomponents.com/webservices/publicGET">
<Get_WeatherReportResult>
<timestamp>GDWH7LPH</timestamp>
<station>

28

:LQGHY3ULPHLURVSDVVRV
<icao>VWULQJ</icao>
<wmo>VWULQJ</wmo>
<iata>VWULQJ</iata>
<elevation>GRXEOH</elevation>
<latitude>GRXEOH</latitude>
<longitude>GRXEOH</longitude>
<name>VWULQJ</name>
<region>VWULQJ</region>
<country>VWULQJ</country>
<string>VWULQJ</string>
</station>
<phenomena>
<Phenomenon>
<type>0,67 or )2* or &/28' or 72:(5,1*B&808/86 or
&808/21,0%86 or 35(&,3,7$7,21 or 6+2:(56 or '5,==/( or 5$,1 or 635$<
or ',$021'B'867 or 612: or 612:B*5$,16 or ,&(B3(//(76 or 60$//B+$,/
or /$5*(B+$,/ or +$=( or 602.( or '867 or 6$1' or 92/&$1,&B$6+ or
:+,5/6 or 648$//6 or /,*+71,1* or '86767250 or 6$1'67250 or
7+81'(567250 or 7251$',& or 81.12:1</type>
<intensity>',67$17 or 1($5%< or /,*+7 or 02'(5$7( or
+($9<</intensity>
<string>VWULQJ</string>
</Phenomenon>
<Phenomenon>
<type>0,67 or )2* or &/28' or 72:(5,1*B&808/86 or
&808/21,0%86 or 35(&,3,7$7,21 or 6+2:(56 or '5,==/( or 5$,1 or 635$<
or ',$021'B'867 or 612: or 612:B*5$,16 or ,&(B3(//(76 or 60$//B+$,/
or /$5*(B+$,/ or +$=( or 602.( or '867 or 6$1' or 92/&$1,&B$6+ or
:+,5/6 or 648$//6 or /,*+71,1* or '86767250 or 6$1'67250 or
7+81'(567250 or 7251$',& or 81.12:1</type>
<intensity>',67$17 or 1($5%< or /,*+7 or 02'(5$7( or
+($9<</intensity>
<string>VWULQJ</string>
</Phenomenon>
</phenomena>
<precipitation>
<Precipitation>
<amount>GRXEOH</amount>
<hours>LQW</hours>
<string>VWULQJ</string>
</Precipitation>
<Precipitation>
<amount>GRXEOH</amount>
<hours>LQW</hours>
<string>VWULQJ</string>
</Precipitation>
</precipitation>
<extremes>
<Extreme>
<temperature xsi:nil="true" />
<type>+,*+ or /2:</type>
<hours>LQW</hours>
<string>VWULQJ</string>
</Extreme>
<Extreme>
<temperature xsi:nil="true" />

29

:LQGHY3ULPHLURVSDVVRV
<type>+,*+ or /2:</type>
<hours>LQW</hours>
<string>VWULQJ</string>
</Extreme>
</extremes>
<pressure>
<altimeter>GRXEOH</altimeter>
<slp>GRXEOH</slp>
<delta>GRXEOH</delta>
<delta_hours>LQW</delta_hours>
<string>VWULQJ</string>
</pressure>
<sky>
<ceiling_altitude>GRXEOH</ceiling_altitude>
<layers>
<Layer xsi:nil="true" />
<Layer xsi:nil="true" />
</layers>
<string>VWULQJ</string>
</sky>
<temperature>
<ambient>GRXEOH</ambient>
<dewpoint>GRXEOH</dewpoint>
<relative_humidity>LQW</relative_humidity>
<string>VWULQJ</string>
</temperature>
<visibility>
<distance>GRXEOH</distance>
<qualifier>$7 or %(<21' or %(/2:</qualifier>
<string>VWULQJ</string>
</visibility>
<wind>
<prevailing_speed>GRXEOH</prevailing_speed>
<gust_speed>GRXEOH</gust_speed>
<prevailing_direction>
<compass>1 or 11( or 1( or (1( or ( or (6( or 6( or 66(
or 6 or 66: or 6: or :6: or : or :1: or 1: or 11:</compass>
<degrees>LQW</degrees>
<string>VWULQJ</string>
</prevailing_direction>
<varying_from_direction>
<compass>1 or 11( or 1( or (1( or ( or (6( or 6( or 66(
or 6 or 66: or 6: or :6: or : or :1: or 1: or 11:</compass>
<degrees>LQW</degrees>
<string>VWULQJ</string>
</varying_from_direction>
<varying_to_direction>
<compass>1 or 11( or 1( or (1( or ( or (6( or 6( or 66(
or 6 or 66: or 6: or :6: or : or :1: or 1: or 11:</compass>
<degrees>LQW</degrees>
<string>VWULQJ</string>
</varying_to_direction>
<string>VWULQJ</string>
</wind>
</Get_WeatherReportResult>
</Get_WeatherReportResponse>

30

:LQGHY3ULPHLURVSDVVRV
</soap:Body>
</soap:Envelope>

A linha em vermelho na listagem XML acima que preenche o parmetro presso


no nosso aplicativo dot Net.
Esta linha est presente na funo importada do servidor chamada
*HWB:HDWKHU5HSRUW
O campo 8PLGDGH utiliza a funo Val para transformar o resultado em um
nmero que pode ser operado no sistema 9DO ;0/([WUDFW6WULQJ ;0/5HVXOW
UHODWLYHBKXPLGLW\ onde relative_humidity uma tag XML.
O campo SUHVVDR preenchido com a tag altimeter retornada pela funo
;0/([WUDFW6WULQJ ;0/5HVXOWDOWLPHWHU .
As condies do cu conhecidas na tag Sky tem uma particularidade, podem
retornar uma tag com mais de um resultado. Desta forma no podemos usar a
funo ;0/([WUDFW6WULQJ diretamente uma vez que a tag aparece mais de uma
vez no resultado trazido pelo servidor. Desta forma temos que trazer o resultado
da tag sky em em seguida extrair os dados desejados para o nosso campo que
aceita mltiplas linhas de texto.
Tagceu, Results are strings
Ceu = Null
i is int
Tagceu= XMLExtractString(XMLResult, "sky")
i=0
LOOP
i ++
Results=XMLExtractString(Tagceu, "string" ,i)
IF Results ~=" " THEN BREAK
Ceu=Ceu + Results + CR
END
Neste exemplo veremos como os loops so feitos em Windev.
Criamos duas varives, Tagceu e Results no formato string.
7DJFHX5HVXOWVDUHVWULQJV
Na linha seguinte, limpamos o controle Ceu, igualando o a Null
A varivel de controle do loop i declarada como um inteiro e em seguida
inicializada com o valor 0 (zero).
Tagceu= XMLExtractString(XMLResult, "sky")
A linha de cima extrai o resultado da tag sky
LOOP
i ++
Results=XMLExtractString(Tagceu, "string" ,i)
IF Results ~=" " THEN BREAK
Ceu=Ceu + Results + CR
END
Entramos o comando LOOP indicando uma estrutura de repetio (semelhante
linguagem C) implementamos o valor de i com o operador ++ de incremento

31

:LQGHY3ULPHLURVSDVVRV
Em seguida a varivel Results recebe o valor da tagceu, no formato string de
acordo com o valor da varivel i. Na primeira vez i = a 1, na segunda vez i = 2, at
chegar ao final da tagceu.
Um operador de igualdade flexvel ~= controla o final do Loop e atribui ao
controle de texto da tela (Ceu) o contedo da varivel Results colocando um
caractere de quebra de linha a cada vez que um contedo gravado.
Esta a tela de
resultado em tempo
de execuo quando
se pressiona o boto
condies do tempo.
Os dados da figura
correspondem
ao
Clima na cidade de
Porto Alegre no dia
01 de Setembro de
2004, as 11:45 horas.
Os
dados
de
visibilidade do cu,
ocuparam
somente
uma
linha,
mas
poderiam ocupar mais de uma conforme as condies do tempo como mostra a
figura seguinte para o clima da cidade de Salvador no mesmo dia 01 de Setembro
de 2004 s 11:48 horas.

Eu no entendo muito os dados representados no campo condies do cu mas


analisando o que est escrito em ingls temos nuvens de um determinado tipo a
32

:LQGHY3ULPHLURVSDVVRV
3962 metros, um outro tipo a 8230 metros. Estas informaes so normalmente
utilizados por pilotos de aviao e controladores de trfego areo.
A grande massa das bases de dados deste servidor, de acordo com a visita que
fiz ao site alimentada pelos operadores dos aeroportos.

Observe um extrato da tela do Site onde o servio permite acessar uma lista das
cidades onde temos a coleta das informaes do clima e se pode notar a presena
dos aeroportos.
Basta conhecer os parmetros em XML para retornar qualquer dado no seu
aplicativo usando a tecnologia dot Net.
Baseado na anlise do cdigo XML retornado pelo servidor vamos obter no
nosso sistema, uma listagem de todos os pases cadastrados no servidor. No
boto /LVWDU SDtVHV QR 6HUYLGRU, no evento &OLFN RQ EXWWRQ insira o seguinte
cdigo para retornar uma lista no campo Ceu:
XMLResult is string = " "
XMLResult = List_Countries
ICAOCode is string = " "
ICAOCode = XMLExtractString(XMLResult,"icao")
Tagceu, Results are strings
Ceu = Null
i is int
Tagceu=XMLResult
i=0
LOOP
i ++
Results=XMLExtractString(Tagceu, "string" ,i)
IF Results ~=" " THEN BREAK
Ceu=Ceu + Upper(Results) + CR
END
Primeiro igualamos a varivel XMLResult ao mtodo (tag XML) List_Countries. Em
seguida atribumos o resultado para a varivel ICAOCode.
Da mesma maneira que fizemos anteriormente declaramos Tagceu e Results
como strings.
Limpamos o controle Ceu igualando-o a Null.
Definimos um contador i como int
Recebemos o valor de XML result na varivel Tagceu
Atrbumos 0 ao contador i

33

:LQGHY3ULPHLURVSDVVRV
Iniciamos um Loop
Incrementamos o contador i em 1 com i ++
Preenchemos as linhas com
Results=XMLExtractString(Tagceu, "string" ,i)
IF Results ~=" " THEN BREAK
Ceu=Ceu + Upper(Results) + CR
Usando Upper para colocar o nome dos pases em maiscula . O resultado em
tempo de execuo apresentado abaixo:

Observe que retornamos os valores no mesmo campo texto usado para receber
os dados do cu, mas poderamos perfeitamente preencher uma tabela em
memria com estes valores.

$WULEXLQGRYDORUHVDXPFRQWUROHGHWHODHVWiWLFR

Estes controles correspondem a controles do cadeia de caracteres em


outras linguagens. Publique um controle esttico na sua janela e atribua valores
diretamente para ele, sem precisar declarar uma varivel. Exemplo no caso de
nossa aplicao dot Net pegamos a data e a hora em que as informaes so
retornadas do Servio XML da Web.
Static3 =" Em: " + DateToString(DateSys(),"DD/MM/YYYY") + " s " +
TimeToString(Now(),"HH:MM:SS")
Onde Static3 um controle de tela sem rtulo (caption). Para atribuir a data e a
hora do sistema a este controle (com mais algumas firulas) utilizamos o cdigo
acima. Para colocar a data retornada pela funo 'DWH6\V() no formato dia/ms e
ano utilizado no Brasil, utilizamos a mscara DD/MM/YYYY . Da mesma forma
fizemos a formatao para hora, minuto e segundo para a funo 1RZ
34

:LQGHY3ULPHLURVSDVVRV

&ULDQGRXPVHUYLoR:HE;0/DSDUWLUGHXPDDSOLFDomR:LQGHY

O Windev tambm pode ser usado para criar servios Web a partir de
aplicativos desenvolvidos por voc.
Para que estes servios sejam
disponibilizados ao pblico e a outras aplicaes voc precisar instalar o servio
gerado em um servidor que suporte SOAP.

&ULDQGRR6HUYLoR;0/

1. Crie um novo projeto Windev. Este novo projeto dever conter apenas
procedures globais (nenhuma janela, nenhum relatrio, etc...) Cada
procedure global dever ser executada pelo servidor SOAP do Windev. Se
for necessrio, entre os cdigos de inicializao e finalizao do projeto.
Estes cdigos sero executados durante a carga ou descarga da livraria do
Windev no Servidor SOAP.
2. Selecione a opo 3URMHFW...;0/ :HE 6HUYLFH *HQHUDWH 6HUYLFH IRUP
WKLV SURMHFW. Um assistente de criao de servios XML ser carregado
Responda s questes propostas pelo assistente para ter no final um
servio Web XML completo gerado a partir de uma aplicao Windev.
3. Entre as questes propostas esto: o nome do arquivo XML a ser criado.
Por default o nome deste arquivo <Projeto.xml> onde Projeto o nome do
seu projeto.
4. Em seguida entre o endereo da Internet onde o projeto ser instalado, por
exemplo http://MeuServidor/MeuServico.soap.
5. A prxima tela define os elementos que devem ser integrados livraria, tais
como imagens, cones,etc... A livraria ter o mesmo nome do projeto atual,
voc pode: Adicionar elementos, remover elementos ou criar uma livraria a
partir de uma livraria existente.
6. Para gerar uma livraria a partir de uma livraria existente:
7. Quando estiver usando uma livraria Windev, um arquivo .WDU com o
mesmo nome ser automaticamente criado. Este arquivo contm todas as
referncias para os elementos a serem integrados na livraria.
8. Clique no boto Done para criar o site.
9. Instale o servio gerado em, um Servidor Web para que possa ser
acessado por outros aplicativos.
A partir do projeto Windev escolhido para ser um servio XML o Windev ir criar
automaticamente:
Uma livraria Windev correspondente, um arquivo com a extenso .WDL.
Esta livraria conter as procedures do seu servio Web. Estas procedures
podem ser usadas por uma aplicao que utilize ou seu servio Web XML.
Um arquivo XML. Este arquivo ir conter a descrio do servio XML Web
no formato WSDL (Web Services Description Language). Linguagem de
definio de Servios Web.
Para tornar o seu servio Web disponvel, estes arquivos, bem como as
respectivas Dlls do Windev, devem ser instaladas em um computador que atue
como servidor Web. Este computador ser o computador Servidor SOAP Windev.

35

:LQGHY3ULPHLURVSDVVRV

7HVWDQGRRVHUYLoR:HEQDPiTXLQDGHGHVHQYROYLPHQWR
Para poder testar o Servio em sua mquina voc precisa configurar um
Servidor de Internet nesta mquina.
Configurando o Apache Server
Para instalar um servidor SOAP para o Apache, voc deve ter a verso 1.3
do Apache na estao.
1. Abra o arquivo httpd.conf usando o Notepad do Windows. Este arquivo
est localizado no subdiretrio conf da sua Instalao Apache. Escolha o
diretrio default de instalao: C:\PROGRAMFILES\APACHE\APACHE
GROUP\APACHE\CONF
2. Localize a seo referente ao suporte de objetos compartilhados. Para
fazer isto procure pela linha #Dynamic Shared Object (DSO) ou pela
palavra chave LoadModule.
3. Adicione a linha:
Para testes em sua estao
LoadModule windev_m odule < WinDev 8 set up direct or y> \ Dat a\ WD80sapa.dll

Finalmente para instalar o servidor SOAP

LoadModule windev_module <Setup directory of the WD80SAPA.DLL DLL>\WD80sapa.dll

1RWDV
Se o diretrio especificado contiver espaos voc deve colocar aspas
(Diretorio com espaos).
Esta linha no pode comear com o sinal #
4. Localize a seo relativa aos manipuladores de queries. Para fazer isto, ou
localize a linha " $GG+DQGOHU a qual permite que se mapeie os arquivos
de extenso de manipuladores ou a palavra chave $GG+DQGOHU .
5. Adicione a seguinte linha:
$GG+DQGOHUZLQGHYPRGXOHVRDS
Nota: Esta linha no deve comear com cerquilha (#)
6. 6HYRFrHVWLYHULQVWDODQGRXPVHUYLGRU62$3FOiVVLFR, a instalao do
servidor est completa.
Configurando o IIS 5.1
Para instalar o servidor SOAP com o IIS 5.1 no Windows 2000 o Servidor
IIS deve estar instalado na sua mquina.
1. A partir do Painel de Controle, selecione, Ferramentas Administrativas e
em Seguida Gerenciador de Servios da Internet Internet Services
Manager.
2. Escolha na lista esquerda o servidor ao qual voc quer adicionar o
Servidor SOAP.
3. No painel da direita, selecione um Web site (por exemplo Default Web
site).
4. A partir do menu popup selecione Propriedades e em seguida a guia
Home directory

36

:LQGHY3ULPHLURVSDVVRV
5. Clique no boto configurar (Configuration) e em seguida no boto
Adicionar(Add).
6. Clique em Executvel (Executable e selecione o arquivo WD80SIIS.DLL
Para testar a partir
de sua estao de
trabalho,
este
arquivo deve estar
localizado
no
subdiretrio data do
Windev8.
PaRA
INSTALAR
o
servidor SOPA final,
este arquivo deve
estar localizado no
diretrio de setup de
sua aplicao.
Preencha o cam po ext ension, com .soap.
Desmarque o check box Check that the file exists.
Clique no boto OK para finalizar.
7. Se voc estiver instalando um servidor SOAP tradicional a configurao
est pronta
Se estiver instalando um Servio Web XML, realize as seguintes operaes
adicionais
8. Copie o arquivo XML contendo a descrio do Servio Web XML para o
diretrio especificado na opo Access path. Para acessar este arquivo
XML, use a seguinte linha de comandos.
KWWS1RPHGR6HUYLGRU62$3RX(QGHUHoR,3!1RPHGRDUTXLYR
;0/!;0/
1RWDVoc pode tambm copiar este arquivo XML para outro diretrio. Consulte o
help sobre o uso do Servidor HTTP.
9. A instalao do Servio Web XML no servidor SOP est concluda.
Configurando o Administrador
SOAP
1. Execute o administrador
SOAP
(Aplicao
WDSOAPConfig.EXE).
Este administrador pode
ser
encontrado
no
diretrio de sua aplicao
(ou em um diretrio
especfico se ele
j
estiver instalado).
2. Configure os seguintes
37

:LQGHY3ULPHLURVSDVVRV
parmetros :
7LPHEHIRUHXQORDGLQJQDXQXVHG:'/ ;
se diversas livrarias (arquivos .WDL) relacionados com a aplicao SOAP
server (ou servios XML) forem encontradas na estao, esta opo
permite configurar um tempo mximo para limpar uma livraria no usada na
memria. Quando uma livraria limpada da memria o cdigo de
encerramento do projeto executado.
0D[LPXPQXPEHURI:'/LQPHPRU\
se diversas livrarias (arquivos .WDL) correspondentes a aplicaes SOAP
(ou Servios Web XML) forem localizadas na estao, esta opo permite
que voc configure o nmero de WDLs carregados simultaneamente na
memria. Quando este nmero recuperado, as livrarias mais antigas no
momento, na memria, so automaticamente fechadas. Ao fechar a
livraria, o cdigo de finalizao do projeto executado.
6DYLQJDORJ /2* 
Esta opo possibilita salvar em um arquivo texto, todas as operaes
realizadas no servidor SOAP. Para cada operao a data e a hora so
especificadas. Este arquivo pode por exemplo conter as seguintes
mensagens:

Loading the WDL X


Query reception: calling the X function of the WDL Y
The call to function X failed
The call to function X was successful
Limit of WDL in memory reached
Unloading WDL X

/RJILOHDiretrio do servidor no qual o arquivo de log deve ser criado.


:'//RFDWLRQ Diretrio do servidor onde a livraria do Servidor SOAP est
localizada.
Note Se o diretrio no existir, o WDL dever ser localizado em
C:\modulessoap.
:LQGHY '// /RFDWLRQ Diretrio onde o as DLLs do Windev usadas pelo
servidor SOAP esto localizadas. Se o diretrio no existir, as DLLs sero
localizadas em c:\modulessoap .
/RFDWLRQ RI ILOHV LQ H[HFXWLRQ Diretrio de Hyper files. Quando do
carregamento da livraria do servidor SOAP.
- Analise associada com o servidor SOAP que ser carregada
automaticamente;
- Diretrio de dados especificado na anlise que
automaticamente corresponde a este diretrio.
Aps estas configuraes, j ser possvel testar a sua aplicao WEB XML na
estao de desenvolvimento:
Reinicie o servidor Web, aps as configuraes.
Iniciei o teste a partir da aplicao SOAP cliente.
Para iniciar os t est es da aplicao SOAP client e adot e os m esm os
procedim ent os do t pico &RPRLPSRUWDUXPVHUYLoR:HE

38

:LQGHY3ULPHLURVSDVVRV

&DUDFWHUtVWLFDVGDSURJUDPDomR:LQGHYFRP64/

Uma das caractersticas das linguagens 4GL e 5GL (caso do Windev) a


utilizao da RAD (Rapid Aplication Developer) para gerar aplicativos inteiros a
partir de algumas definies e anlises. Entretanto, quando se trabalha com
Bancos de Dados SQL (via ODBC ou via OLDB) nem tudo o que gerado pelo
RAD benfico ao sistema. Entretanto estas particularidades no so
documentados nos manuais da linguagem e s com o uso da ferramenta no dia a
dia que descobrimos certas pecularidades que precisam ser levadas em conta
quando se desenvolve um aplicativo SQL com a W-Language.

$VVLVWHG,QSXW

Este recurso que imita o Auto completar no estilo do Explorer, excelente


para arquivos do tipo Hyperfile (ISAM). O usurio digita o incio do contedo do
campo e o Windev se encarrega de inserir o resto do contedo. Em formulrios de
entrada de dados parece ser uma excelente idia. Entrentanto, quando se usam
bases de dados externas o mecanismo realiza diversos VHOHFWV de busca no

banco de dados para cada caractere digitado no campo o que causa um trfego
de rede infernal. Para pequenas bases de dados at pode ser deixado ativo mas,
com grandes bases de dados o ideal desabilitar esta opo.

39

:LQGHY3ULPHLURVSDVVRV

3DVVDQGRSDUkPHWURVSDUDXPDMDQHOD

Uma janela pode:


Receber parmetros quando for aberta
Retornar um valor quando for fechada.
Estas janelas se comportam como se fossem uma procedure que podem ou no
retornar valores. Este tipo de janelas muito usado nos seguintes casos:
Janelas de calendrios, onde uma data enviada como parmetro para a
janela no momento em que ela aberta (exemplo, o dia de hoje) e retorna a
datga selecionada, no momento em que fechada.
Janelas de pesquisa, que recebem o valor a ser pesquisado de uma janela
imediatamente anterior.
Janelas de Login que retornam as senha digitada.

&RPRSDVVDUXPSDUkPHWURQDDEHUWXUDGDMDQHOD

Para passar um parmetro para uma janela no momento de sua abertura:


Declare uma procedure na seo *OREDO GHFODUDWLRQV. O nome desta
procedure deve ser idntico ao nome da janela. Os parmetros para esta
procedure corresponde aos parmetros passados para a janela. Por
exemplo a janela CALENDARIO permite manipular as datas em um
controle do tipo calendrio. Esta janela, na sua abertura aguarda por um
parmetro que especifique a data que deve ser apresentada selecionada
quando a janela for aberta.
'HFODUDomRGHYDULiYHLVJOREDLVSDUDDMDQHOD&DOHQGDULR
PROCEDURE Calendario(sDateSel)
// sDateSel, o parmetro que especifica a data a ser selecionada.
// no momento da abertura da janela.
Este parmetro pode ser chamado a partir de um dos seguintes processos da
janela:
%RW}HVORFDOSURFHGXUHVHWF
Por exemplo no processo ,QLWLDOL]DWLRQ da janela Calendario
//O controle DateControl um campo de entrada
// ou um Edit control
// ele contm o valor para o parmetro sDateSel
DateControl = sDateSel
Em seguida vamos passar o parmetro para a janela no momento de sua abertura
atravs de uma das seguintes funes de abertura: 2SHQ2SHQ&KLOG,
2SHQ6LVWHU ou 0',2SHQ.
Por exemplo, o boto 6HOHFLRQDFDOHQGiULR!! em uma determinada janela,
usado para abrir a janela Calendrio. Quando esta janela for aberta, a data de
hoje passada como parmetro.
//Abre a JanelaCalendario com a funo Open
//Passa a data de hoje( Today()) como parmetro
Open(JanelaCalendario, Today())
onde TODAY() uma funo do Windev que retorna a data do Sistema
Operacional.
40

:LQGHY3ULPHLURVSDVVRV

&RPRUHWRUQDUXPSDUkPHWURQRIHFKDPHQWRGHXPDMDQHOD

muito comum passarmos um parmetro para uma janela, realizarmos


algum processamento nesta janela e recebermos um retorno desta janela aps o
processamento (comportamento de funo).
Para retornar um valor quando a janela for fechada, utilize a propriedade
5HWXUQHG9DOXH no processo que chama a funo de fehcamento da janela
&ORVH.
Por exemplo, na JanelaCalendario, o boto 2.!! e o boto
&DQFHO!! fecham a janela depois que os valores so inicializados para
retornar:
// Evento clique do boto 2.!!da JanelaCalendario
// O usurio final clicou em OK
// A data entrada no control DateControl retornada
MyWindow..ReturnedValue = DateControl
//Fecha a Janela
Close()

//Evento clique do boto &DQFHO!! da JanelaCalendario


//O usurio final clicou em CANCEL,
//Uma string vazia ser retornada
MyWindow..ReturnedValue = ""
//Fecha a janela
Close()
Voc tambm pode usar a propriedade 5HWXUQHG9DOXH no processo Closing
(fechamento) da Janela.
//Uma data foi entrada no controle DateControl
IF DateControl = "" THEN
//Nenhum dado foi digitado
//O controle est vazio
MyWindow..ReturnedValue = ""
ELSE
//Uma data foi digitada
MyWindow..ReturnedValue = DateControl
END
Voc tambm pode recuperar o valor retornado pela janela no momento de seu
fechamento para uma varivel. Esta varivel ir conter o resultado da funo
2SHQ.
Por exemplo o boto 6HOHFLRQD &DOHQGiULR!! da nossa janela usado para
abrir a nossa -DQHOD&DOHQGDULR. Quando abrimos esta janela, com a funo
2SHQ, a data de hoje (Today()) passada como parmetro. O valor retornado pela
janela quando fechada corresponde ao valor enviado pela funo 2SHQ. Este
valor recuparado na varivel ResultDate:
//Abre a JanelaCalendario
//ResultDate uma varivel string contendo o
//valor retornadado pela JanelaCalendario
ResultDate =Open(JanelaCalendario, Today())
//Analisa o resultado retornado pela janela
41

:LQGHY3ULPHLURVSDVVRV
IF ResultDate = "" THEN
Info("Nenhuma data foi selecionada")
ELSE
Info("Data Selecionada: " + ...
DateToString(ResultDate))
END
O processamento do boto 6HOHFLRQDFDOHQGiULR!! interrompido at que a
janela -DQHOD&DOHQGDULR seja fechada.

3DUkPHWURVSDVVDGRVSRUYDORU
Se os parmetros passados para uma janela so modificados nesta janela,
estas modificaews somente se aplicam a esta janela. O valor destes
parmetros no so modificados no processo chamador.
Por exemplo:
1. Uma varivel chamada MinhaData declarada no cdigo do boto
6HOHFLRQD &DOHQGiULR!! . Esta varivel contm a data de hoje (por
exemplo MinhaData = Today())
2. Esta varivel passada como um parmetro para a janela
-DQHOD&DOHQGDULR. O Parmetro sDateSel contm o valor da varivel
MinhaData.
3. O valor do parmetro sDateSel modificado na janela -DQHOD&DOHQGDULR
(por exemplo: sDateSel = 01072004 ).
4. O valor da varivel MinhaData no modificado.

&RPRID]HU"

As sees a seguir respondem algumas perguntas para quem est


comeando com o Windev, o famoso How to, ou como fazer....

&RPRSHUVRQDOL]DUXPDPiVFDUDGHHQWUDGD

O Windev oferece dois tipos de mscaras:


Mscaras de entrada ou LQSXW PDNV que definem caracteres que sero
entrados pelo usurio final em controles de janela. Algumas vezes, estas
mscaras podem ser usadas para modificar os valores atribudos para um
controle de janela via programaop (uppercase/lowercase
maisculas/minsculas)
Mscaras de sada ou GLVSOD\ PDVNV os quais definem caracteres que
sero impressos em controles de relatrios.

$VPiVFDUDVHR:LQGHY

Com relao aos tipos de mscaras uma mscara pode ser:


3UH GHILQLGD O Windev fornece uma grande quantidade de mscaras
dependendo do tipo de controle, (string, numrico, etc...). Estas mscaras
so acessadas clicando-se na caixa drop down que existe na caixa de
definio dos campos GHVFULSWLRQ e so setadas individualmente, ou seja,
42

:LQGHY3ULPHLURVSDVVRV

campo a campo. Observe na figura ao lado a grande variedade de


mscaras disponveis para
campos numricos. Sempre
que o controle de entrada
(campo) pertencer a uma
janela, ser habilitada uma
configurao de entrada de
dados, uma LQSXWPDVN.
3HUVRQDOL]DGD
simplesmente
entre
a
mscara que voc deseja
que seja aplicada ao campo
e o Windev se encarrega de resolver o resto do cdigo de uma maneira
muito simples. Por exemplo:para a mscara do CEP a mscara
personalizada
para
um campo do tipo
string seria definida
como
99.999-999
conforme figura ao
lado o que em tempo de execuo far com que o usurio digite livremente
os nmeros, por exemplo
84600000 e o Windev o
converta em uma cadeia de
caracteres no formato 84.600000 conforme se demonstra
no formulrio da figura. Desta
forma possvel configurar
tambm as mscaras para
nmeros de telefone, algo
como 999-(999)999-99-99, o
que em tempo de execuo
poderia resultar numa entrada
de dados semelhante a: 014(051)441-46-78
Se nenhuma mscara for
especificada,
nenhuma
formatao ser aplicada ao
controle. Observe que a introduo das mscaras personalizadas
absolutamente livre, podendo inclusive serem criadas matrizes emelhantes
s contas contbeis do tipo 1.11.111.000.00001-1, por exemplo.

$SOLFDo}HVTXHXVDPPDLVGHXPLGLRPD PXOWLOtQJHV 

As mscaras de dados podem variar de um idioma para outro. O Windev


permite que mscaras para cada tipo de idioma sejam definidas de acordo com o
idioma escolhido. Basta clicar no boto ao lado da caixa de seleo de mscaras
para que seja permitido escolher o idioma a que se aplica uma determinada

43

:LQGHY3ULPHLURVSDVVRV
mscara. De acordo com as linguagens configuradas para o projeto sero exibidas
as respectivas opes. No caso da figura acima o projeto foi setado para ingls e

francs.

&RQWUROHV7LSR7H[WR
Em janelas, por default, nenhuma mscara associada com controles do
tipo texto (strings). Voc pode escolehr ente:
Selecionar uma mscara pr definida
Criar uma mscara de entrada personalizada.
1RWD: se o controle estiver ligado a um campo de arquivo, o valor armazenado no
arquivo que ser mostrado.
Em relatrios, por default, nenhuma mscara estar associada a um controle do
tipo texto. Voc pode selecionar uma mscara pr definida. Mscaras
personalizadas no so suportadas em relatrios. Isto quer dizer que, se
quisermos usar uma mscara especial em nossos relatrios deveremos gravar o
campo com o formato que desejamos apresentar ou ento criar uma varivel para
o relatrio que receba o contedo formatado a partir do arquivo mostrando ento a
varivel ao invs do campo.
&8,'$'2 (P UHODWyULRV VRPHQWH DV VHJXLQWHV PiVFDUDV SUp GHILQLGDV VmR
VXSRUWDGDV SRU FRQWUROHV GR WLSR WH[WR &DS ILUVW OHWWHU SULPHLUD OHWUD
PDL~VFXD  $OO FDSV WRGDV DV OHWUDV PDL~VFXODV  FDL[D DOWD  RX $OO
ORZHUFDVH WRGDVDVOHWUDVPLQ~VFXODV 
7DEHODGH0iVFDUDV
Mscara

Efeito

programao

Exemplos

None

Sem mscara

Sem efeito

Como digitado

Cap First Let t er

Se uma cadeia de caracteres for entrada Se uma cadeia de caracteres


em minsculas a primeira letra ser
for entrada em minsculas a
convertida para maiscula
primeira letra ser convertida
para maiscula

All caps

Todas as letras sero convertidas para


maisculas

Todas as letras sero


convertidas para maisculas

44

Ave5a8B
J4-h89

TE-55E
ABC-1429-AB

:LQGHY3ULPHLURVSDVVRV
All lowercase

Letters

Numbers

Todas as letras sero convertidas para


minsculas

Todas as letras sero


convertidas para minsculas

Te-55e

Somente letras(minsculas ou
maisculas) podero ser entradas.

Somente letras(minsculas
ou maisculas) podero ser
entradas

Te-55e

S sero aceitos nmeros na entrada

Todos os caracteres devero


ser autorizados

99999

Abc-1429-ab

Abc-1429-ab

88888
555555

Letters + numbers

Somente letras (maisculas/minsculas)


e nmeros sero aceitos

Somente letras
(maisculas/minsculas) e
nmeros sero aceitos

Abc1544
ABNC875
5715A25

Uppercase letters

Uppercase letters
+ numbers

Telephone
number

Name and full


path of a file

Todas as letras sero convertidas para


maisculas

Todas as letras sero


convertidas para maisculas

MACACO

Somente letras e nmeros podem ser


entrados

Somente letras e nmeros


podem ser entrados

HT8I66

As letras sero automaticamente


transformadas em maisculas

As letras sero
automaticamente
transformadas em
maisculas

Somente os seguintes caractes sero


aceitos

Somente os seguintes
caractes sero aceitos

Nmeros

Nmeros

- sinal de menos

- sinal de menos

. ponto

. ponto

( parntesis esquerdo

( parntesis esquerdo

) parntesis direito

) parntesis direito

espao

espao

Somente os caracteres permitidos pelo


sistema operacional podem ser
entrados.

Somente os caracteres
permitidos pelo sistema
operacional podem ser
entrados.

Mximo 260 caracteres


C:\diretorio\arquivo
INSEE number

Somente nmeros podem ser entrados


O primeiro nmero ser sempre 1 ou 2
Mximo 13 nmeros

PORCO

66KP35
B21AC4

(014)55-15

C:\user\arquivo.txt

Mximo 260 caracteres


\\diretorio\arquivo
Somente nmeros podem ser 123456
entrados
212354
O primeiro nmero ser
sempre 1 ou 2
Mximo 13 nmeros

INSEE number +
key

Somente nmeros podem ser entrados


O primeiro nmero ser sermpe 1 ou 2

Somente nmeros podem ser 213454


entrados
123457
O primeiro nmero ser

45

:LQGHY3ULPHLURVSDVVRV
Mximo 15 nmeros

sermpe 1 ou 2
Mximo 15 nmeros

Letter then
Letter/Digit

O primeiro caracter ser sempre uma


letra maiscula ou minscula

Todos os caracteres so
permitidos

Letter then Letter


(CAP)/Digit

O primeiro caracter ser sempre uma


letra maiscula enquanto os outros
sero maisculas ou nmeros

Todos os caracteres sero


permitidos

QA1435

Numbers,.+-''

Somente os seguintes elementos podem


ser entrados:

Todos os caracteres so
permitidos

+586,21

Nmeros

An121545
Cj1521

ACB112

,1454
-1318

Caracteres

.035

, virgula

25 12

. ponto
+ sinal de mais
- sinal de menos
espao
File name (without
its path)

E-mail address

Caracteres permitidos pelo Sistema


Operacional

Caracteres permitidos pelo


Sistema Operacional

Mximo 260 caracteres

Mximo 260 caracteres

Todos os caracteres podem ser entrados Todos os caracteres podem


com exceo de:
ser entrados com exceo
de:
( parntesis esquerdo
( parntesis esquerdo
) parntsis direito
) parntsis direito
> sinal de maior
> sinal de maior
< sinal de menor
< sinal de menor
, vrgula
, vrgula
; ponto e vrgula
; ponto e vrgula
apstrofo
apstrofo
aspas
aspas
\ barra invertida
\ barra invertida
espao
espao

Nomes de arquivos sem


path.

fulano@fulano.com.br

O nm ero I NSEE apenas um ident ificador individual. Est e


nm ero pode assum ir os seguint es valores

1 = m asculino 2 = fem inino

46

:LQGHY3ULPHLURVSDVVRV

os dois lt im os dgit os do ano

os dgit os do m s

quant os s out ras opes no achei uso em port ugus.

O nm ero I NSEE pode ser com plet ado por um nm ero de 2 dgit os
cham ado key , Est a key ( chave) usada para verificar o nm ero
I NSEE.

0iVFDUDVSHUVRQDOL]DGDV

As mscaras podem ser definidas pelo usurio usando os seguintes


caracteres:
9 nmeros isolados
C dgito ou espao
L upercase ou letra
I lowercase ou letra
A upercase ou caractere alfa numrico
a lowercase ou caracter alfa numrico
? qualquer caractere
onde upercase = letra maiscula
e lowercase = letra minscula
Qualquer outro caractere definido como realmente .
&8,'$'2 0iVFDUDV GH HQWUDGD SHUVRQDOL]DGDV VmR DSOLFDGDV VRPHQWH j
9$/25(6',*,7$'26(VWDVPiVFDUDVQmRVHDSOLFDPDYDORUHVLQLFLDLVRX
YDORUHVDWULEXtGRVYLDSURJUDPDomR
1RWD YRFr SRGH GHILQLU XPD PiVFDUD QXPpULFD HP XP FRQWUROH WH[WR 2
YDORUUHFXSHUDGRVHUiXPFDUDFWHUHQXPpULFRWUDQVIRUPDGRHPXPDVWULQJH
QmR XP YDORU QXPpULFR 3RU H[HPSOR XPD SODFD GH YHtFXOR SRGHULD VHU
IRUPDWDGDFRPR&&&

'LIHUHQoDVHQWUHWLSRVQXPpULFRVHPRQHWiULRV
As mscaras oferecidas para os valores monetrias so as mesmas que
aquelas usadas pelos tipos numricos. A diferena est na preciso dos nmeros.
Os tipos moeda possuem 17 dgitos sginficativos para a parte inteira e um mximo
de 6 dgitos para a parte decimal. Voc tambm pode adicionar o sinal de cifro
entrada de moeda.
Exemplo:
5
1RWD
Ser mostrado ++++ no controle, de acordo com as seguintes condies:
- atribuio via programao
- o nmero de dgitos da parfte inteira maior que o nmero da parte inteira da
mscara. Por exemplo, se as mcara 99,999 e o varlo atribujdo pela
programao 123456 o valor ++++ ser mostrado no controle.

47

:LQGHY3ULPHLURVSDVVRV

A part e decim a ser arredondada se um a das seguint es condies


ocorrer:
- at ribuio via program ao
- O nm ero de dgit os para a par t e decim a for m ario que o nm ero
de dgit os da part e decim al da m scara.
Por exem plo, se a m scara for 99,999.99 e o valor at ribudo v ia
program ao for 12345.159, o valor 12,345.16 ser m ost rado no
cont role.

&RQWUROHVGRWLSR'DWD

Uma lista de mscara pr definidas oferecida para datas:


'
DD/MM/YYYY'("01/02/1979") -> dia mes e ano com 4 dgitos no ano
'
DD/MM/YY'("01/02/79") -> dia mes e ano com 2 dgitos no ano
'
MM/DD/YYYY'("02/01/1979") -> mes dia e ano com 4 dgitos no ano
'
MM/DD/YY'("02/01/79")-> mes dia e ano com 2 dgitos no ano
'
YYYY/MM/DD'("1979/02/01")-> ano mes e dia com 4 dgitos no ano
'
YY/MM/DD'("79/02/01")-> ano mes e dia com 2 dgitos no ano
'
DD/MM/YYYY HH:mm:SS'("01/02/1979 21:35:15" )Time stamp com dia mes e
ano, hora minuto e segundo
'
MM/DD/YYYY HH:mm:SS' ("02/01/1979 21:35:15") a mesmoa formatao s
quem com ms dia e ano.
'
DDD DD/MM/YYYY'("Tera Feira 01 Fevereiro 1979" ) data por extenso.
Data do Sistema. O Windeve pega o formato do Sistema Operacional.

0iVFDUDVSHUVRQDOL]DGDV
DDDD Dia da Semana exemplo: Segunda Feira
DDD Dia da semana abreviado exemplo: Seg
DD Expresso do dia usando nmeros exemplo: 25
MMMM nome do ms exemplo: Janeiro
MMM nome do ms abreviado exemplo: Jan
MM Expresso do dia usando nmero 01
YYYY Ano com 4 dgitos exemplo: 2004
YY ltimos 2 dgitos do ano exemplo: 04
HH Expresso de horas em nmeros exemplo 13
mm Expresso dos minutos em nmeros exemplo 45
SS Segundos expressados em nmeros
Estas mscaras podem ser usadas combinadas entre si, por exemplo:
''0000<<<<DV++PP66
)HYHUHLURjV

48

:LQGHY3ULPHLURVSDVVRV

&RQWUROHVGRWLSR+RUD
Uma lista de mscaras pr definidas oferecida pelo Windev.
Voc pode escollher entre:
Selecionar uma mscara pr definida
Criar uma mscara personalizada.
As seguintes mscaras pr definidas podem ser usadas:
HH:MM Hora minuto
HH:MM:SS Hora Minuto Segundo
HH:MM:SS:CC Hora minuto segundo centsimos de segundo
System time. Depende da da mscara de entrada selecionada nos parmetros
regionais do Sistema Operacional. (Opo Regional no Painel de Controle do
Windows.

0iVFDUDVSHUVRQDOL]DGDV
HH Hora
MM Minuto
SS Segundo
CC Centsimos de segundo

&RPRFDSWXUDUDMDQHODGHXPDDSOLFDomRSDUDRDPELHQWHGR
:LQGHY

Para capturar uma tela de outro programa, inclusive suas opes de menu
no momento da captura proceda da seguinte forma. Com a IDE do Windev aberta,
minimize-a e rode o aplicativo cuja tela quer capturar.
Assim que a tela estiver rodando, ative novamente o
Windev maximizando-o e clique em ,QVHUW !1HZ
:LQGRZ a partir do Menu principal do ambiente de
desenvolvimento do Windev.
Ser aberta a caixa de dilogo 1HZ :LQGRZ
apresentando as guias com as janelas disponveis
5$', que so as janelas assistidas do Windev,
6WDQGDUG, que so as janelas padronizadas do Windev
e na ltima guia ,PSRUW, estar disponvel a janela da
aplicao ativa em segundo plano sob o ambiente do
Windev.
Observe na figura abaixo que a janela em segundo plano est disponvel para ser
importada para o nosso aplicativo Windev.

49

:LQGHY3ULPHLURVSDVVRV

Est disponvel para importar a janela 602Album (alm de outras claro, mas
esta que nos interessa), a qual iremos importar para o nosso app. Marque o check
box *HQHUDWHLPDJHVIRUXQUHFRQL]HGFRQWUROV. Em seguida pressione o boto
2.!!.
Ser mostrada a imagem da janela do aplicativo em segundo plano com
uma caixa de dilogo do Windev .
Nesta janela sero mostradas normalmente 3 mensagens:
Search completed
Click OK to import the Window
Click Modify to Import Criteria

50

:LQGHY3ULPHLURVSDVVRV
Quando voc clica no boto 2.!! a janela e todos os controles disponveis
(isto aqueles que podem ser importados) sero importados para a sua aplicao,
conforme mostra a figura abaixo.
Todos os controles da janela capturada passar a constituir objetos de uma janela
Windev passando a ter as mesmas propriedades como se fosse controles criados
pela W-Language.
Voc pode agora configurar as propriedades dos controles clicando com o boto
direito do mouse sobre eles e acessar as suas 'HVFULSWLRQV bem como atribuir
&RGH a cada um deles.

Se optar por clicar no boto


details ir observar como a
importao dos controles
feita pelo Windev.
Observe na parte de baixo da
caixa
:LQGRZ ,QWHUIDFH
,PSRUW que cada controle da
janela importada tratado

51

:LQGHY3ULPHLURVSDVVRV
separadamente inclusive sendo mostrados os controles que no podem ser
importados. Detalhe, somente aplicativos 32 bit podem ter a sua interface
importada. Na realidade o Windev monta uma tabela com todos os controles da
janela importada e a partir desta tabela transforma cada um dos controles
importados em objetos que podem ser trabalhados via programao. como se
realmente a janela fosse clonada para o seu aplicativo. Na realidade o que
acontece. Uma nova janela Windev criada e a partir da tabela de controles toda
a janela clonada para o aplicativo Windev facilitando a importao da interface .
Isso permite, por exemplo, que se utilize os servios de um GHVLJQHU para
desenhar toda a interface, sem se preocupar com o cdigo que ser desenvolvido
pelos programadores.
Quando voc salvar a nova janela, vai observar que agora ela faz parte do projeto
de sua aplicao e pode ser chamada a partir de uma opo de menu, ou pode,

Janela
Importada

ser for o caso, ser uma janela principal que servir como menu para o seu
aplicativo

52