52
:LQGHY–3ULPHLURVSDVVRV 1 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH No ambiente de programação Windev uma Análise corresponde ao Dicionário de Dados, ou Modelador de Dados. Como estamos trabalhando com Banco de Dados PostgreSQL, vamos importar os dados para a nossa análise de um Banco PostgreSQL. &ULDQGRXPDQRYD$QiOLVH Estando na IDE do Windev, a partir do Menu Principal escolha : )LOH!1HZ Será aberta uma caixa de diálogo para seleção de um componente do projeto que será construído. Como você pode ver, a interface Windev é cuidadosamente desenhada, visando facilitar ao máximo a interação 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. A primeira tela $QDO\VLV &UHDWLRQ Nos informa que uma nova Análise será criada informando que uma Análise permite definir as estruturas de dados que serão usados no nosso aplicativo ou em nosso Website. Como iremos trabalhar, no momento, com aplicações Desktop, a Análise corresponde a uma modelagem de dados para a nossa Aplicação. Clique no botão 1H[W!!! para

3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

Embed Size (px)

Citation preview

Page 1: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

1

3ULPHLUR�SDVVR�±�&RQVWUXLQGR�D�$QiOLVH� No ambiente de programação Windev uma Análise corresponde ao Dicionário de Dados, ou Modelador de Dados. Como estamos trabalhando com Banco de Dados PostgreSQL, vamos importar os dados para a nossa análise de um Banco PostgreSQL.

&ULDQGR�XPD�QRYD�$QiOLVH�Estando na IDE do Windev, a partir do Menu Principal escolha : )LOH�!1HZ��� Será aberta uma caixa de diálogo para seleção de um componente do projeto que será construído.

Como você pode ver, a interface Windev é cuidadosamente desenhada, visando facilitar ao máximo a interação 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.

A primeira tela $QDO\VLV� &UHDWLRQ� Nos informa que uma nova Análise será criada informando que uma Análise permite definir as estruturas de dados que serão usados no nosso aplicativo ou em nosso Website. Como iremos trabalhar, no momento, com aplicações Desktop, a Análise corresponde a uma modelagem de dados para a nossa Aplicação. Clique no botão ��1H[W!!! para

Page 2: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

2

continuar o processo de Modelagem dos dados e acessar a próxima tela do Assistente. Nesta segunda tela vamos definir o nome da nossa análise e o diretório onde ela será gravada. Preenchemos o campo 1DPH com a expressão 3ULPHLUR indicando ser este o nosso primeiro projeto, de muitos que vamos desenvolver. Em seguida, definimos o diretório onde nossa Modelagem será gravada. No nosso exemplo, preenchemos o campo 'LUHFWRU\ com a expressão:

&�?0\�3URMHFWV?3ULPHLUR�ZG�?� Na realidade informamos ao Assistente que desejamos que a nossa Definição de Dados seja gravada no diretório 0\�3URMHFWV�da unidade &�, abaixo de 3ULPHLUR�ZG��No último campo, (um campo multi-linhas), podemos inserir observações sobre a Análise que estamos criando. Fizemos uma observação característica, informando ser esse o nosso primeiro projeto. Clique no botão ��1H[W!! para passar para a próxima tela. Esta terceira tela do Assistente, permite configurar uma senha , para a nossa Análise, isto é, se o ��&KHFN� ER[!! $QDO\VLV�ZLOO�EH�SDVVZRUG�SURWHFWHG�LQ�H[HFXWLRQ for marcado, serão habilitados os campos para digitar e confirmar uma senha para a Análise, em tempo de execução. Tomar cuidado com esta senha, pois conforme mensagens que observamos no fórum da linguagem, esquecer esta senha pode trazer sérios aborrecimentos. Se uma senha for habilitada sempre que a Análise for aberta, a senha será solicitada. Não vamos usar senha na nossa Análise de Exemplo.

Na tela 4 do Assistente é onde será feita a criação do arquivo. Você irá optar por criar um novo arquivo de análise, Selecionar um arquivo de análise previamente gravada ou Importar arquivos de uma base externa. Quando se trabalha com SQL utilizamos a opção ,PSRUW� ILOHV� IURP�DQ� H[WHUQDO� GDWDEDVH (Importar os arquivos de uma base externa) . Essa opção permite importar dados do SQL Server, Oracle, AS/400,

OLE DB, XML, Text, etc...

Page 3: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

3

Clique no botão ��1H[W!!� para continuar. Em seguida, na próxima tela, será aberta a caixa de diálogo 'DWD�6RXUFH�6HOHFWLRQ, que nos permite escolher uma fonte de dados. Três botões de rádio oferecem as opções:

• External Database • HyperFile 7 • HyperFile 5 ou 4

A 2a. e a 3a. opções são utilizadas com arquivos do tipo ISAM, ou seja, os arquivos proprietários do Windev. Para trabalhar com SQL (Oracle, SQLServer, e semelhantes) utilizamos a primeira opção ([WHUQDO�'DWDEDVHV. O ��&KHFN�ER[!!� )LOH�6WUXFWXUH�DOUHDG\� LPSRUWHG é utilizado somente com tabelas HyperFile. Clique no botão ��1H[W!!�para ir à próxima tela. A próxima janela é a janela de migração de dados 'DWD�PLJUDWLRQ.

Nesta janela iremos definir a forma como os dados serão utilizados. Se forem usados no formato em que se encontram, no caso das tabelas SQL ou se serão convertidos para HyperFile 7. A conversão para HyperFile 7 só é recomendada quando se convertem dados de outros arquivos I SAM e se deseja manter o padrão ISAM. Com tabelas SQL mantemos os dados no formato em que se encontram. Clique no

botão ��1H[W!! para prosseguir. A janela aberta a seguir, é o local ideal para configurar a forma como os dados serão 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 usuário do seu banco, ou o usuário padrão do PostgreSQL, como foi feito na nossa tela. Se for especificada uma senha para o banco, esta deverá também estar especificada na conexão 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 código.

Page 4: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

4

Na próxima tela, o Assistente de Análise trará todas as tabelas Serão 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 análise. Você pode importar todas as tabelas, utilizando o botão � ou tabela por tabela (é o processo mais usado), utilizando o botão �. Se ocorrer um erro, você pode utilizar o botão � para desfazer a importação de todas as tabelas, ou o botão �para importar a tabela selecionada. Se a tabela a ser importada contiver dados, você poderá ter um preview desta tabela para ter uma visão

do conteúdo do arquivo. Na parte inferior da janela um ��FKHFN�ER[!! possibilita visualizar também as tabelas do Sistema SGBD. Clique no botão ��1H[W!! para encerrar o processo de importação das tabelas. Será exibida uma tela informando que o processo de definição dos parâmetros de importação foi concluído. Clique no botão ��'RQH!! para que as tabelas sejam importados. De acordo com o suporte técnico da PCSOFT as chaves das tabelas não são importadas pelo Assistente quando se utiliza o driver ODBC. Entretanto as chaves podem ser configuradas manualmente

depois que o processo de importação for concluído. É 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 são requeridas pelo processo. Solicita que se verifique a existência 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 são importados normalmente. Há um projeto na PCSOFT de desenvolvimento de driver nativo para PostgreSQL e Firebird.

Page 5: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

5

Ao terminar o processo de importação 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 importação 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, estão presentes algumas particularidades interessantes do Modelador de dados do Windev.

<= Um campo numérico (integer) apresentará um identificador numérico (123) no lado esquerdo de sua

definição. <= Identifica um campo do tipo Date. Um campo do tipo Data é um campo tipo data real, não uma estrutura grupo como

acontece em algumas linguagens. <= A seqüência (ABC) identifica um campo do tipo string, ou um campo multilinhas, normalmente conhecido como campo

texto.

'HILQLQGR�DV�FKDYHV�GDV�WDEHODV�LPSRUWDGDV�QR�0RGHODGRU�GH�'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.

Page 6: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

6

Cada elemento do objeto é apresentado com as suas características. 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 são mostradas as propriedades. Na guia *HQHUDO são 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 botões de rádio .H\ para definir se o campo é chave, se é chave única ou chave com permissão de duplicação. Se desejar atribuir ao campo selecionado a condição de chave única clique no botão de rádio 8QLTXH�.H\. No campo Format você pode escolher um dos formatos existentes ou definir uma máscara de entrada de dados personalizada. A guia 5DG�*XL permite definir as características do campo que serão utilizadas pelo RAD no momento da geração da aplicação. As características definidas aqui serão aplicadas aos itens definidos na caixa de opções ,WHP�LQFOXGHG�E\�UDG no lado direto da tela.

Page 7: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

7

Um drop combo permite especificar diversas qualificações e propriedades adicionais ao controle associado com o campo. Quanto mais específico for o nível de especialização definido aqui, mais completo será o controle criado pela ferramenta RAD na hora da geração do aplicativo.

Na caixa ��GURS�OLVW!! você poderá definir o tipo de controle que será criado para

a linha da tabela. Existem diversas opções para controles, e se um deles for escolhido, diferente de 'HIDXOW�&RQWURO , a partir do botão � será possível definir configurações adicionais, inclusive sobre os idiomas que serão utilizados no projeto. Nesta fase, o ideal é deixar como 'HIDXOW� &RQWURO, e definir as propriedades mais tarde

no projeto, com um nível de detalhamento maior e de acordo com as necessidades do momento de programação. A guia 1RWHV permite associar notas explicativas ao campo.

Na parte inferior da tela, são apresentadas informações 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 configurações também desta tela possibilitam configurar se este campo estará disponível, isto é, se estará visível para a ferramenta WdEtat� um editor de relatórios voltado para o usuário final.

Page 8: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

8

Para encerrar as definições pressione o botão ��9DOLGDWH!!. Como foi visto acima, definir uma chave é muito simples, basta marcar se o campo é chave ou não.

Depois da validação um ícone representando uma chave é colocado ao lado do campo na lista de definições.

O campo que for definido com permissão de duplicação apresentará um ícone com duas chaves sobrepostas. Obrigatoriamente, qualquer tabela SQL, precisa de uma chave única. Existem outras definições para os campos, mas não são objetos de estudo no presente momento (este é um passo a passo para criar uma aplicação simples).

&RPR�FULDU�XPD�FKDYH�FRPSRVWD� Para criar uma chave composta, adote o seguinte procedimento. Mova o cursor para a última linha de definição do arquivo. Clique no ícone na parte superior do list box para que seja aberta a definição 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 botão � permite inserir um componente na chave enquanto o botão �retira um elemento da chave. Segundo o manual técnico da PCSOFT, o ideal é que o campo chave única da chave composta seja o último a ser incluído, aperfeiçoando sensivelmente o nível de validação dos campos para tabelas SQL.

Page 9: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

9

Clique no botão ��2N!!� para confirmar a criação da chave composta.

Clique no campo que contém o nome da chave para alterar o nome para aquele que você desejar (por uma questão de padronização dos nos de chave, por exemplo). A chave será criada como .H\�ZLWK�'XSOLFDWHV. Para transformá0la em uma chave única, clique no botão de rádio 8QLNH�.H\. Observe que foi criado um ícone com duas chaves com um sinal de + entre elas. Assim que a chave for criada o botão ��(GLW!!� estará disponível 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 análise podemos identificar as chaves compostas e as chaves simples bem como os índices. Uma vez definidos os índices o próximo passo é o estabelecimento das relações entre as tabelas uma vez que esta estrutura também não é importada quando se trabalha com ODBC.

Page 10: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

10

'HILQLGR�RV�UHODFLRQDPHQWRV�Estando com a Análise aberta, clique no botão ��&UHDWH� /LQN!! na barra de ferramentas do Windev.

O cursor mudará para o formato de um lápis. 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 Edição de Relacionamentos.

Nesta Janela é que serão estabelecidas as relações e as regras de integridade.

Observe que é gerado um diagrama de relacionamento e na parte inferior os botões de rádio 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:

Page 11: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

11

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 combinação de opções determina o relacionamento 1 para muitos. Pressione no botão ��1H[W!!�

Na tela que se abre em seguida, determinamos qual o campo da tabela mãe fará a ligação com a tabela filha. No caso, o campo código da tabela mãe. Na próxima tela, será definido qual o campo da tabela filha que estabelecerá a ligação entre as duas tabelas. Este campo será uma chave estrangeira e poderá ser duplicado na tabela filha, ao contrário da tabela mãe 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 são especificados no banco de dados, mas o modelador permite que alguns ajustes sejam feitos aqui. Estes ajustes dizem

Page 12: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

12

respeito à forma como o sistema irá gerenciar as operações de Inclusão, Alteração e Exclusão de registros.

Para cada opção crítica das regras de integridade referencial com relação ao grupo, há um controle drop com as opções. A regra para exclusão apresenta as seguintes opções:

A regra mais utilizada é a que proíbe a exclusão de um grupo enquanto existir ao menos uma empresa nele. Esta opção evita o

aparecimento de registros no arquivo de empresa quando se deleta um grupo. A regra para modificação, alteração 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 serão modificados. Pressione o botão ��'RQH!!� na última tela para terminar a definição dos relacionamentos. Os relacionamentos para todas as tabelas são feitos sempre partindo da tabela mãe para a tabela filha, onde a chave de ligação na tabela mãe sempre será uma

Page 13: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

13

chave única, enquanto na tabela filha a chave será uma chave com duplicação permitida. O diagrama de entidades é mostrado abaixo:

A figura a seguir mostra a composição dos diagramas pelas chaves. Definir os relacionamentos de forma adequada evita uma série de problemas no desenvolvimento futuro.

Clique no botão Generate Analysis para gerar e gravar a análise do seu projeto. Podemos dizer que o processo de geração da Análise, ou melhor, a Modelagem dos Dados foi concluída. A próxima etapa neste nosso manual Passo a Passo, diz

respeito à construção de um aplicativo completo utilizando a ferramenta de geração RAD do Windev. Embora cada elemento/objeto do projeto Windev possa ser gerado separadamente, a ferramenta RAD permite gerar uma aplicação intera rapidamente e de forma quase que

automática.

Page 14: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

14

6HJXQGR�3DVVR�±�5$'�� Vamos agora gerar a nossa primeira aplicação com o Windev. Será uma aplicação simples utilizando os recursos RAD do Windev 8.

A partir da interface IDE do Windev, escolha no menu )LOH a opção 1HZ para criarmos um novo projeto. No Windev, como você já deve ter notado, cada elemento do projeto é armazenado em lugares específicos, as análises, os projetos, os executáveis, e assim por diante, como convém à um verdadeiro ambiente de desenvolvimento.

Quando clicamos na opção 1HZ a caixa de elementos do projeto é aberta. Nesta caixa escolha 3URMHFW para dar início à construção de um novo projeto. Um Assistente de criação de projetos é iniciado para que as principais características do novo projeto sejam definidas. O Projeto agrupa os diversos elementos que compõe uma aplicação e o assistente irá “ fazer algumas perguntas “ para definir o projeto. À medida que estas perguntas vão sendo respondidas pelo

desenvolvedor, isto, é os campos das janelas do Assistente vão sendo preenchidas, o projeto vai sendo montado. A primeira janela basicamente faz uma explicação rápida de como o projeto será gerado. Clique no botão ��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 são preenchidos automaticamente pela ferramenta com base naquilo que você digitou para o primeiro campo. Entretanto, você pode modificar estas informações 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 diretório de armazenamento do mesmo. Em seguida pressione ��1H[W!! para passar à próxima janela. Em seguida iremos definir a Análise utilizada pelo projeto. Um projeto não precisa necessariamente de uma análise. Entretanto, o nosso projeto fará uso da análise que definimos anteriormente. Preencha o campo 8VH�H[LVWLQJ�DQDO\VLV�EHORZ (use uma das análises existentes abaixo), escolhendo uma das exibidas pela caixa ��GURS� GRZQ!! ou escolha na árvore de diretórios utilizando o botão �����!! .

Page 15: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

15

Todos os dados e definições da análise que elaboramos no primeiro passo deste manual, serão agora incorporados ao nosso projeto.

Clique no botão ��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 comporão 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 comporão os temas visuais do seu projeto. Você pode escolher um dos templates existentes navegando pelos botões �e � da janela de seleção de templates. Para o nosso projeto escolhemos o template Eiao, apenas para termos uma interface diferente. Clique no botão ��1H[W!! . A próxima 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 inglês, espanhol e português, onde o português será o idioma padrão.

Ao lado de cada bandeira com a descrição do país, marque o ��FKHFN�ER[!!� correspondente ao país ou países desejados. Após definir o país, pelo ���GURS�OLVW!!� escolha o idioma padrão. No caso do nosso projeto, será o português do Brasil. A próxima janela é a janela onde iremos definir se queremos que a nossa aplicação ao ser gerada gere também os montadores para a plataforma dot net.

Como este é o nosso primeiro projeto, não vamos usar os montadores dot net. Clique no botão ��1H[W!! para configurar se o nosso aplicativo irá utilizar os serviços de um servidor XML da Web. Marque 'RQW�XVH�;0/ e clique no botão ���1H[W!! . O Windev permite que um projeto seja desenvolvido em equipe, isto é, diversos desenvolvedores poderão acessar e desenvolver no mesmo projeto residente em um diretório servidor. Para habilitar este recurso o desenvolvimento deve ser setado na próxima janela. Para este projeto inicial, marque ,�ZLOO�ZRUN�RQ�P\�RQ, �para que o projeto seja um projeto de desenvolvimento individual.

Page 16: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

16

Na etapa seguinte, a interface do assistente irá ler todos os dados da análise e todas as definições feitas por nós até o momento e irá iniciar a fase de geração do aplicativo. Ao terminar a gravação das definições será apresentada a janela de

opções de geração. As opções são para a geração completa de um aplicativo usando a ferramenta RAD, Criar uma Janela, ou acessar o Editor do Windev. No caso do nosso exemplo escolha a opção )XOO�$SSOLFDWLRQ�5$'�. Quando clicamos no botão RAD o assistente de Geração RAD será aberto trazendo novamente um passo a passo para criação assistida do projeto.

A primeira tela basicamente informa o que será feito e disponibiliza a aplicação para ser usada como framework para o desenvolvimento. Após o botão ��1H[W!! o gerador abre a escolha do tipo de interface. As aplicações mais consagradas pelo uso, são as que utilizam interface MDI, sendo portanto aconselhável o uso da interface MDI no nosso projeto. A interface MDI é o tipo de interface que permite que múltiplas janelas sejam abertas ao mesmo tempo utilizando os conceitos de interface de threads e janelas livres. Escolha a opção MDI (Multi Document Interface). Clique no botão ��1H[W!! e na próxima janela faça as escolhas do tipo de código a ser gerado entre as opções 3URFHGXUDO e 2EMHFWHG�2ULHQWHG�3URJUDP. Quando se usa o 3URFHGXUDO, na realidade é muito mais OOP do que pensamos. Deixe marcada a opção 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 botão ��1H[W!! . Na próxima janela defina a resolução das janelas para qual será gerado o sistema. Escolha 800 x 600 pixels, marque o ��FKHFN�ER[!!� Proportional Scroll Bar e marque o botão de rádio $UUDQJH�WKH�FRQWUROV�LQ�FROXPQV���

Page 17: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

17

Clique em seguida no botão ��1H[W!!. Será exibida a janela com os arquivos que serão usados pela ferramenta RAD. Aqui eventualmente um dos arquivos pode ser retirado da geração, se for de

interesse do desenvolvedor. Clique em seguida no botão ��1H[W!!. Neste momento o Windev irá processar a geração do aplicativo. Dependendo do tamanho do seu aplicativo este processo poderá demorar um pouco. Finalmente o seu projeto será gerado. Uma árvore gráfica 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 visão 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 botão Go da barra de tarefas. Pronto, se você seguiu o passo a passo corretamente sua aplicação será executada. ,PSRUWDQWH� Se os relacionamentos forem definidos adequadamente na análise, a ferramenta RAD gerará todos os elementos necessários ao seu projeto de uma forma que o seu trabalho “manual” será bastante simplificado.

$MXVWDQGR�R�FyGLJR�5$'� Na maioria das vezes, o código gerado pelo RAD, não é exatamente aquilo que desejamos. Faz-se necessário então ajustar o código RAD.

0DQLSXODQGR�0HQXV� 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 botão 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 opção de Menu com

Page 18: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

18

o nome escolhido por você. Clique com o botão direito do mouse na opção &DGDVWURV�%iVLFRV que você acabou de criar e no menu PopUp que aparecerá escolha a opção Insert Submenu. Dê um nome qualquer para este ítem. Agora vamos copiar as opções dos outros Menus, para os nosso &DGDVWUR�%iVLFR. Vá até o Menu *UXSR clique com o botão direito do mouse sobre ele, e escolha a opção Cut no menu popup que aparecerá. Em seguida vá até o Menu &DGDVWURV�%iVLFRV, clique com o botão direito do mouse sobre aquele item de menu que você criou e escolha a opção 3DVWH�%HIRUH�(Colar antes). Seu menu Grupo será colocado agora, abaixo de Cadastros Básicos e acima do item que você criou. Proceda da mesma maneira em relação às opções, Empresa, Filial e �Unidade��/LPSDQGR�WRGDV�DV�YDULiYHLV�GH�7HOD� Para limpar todas as variáveis de tela, use o comando Reset(true)

/LPSDQGR�XP�FDPSR�HVSHFtILFR�QD�WHOD� Para limpar somente um campo, iguale este campo a null, assim Campo=Null

&ULDQGR�7DEHODV�HP�0HPyULD��SUHHQFKLGDV�D�SDUWLU�GH�XP�DUTXLYR��4XHXH��Crie uma janela e nesta janela crie uma tabela cuja definição deverá ser Tabela Memória A Querie é declarado na área global da janela, conforme o código abaixo: Qtabela is Data Source Adicione os campos Name e FirstName, com os cabeçalhos Nome e CNPJ. Ambos os campos serão do tipo Texto. Crie os botões necessários à Manutenção da Tabela

3UHHQFKHQGR�D�WDEHOD�HP�0HPyULD� No botão preencher a tabela, insira o seguinte código: 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)

&ULDQGR�ILOWURV�HP�UXQWLPH� Acima do controle, Tabela ou Tabela em Memória, crie o campo que recebera a expressão a ser filtrada. Exemplo: Edit1 Ao lado deste controle, crie um botão cujo evento click deve ter o seguinte código:

Page 19: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

19

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. TabelaMemória é o nome da tabela em memória (Queue) -> o próprio controle.

&ODVVLILFDQGR�XPD�WDEHOD�$VFHQGHQWH� Crie um botão �&ODVVLILFDU�$VFHQGHQWH ! por exemplo. No evento &OLFN�RQ, insira o seguinte código Info("A tabela será classificada em ordem ascendente de nome") TableSort(TabelaMemoria,"TabelaMemoria.name")

'HVFHQGHQWH� Crie um botão �&ODVVLILFDU�'HVFHQGHQWH!�, por exemplo.No evento &OLFN�RQ� insira o seguinte código: Info("A tabela será classificada em ordem descendente de nome") TableSort(TabelaMemoria,"-TabelaMemoria.name") A única mudança é o sinal de menos (-) à frente da classificação.

$SDJDQGR�XPD�OLQKD� A partir de um botão, �$SDJDU�OLQKD!� por exemplo, inserimos um código para apagar a tabela em memória. IF YesNo("Quer mesmo apagar a linha"+TableSelect(TabelaMemoria)+" ?") THEN Info("A linha será apgada só da memória... o arquivo ficará intacto") TableDelete(TabelaMemoria) END

'RW�1HW� Você pode criar programas .NET (ou montadores .NET) a partir de uma aplicação Windev. Os montadores .NET são gerados diretamente a partir das Classes do Windev com todos os benefícios do ambiente RAD do WINDEV.

Page 20: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

20

Você também pode utilizar montadores .NET gerados a partir de outra linguagem em uma aplicação Windev

• Simplesmente especifique o uso de montadores .NET em aplicações novas diretamente no assistente de criação de aplicações.

• Em aplicações já existentes, simplesmente selecione .NET assemblies, para usar.

8VDQGR�GRW�1HW�HP�XPD�DSOLFDomR�:LQGHY� Para usar o dot net em uma aplicação Windev é necessário que sejam atendidos os seguintes requisitos:

• Instalar o Net Framework na estação onde o aplicativo será executado • Configurar o nível de segurança .NET • Criar as Dlls

7HFQRORJLD�'RW�1HW�±�$FHVVDQGR�:HE�6HUYLFHV� Ouvimos falar em .NET, J2EE, SOAP, WSDL, XML... e outras abreviações. Na verdade todas estas abreviações dizem respeito à mesma coisa XML. A plataforma Microsoft .NET e a SUN J2EE são usadas para exportar seus componentes como um servidor Web XML. Um serviço WEB é normalmente definido como uma aplicação acessível via Internet utilizando protocolos padronizados. Mais especificamente os serviços da Web permitem que computadores conectados através da Internet se comuniquem entre si. Você pode usar os serviços da Web a partir de uma estação cliente para executar procedimentos e processos e um servidor Web remoto. Esse servidor pode ser um servidor .NET ou um servidor J2EE . Usando uma aplicação Windev como cliente, podemos acessar estes serviços via protocolo http-SOAP, utilizando as funções 62$3[[�� 'RW1HW[[� e -�(H[[. Independente de qual plataforma de servidor esteja sendo usada (.NET, J2EE, etc) um serviço WEB é sempre acessível via SOAP.

(QWHQGHQGR�R�62$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 não disse nada! Explicando: É um protocolo de comunicação usado para executar procedimentos em um servidor remoto enviando e ou recebendo parâmetros. Na maioria das vezes este processo é baseado em protocolos http e XML , mas em alguns casos pode ser usado o protocolo SMTP. Os dados são 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 ação é realizada usando dois protocolos amplamente conhecidos: XML para a estrutura das mensagens e,

Page 21: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

21

HTTP para transferência de dados. É por causa disso que o SOAP independe de Sistema Operacional, Linguagens de Programação. Não 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... não tem problema nenhum. Além disso, pelo fato de usar o protocolo HTTP para transferir dados, o SOAP pode circular através de Firewalls sem nenhum problema. Ou seja, mesmo que o seu cliente ou usuário final utilize um Firewall para proteger a sua rede de ataques de Hackers e ou outros intrusos, não haverá problema algum em usar uma aplicação que utilize o um servidor SOAP. É verdade que o SOAP é um pouco complexo para usar. É por isso que um serviço padronizado WSDL, foi criado para fazer uma integração mais fácil entre os serviços Web e a sua aplicação. No Windev uma definição padrão permite ao Windev importar um serviço Web XML. Em poucas palavras, acontece o seguinte:

• Você seleciona um arquivo WSDL atachado a um serviço. • O Windev gera uma classe ou um conjunto de procedures que interagem

com este serviço. Você não precisa escrever nenhuma linha de código, 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... são geradas de forma global para você e você só tem que chamar os métodos das classes ou as procedures incluídas no seu APP pelo Windev, para ter acesso a um serviço WSDL.

&RPR�LPSRUWDU�XP�VHUYLoR�GD�:HE� Vamos usar este recurso interessante do Windev, para importar um serviço 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 estações meteorológicas espalhadas pelo mundo e cujas informações estão disponíveis em um Servidor dot Net. Crie um novo projeto. Este projeto receberá o nome de: Tempo Este projeto não usará nenhuma Análise. É claro que precisaremos ter uma conexão de Internet ativa e funcionando para continuar. Como vamos fazer uma importação de um recurso disponibilizado na Web a máquina do programador, no caso, precisa ter acesso a Web.

Page 22: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

22

Segundo Passo: Importando o Serviço Web Em primeiro lugar, vamos importar a estrutura do Serviço Web que nós queremos consultar. A partir do Menu Principal do Windev, clique na opção 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 importação de Serviços Web será iniciado . Clique no botão 1H[W . Na janela que se abrirá escolha através do botão de rádio da janela 7KH� GHVFULSWLRQ� LV� ORDGHG� LQ� WKH� DGGUHVV� EHORZ� (a definição é carregada a partir do endereço abaixo): Preencha o campo http:// com: ZZZ���EULQNVWHU�FRP�EJ[�ZHEVHUYLFHV�*(7B:HDWKHU�DVP[":6'/�Isto significa que iremos carregar a descrição do serviço diretamente da internet. (Como você deve ter visto no assistente, é possível carregar as definições de um arquivo). 127$�� 2� VHUYLGRU� RQGH� VH� ORFDOL]D� R� VHUYLoR� XVDGR� QR� QRVVR� WHVWH�� HVWi�ORFDOL]DGR�HP�XP�VHUYLGRU�GH�WHVWHV�$PHULFDQR��3RGH�VHU�TXH�TXDQGR�YRFr�HVWLYHU� OHQGR�HVWH�PDQXDO��R�VHUYLGRU�QmR�HVWHMD�PDLV�GLVSRQtYHO�� �3HGLPRV�GHVFXOSDV�DQWHFLSDGDPHQWH��VH�LVWR�RFRUUHU��3DUD�SRGHU�XVDU�HVWH�VHUYLoR�GD�:HE�FRPHUFLDOPHQWH��HOH�'(9(�VHU�LQVWDODGR��QR� 6(8� SUySULR� VHUYLGRU� :HE�� 3DUD� PDLRUHV� GHWDOKHV� VREUH� HVWH� VHUYLoR��OHLDV�DV�FRQGLo}HV�GH�XVR�GR�PHVPR��QR�VHJXLQWH�HQGHUHoR��KWWS���ZZZ���EULQNVWHU�FRP�%*;�� Depois de informar o nome do Servidor, e ler as importantes informações acima, clique no botão �1H[W! para continuar. Na janela seguinte, escolha o tipo de serviço Web. Como este serviço foi desenvolvido com tecnologia ASP.Net, é um serviço dot Net por excelência, portanto selecione .Net e clique no botão �1H[W!�. Você pode escolher entre gerar um conjunto de procedures ou uma Classe para usar o Serviço Web em sua aplicação. Por ser uma maneira mais fácil de entender, escolhemos a opção D�VHW�RI�SURFHGXUHV (um conjunto de procedures). O Assistente irá criar um conjunto de procedures globais onde cada procedure é criada para cada função do serviço Web. Não altere nada e clique no botão 'RQH. O Windev irá gerar um conjunto de procedimentos e o serviço Web estará agora integrado à sua aplicação. Você poderá localizar o conjunto de procedures geradas no Kouglof. Abra cada uma das procedures geradas pelo assistente e veja que o código gerado contém diversas funções Dot Net da W-Language.

Page 23: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

23

Exemplo: A função GetStation é definida da seguinte forma: PROCEDURE Get_Station(code) DotNet.Name[1]="code" DotNet.Type[1]=DotNetTypeChaîne DotNet.Value[1]=code bRes is boolean bRes=DotNetRun("http://www11.brinkster.com/bgx/webservices/GET_Weather.asmx", "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 funções do serviço Web para o nosso aplicativo podemos usar os métodos 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 permitirão conversar com um aplicativo dot Net No momento em que o processo é encerrado todas as procedures são 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.

Page 24: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

24

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

2. Chame esta janela Apl_dotnet 3. Para o título da janela, em português, “Aplicação Dot Net – Usando um

serviço Web Net” 4. Em seguida salve a janela.

Crie um campo de entrada chamado Nome_da_Estaçao . O rótulo do controle (título) deve ser 1RPH�GD�(VWDomR�0HWHRUROyJLFD.

Page 25: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

25

Adicione um campo de entrada chamado Temperatura cujo rótulo deve ser 7HPSHUDWXUD. – tipo numérico Adicione outro campo de entrada chamado Ponto, cujo rótulo deve ser 3RQWR�GR�2UYDOKR (não me pergunte o que é isso, pois não entendo nada de meteorologia). Mas é um dado que sempre aparece nas condições do tempo.- tipo numérico Adicione um campo de entrada chamado Umidade, cujo rótulo deve ser 8PLGDGH�GR�DU�(aqui será retornado o percentual de umidade relativa do ar).- tipo numérico. Crie mais um campo de entrada chamado pressao, cujo rótulo deve ser 3UHVVmR�DWPRVIpULFD. Não sei para que serve este dado, mas me parece ser um dado importante para quem entende de meteorologia. – tipo numérico. Crie um campo de entrada chamado Ceu,cujo rótulo deve ser &RQGLo}HV�GR�&pX.

Clique na guia Details e marque o check box 0XOWLOLQH�LQSXW. Isto vai permitir criar um campo texto na nossa janela. Voltando à janela redimensione e arranje os campos. Em seguida crie um botão Button1 cujo texto deve ser &RQGLo}HV� GR�WHPSR� . Escolha as imagens e a configuração conforme a figura ao lado. Se quiser pode criar um botão simples, sem maiores frescuras. Esse botão será o responsável pelo carregamento dos dados do Serviço Web dot Net para os campos da nossa aplicação. Prosseguindo crie

Page 26: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

26

um outro botão Button2 posicionando no canto inferior direito da janela, cujo texto deve ser )HFKDU. Crie ainda um terceiro botão Button3�� abaixo do Button1. Esse botão deverá ter o texto /LVWDU�3DtVHV�QR�6HUYLGRU. A principal finalidade é listar todos os países cadastrados no servidor. Ao lado do campo 7HPSHUDWXUD crie um controle estático (uma string) cujo texto deve ser JUDXV. Ao lado do campo 8PLGDGH�GR�DU crie um controle estático cujo texto deve ser �. Estes controles estáticos visam principalmente dar uma estética melhor à nossa janela. Quarto Passo: Escrevendo o código O serviço Web que estamos acessando aqui utiliza o formato XML para retornar as informações que serão processadas com as funções de tratamento XML da W-Language. De acordo com a documentação do serviço Web as mensurações de tempo são feitas de acordo com um código ICAO. O código ICAO identifica a estação meteorológica. Pelo fato de que não conhecemos este código (e mesmo que conhecêssemos, não seria possível guardar na cabeça), vamos recuperar as informações pelo nome da estação utilizando a função 6HDUFKB6WDWLRQ%\1DPH. Esta é uma das funções que foram recuperadas do servido dot Net. Clique com o botão direito do mouse no botão e insira o seguinte código fonte no evento &OLFN�RQ�%XWWRQ�. //Quando clicamos no botão XMLResult is string = " " XMLResult = Search_StationByName(Nome_da_Estaçao) ICAOCode is string = " " ICAOCode = XMLExtractString(XMLResult,"icao") IF ICAOCode=" " THEN Error("Estação " + Nome_da_Estaçao + " não localizada pelo serviço.") RETURN END IF Nome_da_Estaçao = "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 função Dot.net importada do serviço 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")

Page 27: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

27

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 declaração da variável XMLResult como uma cadeia de caracteres, ;0/5HVXOW�LV�VWULQJ� �³�³� Na mesma linha a variável é inicializada em branco. Na linha seguinte a variável XMLResult recebe o retorno da função que pega o nome da estação. ;0/5HVXOW� �6HDUFKB6WDWLRQ%\1DPH�1RPHBGDB(VWDoDR��Onde 6HDUFKB6DWLRQ%\1DPH, é a chamada procedure importada do servidor WebXml e nome da estação é o parâmetro passado para o procedimento pela nossa aplicação no momento em que o botão é pressionado. Quando clicamos no botão o campo 1RPHBGDB(VWDomR�da nossa janela já deve estar preenchido com o nome de uma das estações meteorológicas cadastradas no servidor dot Net. ;0/5HVXOW� �6HDUFKB6WDWLRQ%\1DPH�1RPHBGDB(VWDoDR��Recupera o código ICAO da estação utilizando a função XMLExtractString. Esse código corresponde ao tag ‘icao’ da sentença XML enviada pelo serviço. ICAOCode is string = " " ICAOCode = XMLExtractString(XMLResult,"icao") Em seguida é feita uma comparação e se a estação não for reconhecida pelo servidor será mostrado um aviso ao usuário. IF ICAOCode~=" " THEN Error("Estação " + Nome_da_Estaçao + " não localizada pelo serviço.") RETURN END

O tratamento do retorno da função 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 números, por exemplo. O funcionamento é totalmente diferente. Tanto que se você usar IF ICAOCode =" ", o procedimento não funciona e não exibe a mensagem acima. Pelo fato de se não existir a estação no servidor não ser retornado nenhum valor, a falta da mensagem poderá “desorientar” o usuário final. IF Nome_da_Estaçao = "Estancia Velha" THEN Temperatura= -58 Ponto= -15

Page 28: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

28

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 Estância Velha. Como é sabido, lá não existe estação meteorológica, mas fizemos um procedimento para que fossem retornados valores negativos e usando a função 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 decisões em cima destes dados. //Chamando a função Dot.net importada do serviço 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 à variável XMLResult as condições do tempo através da função *HWB:HDWKHU5HSRUW que recebe o parâmetro ICAOCode passado quando preenchemos o campo com o nome da estação. O campo 7HPSHUDWXUD é preenchido usando a função ;0/([WUDFW6WULQJ�;0/5HVXOW�� �DPELHQW��� onde “ambient” é uma tag xml enviada pelo servidor e é um valor numérico para o nosso aplicativo. O campo 3RQWR é preenchido pela variável ³GHZSRLQW´� Observe que as tags são chamadas sempre entre aspas duplas. Como o sistema sabe destas coisas? Ele não 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 são devolvidos pelo servidor em formato XML. O que o código acima faz é pesquisar nos esquemas cada um dos parâmetros necessários 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>

Page 29: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

29

<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" />

Page 30: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

30

<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>

Page 31: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

31

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

A linha em vermelho na listagem XML acima é que preenche o parâmetro pressão no nosso aplicativo dot Net. Esta linha está presente na função importada do servidor chamada *HWB:HDWKHU5HSRUW O campo 8PLGDGH utiliza a função Val para transformar o resultado em um número 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 função ;0/([WUDFW6WULQJ�;0/5HVXOW���DOWLPHWHU��. As condições do céu conhecidas na tag “Sky” tem uma particularidade, podem retornar uma tag com mais de um resultado. Desta forma não podemos usar a função ;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 múltiplas 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 são feitos em Windev. Criamos duas variáves, Tagceu e Results no formato string. 7DJFHX��5HVXOWV�DUH�VWULQJV�Na linha seguinte, limpamos o controle Ceu, igualando o a Null A variável 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 repetição (semelhante à linguagem C) implementamos o valor de i com o operador ++ de incremento

Page 32: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

32

Em seguida a variável Results recebe o valor da tagceu, no formato “string” de acordo com o valor da variável i. Na primeira vez i = a 1, na segunda vez i = 2, até chegar ao final da tagceu. Um operador de igualdade flexível ~= ““ controla o final do Loop e atribui ao controle de texto da tela (Ceu) o conteúdo da variável Results colocando um caractere de quebra de linha a cada vez que um conteúdo é gravado.

Esta é a tela de resultado em tempo de execução quando se pressiona o botão condições 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 céu, ocuparam somente uma linha, mas

poderiam ocupar mais de uma conforme as condições 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 não entendo muito os dados representados no campo condições do céu mas analisando o que está escrito em inglês temos nuvens de um determinado tipo a

Page 33: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

33

3962 metros, um outro tipo a 8230 metros. Estas informações são normalmente utilizados por pilotos de aviação e controladores de tráfego aéreo. 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 serviço permite acessar uma lista das cidades onde temos a coleta das informações do clima e se pode notar a presença dos aeroportos. Basta conhecer os parâmetros em XML para retornar qualquer dado no seu aplicativo usando a tecnologia dot Net. Baseado na análise do código XML retornado pelo servidor vamos obter no nosso sistema, uma listagem de todos os países cadastrados no servidor. No botão /LVWDU� SDtVHV� QR� 6HUYLGRU, no evento &OLFN� RQ� EXWWRQ insira o seguinte código 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 variável XMLResult ao método (tag XML) List_Countries. Em seguida atribuímos o resultado para a variável 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 variável Tagceu Atrbuímos 0 ao contador i

Page 34: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

34

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 países em maiúscula . O resultado em tempo de execução é apresentado abaixo:

Observe que retornamos os valores no mesmo campo texto usado para receber os dados do céu, mas poderíamos perfeitamente preencher uma tabela em memória com estes valores.

$WULEXLQGR�YDORUHV�D�XP�FRQWUROH�GH�WHOD�HVWiWLFR�� Estes controles correspondem a controles do cadeia de caracteres em outras linguagens. Publique um controle estático na sua janela e atribua valores diretamente para ele, sem precisar declarar uma variável. Exemplo no caso de nossa aplicação dot Net pegamos a data e a hora em que as informações são retornadas do Serviço XML da Web. Static3 =" Em: " + DateToString(DateSys(),"DD/MM/YYYY") + " às " + TimeToString(Now(),"HH:MM:SS") Onde Static3 é um controle de tela sem rótulo (caption). Para atribuir a data e a hora do sistema a este controle (com mais algumas firulas) utilizamos o código acima. Para colocar a data retornada pela função 'DWH6\V() no formato dia/mês e ano utilizado no Brasil, utilizamos a máscara “DD/MM/YYYY” . Da mesma forma fizemos a formatação para hora, minuto e segundo para a função 1RZ��

Page 35: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

35

&ULDQGR�XP�VHUYLoR�:HE�;0/�D�SDUWLU�GH�XPD�DSOLFDomR�:LQGHY� O Windev também pode ser usado para criar serviços Web a partir de aplicativos desenvolvidos por você. Para que estes serviços sejam disponibilizados ao público e a outras aplicações você precisará instalar o serviço gerado em um servidor que suporte SOAP.

&ULDQGR�R�6HUYLoR�;0/�1. Crie um novo projeto Windev. Este novo projeto deverá conter apenas

procedures globais (nenhuma janela, nenhum relatório, etc...) Cada procedure global deverá ser executada pelo servidor SOAP do Windev. Se for necessário, entre os códigos de inicialização e finalização do projeto. Estes códigos serão executados durante a carga ou descarga da livraria do Windev no Servidor SOAP.

2. Selecione a opção 3URMHFW...;0/�:HE�6HUYLFH����*HQHUDWH�6HUYLFH� IRUP�WKLV� SURMHFW. Um assistente de criação de serviços XML será carregado Responda às questões propostas pelo assistente para ter no final um serviço Web XML completo gerado a partir de uma aplicação Windev.

3. Entre as questões propostas estão: 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 endereço da Internet onde o projeto será instalado, por exemplo http://MeuServidor/MeuServico.soap.

5. A próxima 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 contém todas as referências para os elementos a serem integrados na livraria.

8. Clique no botão “Done” para criar o site. 9. Instale o serviço gerado em, um Servidor Web para que possa ser

acessado por outros aplicativos. A partir do projeto Windev escolhido para ser um serviço XML o Windev irá criar automaticamente:

• Uma livraria Windev correspondente, um arquivo com a extensão .WDL. Esta livraria conterá as procedures do seu serviço Web. Estas procedures podem ser usadas por uma aplicação que utilize ou seu serviço Web XML.

• Um arquivo XML. Este arquivo irá conter a descrição do serviço XML Web no formato WSDL (Web Services Description Language). – Linguagem de definição de Serviços Web.

Para tornar o seu serviço Web “disponível”, 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.

Page 36: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

36

7HVWDQGR�R�VHUYLoR�:HE�QD�PiTXLQD�GH�GHVHQYROYLPHQWR� Para poder testar o Serviço em sua máquina você precisa configurar um Servidor de Internet nesta máquina. Configurando o Apache Server Para instalar um servidor SOAP para o Apache, você deve ter a versão 1.3 do Apache na estação.

1. Abra o arquivo “httpd.conf” usando o Notepad do Windows. Este arquivo está localizado no subdiretório conf da sua Instalação Apache. Escolha o diretório default de instalação: C:\PROGRAMFILES\APACHE\APACHE GROUP\APACHE\CONF

2. Localize a seção 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 estação LoadModule windev_m odule < WinDev 8 setup directory> \ Data\ WD80sapa.dll

Finalmente para instalar o servidor SOAP LoadModule windev_module <Setup directory of the WD80SAPA.DLL DLL>\WD80sapa.dll

1RWDV� Se o diretório especificado contiver espaços você deve colocar aspas (“Diretorio com espaços”). Esta linha não pode começar com o sinal # 4. Localize a seção relativa aos manipuladores de queries. Para fazer isto, ou

localize a linha " ��$GG+DQGOHU a qual permite que se mapeie os arquivos de extensão de manipuladores ou a palavra chave “ $GG+DQGOHU .

5. Adicione a seguinte linha: $GG+DQGOHU�ZLQGHY�PRGXOH��VRDS�

Nota: Esta linha não deve começar com cerquilha (#)

6. 6H�YRFr�HVWLYHU�LQVWDODQGR�XP�VHUYLGRU�62$3�FOiVVLFR, a instalação 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 máquina.

1. A partir do Painel de Controle, selecione, “ Ferramentas Administrativas “ e em Seguida “ Gerenciador de Serviços 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”

Page 37: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

37

5. Clique no botão configurar (Configuration) e em seguida no botão “Adicionar”(Add).

6. Clique em “Executável” (Executable” e selecione o arquivo WD80SIIS.DLL

Para testar a partir de sua estação de trabalho, este arquivo deve estar localizado no subdiretório data do Windev8. PaRA INSTALAR o servidor SOPA final, este arquivo deve estar localizado no diretório de setup de sua aplicação.

Preencha o campo extension, com “.soap”.

Desmarque o check box “Check that the file exists”. Clique no botão OK para finalizar.

7. Se você estiver instalando um servidor SOAP tradicional a configuração está pronta

Se estiver instalando um Serviço Web XML, realize as seguintes operações adicionais

8. Copie o arquivo XML contendo a descrição do Serviço Web XML para o diretório especificado na opção “Access path”. Para acessar este arquivo XML, use a seguinte linha de comandos. �KWWS����1RPH�GR�6HUYLGRU�62$3�RX�(QGHUHoR�,3�!��1RPH�GR�DUTXLYR�

;0/!�;0/��1RWD��Você pode também copiar este arquivo XML para outro diretório. Consulte o help sobre o uso do Servidor HTTP.

9. A instalação do Serviço Web XML no servidor SOP está concluída. Configurando o Administrador SOAP

1. Execute o administrador SOAP (Aplicação WDSOAPConfig.EXE). Este administrador pode ser encontrado no diretório de sua aplicação (ou em um diretório específico se ele já estiver instalado).

2. Configure os seguintes

Page 38: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

38

parâmetros : 7LPH�EHIRUH�XQORDGLQJ�QD�XQXVHG�:'/ ; se diversas livrarias (arquivos .WDL) relacionados com a aplicação SOAP server (ou serviços XML) forem encontradas na estação, esta opção permite configurar um tempo máximo para limpar uma livraria não usada na memória. Quando uma livraria é “limpada” da memória o código de encerramento do projeto é executado. 0D[LPXP�QXPEHU�RI�:'/�LQ�PHPRU\���se diversas livrarias (arquivos .WDL) correspondentes a aplicações SOAP (ou Serviços Web XML) forem localizadas na estação, esta opção permite que você configure o número de WDLs carregados simultaneamente na memória. Quando este número é recuperado, as livrarias mais antigas “no momento”, na memória, são automaticamente fechadas. Ao fechar a livraria, o código de finalização do projeto é executado. 6DYLQJ�D�ORJ��/2*����Esta opção possibilita salvar em um arquivo texto, todas as operações realizadas no servidor SOAP. Para cada operação a data e a hora são 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 /RJ�ILOH��Diretório do servidor no qual o arquivo de log deve ser criado. :'/�/RFDWLRQ� Diretório do servidor onde a livraria do Servidor SOAP está localizada. Note�� Se o diretório não existir, o WDL deverá ser localizado em C:\modulessoap. :LQGHY�'//�/RFDWLRQ��Diretório onde o as DLLs do Windev usadas pelo servidor SOAP estão localizadas. Se o diretório não existir, as DLLs serão localizadas em c:\modulessoap . /RFDWLRQ� RI� ILOHV� LQ� H[HFXWLRQ�� Diretório de Hyper files. Quando do carregamento da livraria do servidor SOAP.

- Analise associada com o servidor SOAP que será carregada automaticamente;

- Diretório de dados especificado na análise que automaticamente corresponde a este diretório.

Após estas configurações, já será possível testar a sua aplicação WEB XML na estação de desenvolvimento: Reinicie o servidor Web, após as configurações. Iniciei o teste a partir da aplicação SOAP cliente. Para iniciar os testes da aplicação SOAP cliente adote os mesmos procedimentos do tópico &RPR�LPSRUWDU�XP�VHUYLoR�:HE��

Page 39: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

39

&DUDFWHUtVWLFDV�GD�SURJUDPDomR�:LQGHY�FRP�64/�� Uma das características das linguagens 4GL e 5GL (caso do Windev) é a utilização da RAD (Rapid Aplication Developer) para gerar aplicativos inteiros a partir de algumas definições e análises. Entretanto, quando se trabalha com Bancos de Dados SQL (via ODBC ou via OLDB) nem tudo o que é gerado pelo RAD é benéfico ao sistema. Entretanto estas particularidades não são 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 usuário digita o início do conteúdo do campo e o Windev se encarrega de inserir o resto do conteúdo. Em formulários de entrada de dados “parece” ser uma excelente idéia. 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 tráfego de rede infernal. Para pequenas bases de dados até pode ser deixado ativo mas, com grandes bases de dados o ideal é desabilitar esta opção.

Page 40: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

40

3DVVDQGR�SDUkPHWURV�SDUD�XPD�MDQHOD�Uma janela pode: Receber parâmetros quando for aberta Retornar um valor quando for fechada. Estas janelas se comportam como se fossem uma procedure que podem ou não retornar valores. Este tipo de janelas é muito usado nos seguintes casos: Janelas de calendários, onde uma data é enviada como parâmetro 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.

&RPR�SDVVDU�XP�SDUkPHWUR�QD�DEHUWXUD�GD�MDQHOD� Para passar um parâmetro para uma janela no momento de sua abertura:

• Declare uma procedure na seção *OREDO� GHFODUDWLRQV. O nome desta procedure deve ser idêntico ao nome da janela. Os parâmetros para esta procedure corresponde aos parâmetros passados para a janela. Por exemplo a janela CALENDARIO permite manipular as datas em um controle do tipo calendário. Esta janela, na sua abertura aguarda por um parâmetro que especifique a data que deve ser apresentada selecionada quando a janela for aberta. 'HFODUDomR�GH�YDULiYHLV�JOREDLV�SDUD�D�MDQHOD�&DOHQGDULR�PROCEDURE Calendario(sDateSel) // sDateSel, é o parâmetro que especifica a data a ser selecionada. // no momento da abertura da janela.

Este parâmetro pode ser chamado a partir de um dos seguintes processos da janela: �%RW}HV��ORFDO�SURFHGXUHV��HWF����Por exemplo no processo ,QLWLDOL]DWLRQ da janela Calendario //O controle DateControl é um campo de entrada // ou um Edit control // ele contém o valor para o parâmetro sDateSel DateControl = sDateSel Em seguida vamos passar o parâmetro para a janela no momento de sua abertura através de uma das seguintes funções de abertura: 2SHQ��2SHQ&KLOG, 2SHQ6LVWHU ou 0',2SHQ. Por exemplo, o botão ��6HOHFLRQD�FDOHQGiULR!! em uma determinada janela, é usado para abrir a janela Calendário. Quando esta janela for aberta, a data de hoje é passada como parâmetro. //Abre a JanelaCalendario com a função Open //Passa a data de hoje( Today()) como parâmetro Open(JanelaCalendario, Today()) onde TODAY() é uma função do Windev que retorna a data do Sistema Operacional.

Page 41: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

41

&RPR�UHWRUQDU�XP�SDUkPHWUR�QR�IHFKDPHQWR�GH�XPD�MDQHOD�� É muito comum passarmos um parâmetro para uma janela, realizarmos algum processamento nesta janela e recebermos um retorno desta janela após o processamento (comportamento de função). Para retornar um valor quando a janela for fechada, utilize a propriedade 5HWXUQHG9DOXH� no processo que chama a função de fehcamento da janela &ORVH. Por exemplo, na JanelaCalendario, o botão ��2.!! e o botão ��&DQFHO!! fecham a janela depois que os valores são inicializados para retornar: // Evento clique do botão ��2.!!�da JanelaCalendario // O usuário final clicou em OK // A data entrada no control DateControl é retornada MyWindow..ReturnedValue = DateControl

//Fecha a Janela Close()

//Evento clique do botão ��&DQFHO!!� da JanelaCalendario //O usuário final clicou em CANCEL, //Uma string vazia será retornada MyWindow..ReturnedValue = "" //Fecha a janela Close() Você também 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ê também pode recuperar o valor retornado pela janela no momento de seu fechamento para uma variável. Esta variável irá conter o resultado da função 2SHQ. Por exemplo o botão ��6HOHFLRQD�&DOHQGiULR!! da nossa janela é usado para abrir a nossa -DQHOD&DOHQGDULR. Quando abrimos esta janela, com a função 2SHQ, a data de hoje (Today()) é passada como parâmetro. O valor retornado pela janela quando é fechada corresponde ao valor enviado pela função 2SHQ. Este valor é recuparado na variável ResultDate: //Abre a JanelaCalendario //ResultDate é uma variável string contendo o //valor retornadado pela JanelaCalendario ResultDate =Open(JanelaCalendario, Today()) //Analisa o resultado retornado pela janela

Page 42: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

42

IF ResultDate = "" THEN Info("Nenhuma data foi selecionada") ELSE Info("Data Selecionada: " + ... DateToString(ResultDate)) END O processamento do botão ��6HOHFLRQD�FDOHQGiULR!!� é interrompido até que a janela -DQHOD&DOHQGDULR� seja fechada.

3DUkPHWURV�SDVVDGRV�SRU�YDORU� Se os parâmetros passados para uma janela são modificados nesta janela, estas modificaçõews somente se aplicam a esta janela. O valor destes parâmetros não são modificados no processo chamador. Por exemplo:

1. Uma variável chamada MinhaData é declarada no código do botão ��6HOHFLRQD� &DOHQGiULR!!� . Esta variável contém a data de hoje (por exemplo MinhaData = Today())

2. Esta variável é passada como um parâmetro para a janela -DQHOD&DOHQGDULR. O Parâmetro sDateSel contém o valor da variável MinhaData.

3. O valor do parâmetro sDateSel é modificado na janela -DQHOD&DOHQGDULR (por exemplo: sDateSel = “01072004” ).

4. O valor da variável MinhaData não é modificado.

&RPR�ID]HU"� As seções a seguir respondem algumas perguntas para quem está começando com o Windev, o famoso How to, ou como fazer....

&RPR�SHUVRQDOL]DU�XPD�PiVFDUD�GH�HQWUDGD� O Windev oferece dois tipos de máscaras:

• Máscaras de entrada ou LQSXW� PDNV que definem caracteres que serão entrados pelo usuário final em controles de janela. Algumas vezes, estas máscaras podem ser usadas para modificar os valores atribuídos para um controle de janela via programaçãop (uppercase/lowercase – maiúsculas/minúsculas)

• Máscaras de saída ou GLVSOD\� PDVNV os quais definem caracteres que serão impressos em controles de relatórios.

$V�PiVFDUDV�H�R�:LQGHY� Com relação aos tipos de máscaras uma máscara pode ser:

• 3UH� GHILQLGD O Windev fornece uma grande quantidade de máscaras dependendo do tipo de controle, (string, numérico, etc...). Estas máscaras são acessadas clicando-se na caixa drop down que existe na caixa de definição dos campos GHVFULSWLRQ e são setadas individualmente, ou seja,

Page 43: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

43

campo a campo. Observe na figura ao lado a grande variedade de máscaras disponíveis para campos numéricos. Sempre que o controle de entrada (campo) pertencer a uma janela, será habilitada uma configuração de entrada de dados, uma LQSXW�PDVN.

• 3HUVRQDOL]DGD simplesmente entre a máscara que você deseja que seja aplicada ao campo e o Windev se encarrega de resolver o resto do código de uma maneira muito simples. Por exemplo:para a máscara do CEP a máscara

personalizada para um campo do tipo string seria definida como 99.999-999 conforme figura ao

lado o que em tempo de execução fará com que o usuário digite livremente os números, por exemplo 84600000 e o Windev o converta em uma cadeia de caracteres no formato 84.600-000 conforme se demonstra no formulário da figura. Desta forma é possível configurar também as máscaras para números de telefone, algo como 999-(999)999-99-99, o que em tempo de execução poderia resultar numa entrada de dados semelhante a: 014-(051)441-46-78

• Se nenhuma máscara for especificada, nenhuma formatação será aplicada ao controle. Observe que a introdução das máscaras personalizadas é absolutamente livre, podendo inclusive serem criadas matrizes emelhantes às contas contábeis do tipo 1.11.111.000.00001-1, por exemplo.

$SOLFDo}HV�TXH�XVDP�PDLV�GH�XP�LGLRPD��PXOWLOtQJ�HV��� As máscaras de dados podem variar de um idioma para outro. O Windev permite que máscaras para cada tipo de idioma sejam definidas de acordo com o idioma escolhido. Basta clicar no botão ao lado da caixa de seleção de máscaras para que seja permitido escolher o idioma a que se aplica uma determinada

Page 44: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

44

máscara. De acordo com as linguagens configuradas para o projeto serão exibidas as respectivas opções. No caso da figura acima o projeto foi setado para inglês e

francês.

&RQWUROHV�7LSR�7H[WR� Em janelas, por default, nenhuma máscara é associada com controles do tipo texto (strings). Você pode escolehr ente:

• Selecionar uma máscara pré definida • Criar uma máscara de entrada personalizada.

1RWD: se o controle estiver ligado a um campo de arquivo, o valor armazenado no arquivo é que será mostrado. Em relatórios, por default, nenhuma máscara estará associada a um controle do tipo texto. Você pode selecionar uma máscara pré definida. Máscaras personalizadas não são suportadas em relatórios. Isto quer dizer que, se quisermos usar uma máscara especial em nossos relatórios deveremos gravar o campo com o formato que desejamos apresentar ou então criar uma variável para o relatório que receba o conteúdo formatado a partir do arquivo mostrando então a variável ao invés 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´��WRGDV�DV�OHWUDV�PLQ~VFXODV���7DEHOD�GH�0iVFDUDV�Máscara Efeito programação Exemplos

None Sem máscara Sem efeito Como digitado

Cap First Let ter Se uma cadeia de caracteres for entrada em minúsculas a primeira letra será convertida para maiúscula

Se uma cadeia de caracteres for entrada em minúsculas a primeira letra será convertida para maiúscula

Ave5a8B J4-h89

All caps Todas as letras serão convertidas para maiúsculas

Todas as letras serão convertidas para maiúsculas

TE-55E

ABC-1429-AB

Page 45: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

45

All lowercase

Todas as letras serão convertidas para minúsculas

Todas as letras serão convertidas para minúsculas

Te-55e

Abc-1429-ab

Letters

Somente letras(minúsculas ou maiúsculas) poderão ser entradas.

Somente letras(minúsculas ou maiúsculas) poderão ser entradas

Te-55e

Abc-1429-ab

Numbers

Só serão aceitos números na entrada Todos os caracteres deverão ser autorizados

99999

88888

555555

Letters + numbers

Somente letras (maiúsculas/minúsculas) e números serão aceitos

Somente letras (maiúsculas/minúsculas) e números serão aceitos

Abc1544

ABNC875

5715A25

Uppercase letters

Todas as letras serão convertidas para maiúsculas

Todas as letras serão convertidas para maiúsculas

MACACO

PORCO

Uppercase letters + numbers

Somente letras e números podem ser entrados

As letras serão automaticamente transformadas em maiúsculas

Somente letras e números podem ser entrados

As letras serão automaticamente transformadas em maiúsculas

HT8I66

66KP35

B21AC4

Telephone number

Somente os seguintes caractes serão aceitos

Números

- sinal de menos

. ponto

( parêntesis esquerdo

) parêntesis direito

‘ ‘ espaço

Somente os seguintes caractes serão aceitos

Números

- sinal de menos

. ponto

( parêntesis esquerdo

) parêntesis direito

‘ ‘ espaço

(014)55-15

Name and full path of a file

Somente os caracteres permitidos pelo sistema operacional podem ser entrados.

Máximo 260 caracteres

C:\diretorio\arquivo

Somente os caracteres permitidos pelo sistema operacional podem ser entrados.

Máximo 260 caracteres

\\diretorio\arquivo

C:\user\arquivo.txt

INSEE number

Somente números podem ser entrados

O primeiro número será sempre 1 ou 2

Máximo 13 números

Somente números podem ser entrados

O primeiro número será sempre 1 ou 2

Máximo 13 números

123456

212354

INSEE number + key

Somente números podem ser entrados

O primeiro número será sermpe 1 ou 2

Somente números podem ser entrados

O primeiro número será

213454

123457

Page 46: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

46

Máximo 15 números sermpe 1 ou 2

Máximo 15 números

Letter then Letter/Digit

O primeiro caracter será sempre uma letra maiúscula ou minúscula

Todos os caracteres são permitidos

An121545

Cj1521

Letter then Letter (CAP)/Digit

O primeiro caracter será sempre uma letra maiúscula enquanto os outros serão maiúsculas ou números

Todos os caracteres serão permitidos

QA1435

ACB112

Numbers,.+-' '

Somente os seguintes elementos podem ser entrados:

Números

Caracteres

, virgula

. ponto

+ sinal de mais

- sinal de menos

‘ ‘ espaço

Todos os caracteres são permitidos

+586,21

,1454

-1318

.035

25 12

File name (without its path)

Caracteres permitidos pelo Sistema Operacional

Máximo 260 caracteres

Caracteres permitidos pelo Sistema Operacional

Máximo 260 caracteres

Nomes de arquivos sem path.

E-mail address

Todos os caracteres podem ser entrados com exceção de:

( parêntesis esquerdo

) parêntsis direito

> sinal de maior

< sinal de menor

, vírgula

; ponto e vírgula

‘ apóstrofo

“ aspas

\ barra invertida

‘ ‘ espaço

Todos os caracteres podem ser entrados com exceção de:

( parêntesis esquerdo

) parêntsis direito

> sinal de maior

< sinal de menor

, vírgula

; ponto e vírgula

‘ apóstrofo

“ aspas

\ barra invertida

‘ ‘ espaço

[email protected]

• O número I NSEE é apenas um ident ificador individual. Este número pode assum ir os seguintes valores

• 1 = masculino 2 = fem inino

Page 47: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

47

• os dois últ imos dígitos do ano

• os dígitos do mês

• quantos às out ras opções não achei uso em português.

O número I NSEE pode ser completado por um número de 2 dígitos chamado “key” , Esta key (chave) é usada para ver ificar o número I NSEE.

0iVFDUDV�SHUVRQDOL]DGDV� As máscaras podem ser definidas pelo usuário usando os seguintes caracteres: 9 – números isolados C – dígito ou espaço L – upercase ou letra I – lowercase ou letra A – upercase ou caractere alfa numérico a – lowercase ou caracter alfa numérico ? – qualquer caractere onde upercase = letra maiúscula e lowercase = letra minúscula Qualquer outro caractere é definido como realmente é. &8,'$'2�� 0iVFDUDV� GH� HQWUDGD� SHUVRQDOL]DGDV� VmR� DSOLFDGDV� VRPHQWH� j�9$/25(6�',*,7$'26��(VWDV�PiVFDUDV�QmR�VH�DSOLFDP�D�YDORUHV�LQLFLDLV�RX�YDORUHV�DWULEXtGRV�YLD�SURJUDPDomR���1RWD�� YRFr� SRGH� GHILQLU� XPD� PiVFDUD� QXPpULFD� HP� XP� FRQWUROH� WH[WR�� 2�YDORU�UHFXSHUDGR�VHUi�XP�FDUDFWHUH�QXPpULFR�WUDQVIRUPDGR�HP�XPD�VWULQJ�H�QmR� XP� YDORU� QXPpULFR�� 3RU� H[HPSOR� XPD� SODFD� GH� YHtFXOR� SRGHULD� VHU�IRUPDWDGD�FRPR�&&&�������'LIHUHQoDV�HQWUH�WLSRV�QXPpULFRV�H�PRQHWiULRV� As máscaras oferecidas para os valores monetárias são as mesmas que aquelas usadas pelos tipos numéricos. A diferença está na precisão dos números. Os tipos moeda possuem 17 dígitos sginficativos para a parte inteira e um máximo de 6 dígitos para a parte decimal. Você também pode adicionar o sinal de cifrão à entrada de moeda. Exemplo: 5����������� 1RWD��Será mostrado “++++” no controle, de acordo com as seguintes condições: - atribuição via programação - o número de dígitos da parfte inteira é maior que o número da parte inteira da máscara. Por exemplo, se as mácara é 99,999 e o varlo atribujído pela programação é 123456 o valor “++++” será mostrado no controle.

Page 48: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

48

A parte decima será arredondada se uma das seguintes condições ocorrer:

- at r ibuição via programação

- O número de dígitos para a par te decima for mario que o número de dígitos da parte decimal da máscara.

Por exemplo, se a máscara for 99,999.99 e o valor atr ibuído via programação for 12345.159, o valor 12,345.16 será most rado no cont role.

&RQWUROHV�GR�WLSR�'DWD� Uma lista de máscara pré definidas é oferecida para datas: 'DD/MM/YYYY' ("01/02/1979") -> dia mes e ano com 4 dígitos no ano 'DD/MM/YY' ("01/02/79") -> dia mes e ano com 2 dígitos no ano 'MM/DD/YYYY' ("02/01/1979") -> mes dia e ano com 4 dígitos no ano 'MM/DD/YY' ("02/01/79")-> mes dia e ano com 2 dígitos no ano 'YYYY/MM/DD' ("1979/02/01")-> ano mes e dia com 4 dígitos no ano 'YY/MM/DD' ("79/02/01")-> ano mes e dia com 2 dígitos 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 formatação só quem com mês dia e ano. 'DDD DD/MM/YYYY' ("Terça Feira 01 Fevereiro 1979" ) data por extenso. Data do Sistema. – O Windeve pega o formato do Sistema Operacional.

0iVFDUDV�SHUVRQDOL]DGDV�‘DDDD’ Dia da Semana – exemplo: Segunda Feira ‘DDD’ Dia da semana abreviado – exemplo: Seg ‘DD’ Expressão do dia usando números – exemplo: 25 ‘MMMM’ nome do mês – exemplo: Janeiro ‘MMM’ nome do mês abreviado – exemplo: Jan ‘MM’ Expressão do dia usando número – 01 ‘YYYY’ Ano com 4 dígitos – exemplo: 2004 ‘YY’ Últimos 2 dígitos do ano – exemplo: 04 ‘HH’ Expressão de horas em números – exemplo 13 ‘mm’ Expressão dos minutos em números – exemplo 45 ‘SS’ Segundos expressados em números Estas máscaras podem ser usadas combinadas entre si, por exemplo: µ''�0000�<<<<�³DV�++�PP�66¶����)HYHUHLUR������jV����������

Page 49: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

49

&RQWUROHV�GR�WLSR�+RUD� Uma lista de máscaras pré definidas é oferecida pelo Windev. Você pode escollher entre:

• Selecionar uma máscara pré definida • Criar uma máscara personalizada.

As seguintes máscaras pré definidas podem ser usadas: HH:MM – Hora minuto HH:MM:SS – Hora Minuto Segundo HH:MM:SS:CC – Hora minuto segundo centésimos de segundo System time. Depende da da máscara de entrada selecionada nos parâmetros regionais do Sistema Operacional. (Opção “Regional” no Painel de Controle do Windows.

0iVFDUDV�SHUVRQDOL]DGDV�HH Hora MM Minuto SS Segundo CC Centésimos de segundo

&RPR�FDSWXUDU�D�MDQHOD�GH�XPD�DSOLFDomR�SDUD�R�DPELHQWH�GR�:LQGHY� Para capturar uma tela de outro programa, inclusive suas opções 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 diálogo 1HZ� :LQGRZ apresentando as guias com as janelas disponíveis 5$', que são as janelas assistidas do Windev, 6WDQGDUG, que são as janelas padronizadas do Windev e na última guia ,PSRUW, estará disponível a janela da aplicação ativa em segundo plano sob o ambiente do Windev.

Observe na figura abaixo que a janela em segundo plano está disponível para ser importada para o nosso aplicativo Windev.

Page 50: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

50

Está disponível para importar a janela 602Album (além de outras é claro, mas é esta que nos interessa), a qual iremos importar para o nosso app. Marque o check box *HQHUDWH�LPDJHV�IRU�XQUHFRQL]HG�FRQWUROV. Em seguida pressione o botão ��2.!!. Será mostrada a imagem da janela do aplicativo em segundo plano com uma caixa de diálogo do Windev . Nesta janela serão mostradas normalmente 3 mensagens:

• Search completed • Click OK to import the Window • Click Modify to Import Criteria

Page 51: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

51

Quando você clica no botão ��2.!! a janela e todos os controles disponíveis (isto é aqueles que podem ser importados) serão importados para a sua aplicação, 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 botão direito do mouse sobre eles e acessar as suas 'HVFULSWLRQV bem como atribuir &RGH a cada um deles.�

Se optar por clicar no botão details irá observar como a importação dos controles é feita pelo Windev. Observe na parte de baixo da caixa :LQGRZ� ,QWHUIDFH�,PSRUW que cada controle é da janela importada é tratado

Page 52: 3ULPHLURSDVVR–&RQVWUXLQGRD$QiOLVH · OLE DB, XML, Text, etc... :LQGHY – 3ULPHLURV SDVVRV 3 Clique no botão ˜˜1H[W!! para continuar. ... tabelas do Sistema SGBD. Clique no botão

:LQGHY�±�3ULPHLURV�SDVVRV�

52

separadamente inclusive sendo mostrados os controles que não 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 programação. É 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 importação da interface . Isso permite, por exemplo, que se utilize os serviços de um GHVLJQHU para desenhar toda a interface, sem se preocupar com o código que será desenvolvido pelos programadores. Quando você salvar a nova janela, vai observar que agora ela faz parte do projeto de sua aplicação e pode ser chamada a partir de uma opção de menu, ou pode,

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

Janela Importada