PowerBuilder 9.0 Básico
Transcrição
PowerBuilder 9.0 Básico
Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Pensamentos Este livro foi escrito com a finalidade de poder compartilhar alguns conhecimentos sobre o Sybase PowerBuilder adquiridos ao longo da minha vida profissional. Uns, com grande investimento financeiro, de estudos e paciência; outros, repassados por grandes profissionais que compartilham da mesma filosofia de vida. O que importa nesta vida, mais do que ganhar sozinho, é ajudar os outros a vencer, mesmo que isso signifique diminuir os nossos passos... Celso S. Côrtes. “Morder o fruto amargo e não cuspir mas avisar aos outros quanto é amargo, cumprir o trato injusto e não falhar mas avisar aos outros quanto é injusto, sofrer o esquema falso e não ceder mas avisar aos outros quanto é falso; dizer também que são coisas mutáveis... E quando em muitos a noção pulsar — do amargo e injusto e falso por mudar — então confiar à gente exausta o plano de um mundo novo e muito mais humano.” Geir Campos "Procure ser uma pessoa de valor, em vez de procurar ser alguém de sucesso" Albert Einstein ! Celso S. Côrtes é brasileiro, carioca de Vila Isabel e atualmente reside na cidade de Niterói-RJ, onde, em todos os sentidos, se apaixonou. ... Niterói! Niterói! como és formosa! Eu me glorio de dever-te o braço! Montanhas, várzeas, lagos, mares, ilhas, Prolífica Natura, céu ridente, Léguas e léguas de prodígios tantos.... poema de Gonçalves de Magalhães Foto : Museu de Arte Contemporânea (MAC) – Rio de Janeiro – Niterói - Projeto de : Oscar Niemeyer – 1994 1 Poema extraído do livro "Geir Campos - Antologia Poética", Léo Christiano Editorial Ltda. - Rio de Janeiro, 2003, pág. 89, organizada por Israel Pedrosa. 2 Pensamentos de Albert Einstein PowerBuilder 9.0 Básico PowerBuilder 9.0 Básico Celso S. Côrtes. Sybase PowerBuilder é marca registrada da Sybase, Inc. Copyright © Todos os direitos reservados. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Bibliografia : Getting Started – PowerBuilder 9 DOCUMENT ID: 37772-01-0900-01 LAST REVISED: March 2003 Copyright © 1989-2003 by Sybase, Inc. All rights reserved. Capa : Gilberto Santana – [email protected] Projeto Gráfico e Composição: Celso S. Côrtes Revisão do texto: Eduardo Olimpio Mota Fialho Endereço eletrônico : http://www.pb9basico.net Email : [email protected] Autor : Celso S. Côrtes – Analista de Sistemas Sênior – IBGE/DI/COADS – Supervisor de Pesquisas, Sistema Pesquisas Continuas Agropecuárias – www.pca.ibge.gov.br Usuário do Sybase PowerBuilder PB4,PB5,PB6,PB7,PB8 e PB9. Enterprise desde 1993, versões Desenvolvedor Java!,JavaScript!,VBScript!,ASP!,PHP! Criador e mantenedor do sítio na internet sobre Sybase PowerBuilder www.celso.cortes.nom.br, desde 1996. Email: [email protected] PowerBuilder 9.0 Básico Agradecimentos Pessoas inovadoras que chamam a si a missão de desbravar novas tecnologias enfrentam sempre dois grandes desafios. O primeiro é intrínseco ao pioneirismo. Elas têm que acreditar em seus propósitos e correr os riscos e as incertezas que acompanham todas as inovações. O segundo desafio está em disseminar, nas suas áreas de atuação, uma nova cultura tecnológica que venha a se constituir no ambiente propício para a evolução profissional. Em conseqüência, cria-se um processo sinérgico onde há um crescimento cultural tanto das Empresas como das Comunidades com as quais elas interagem. Foi dentro deste espírito que surgiu a iniciativa de oferecer aos desenvolvedores brasileiros um livro em português para iniciantes sobre a ferramenta de desenvolvimento para MS Windows®, o Sybase PowerBuilder 9.0. Com esta edição, mais que simplesmente preencher uma lacuna existente na bibliografia em português de informática, está sendo dado um forte impulso para que se evolua no esforço comum de criar outras publicações sobre esta ótima ferramenta de desenvolvimento. Agradeço ao meu amigo, Maycon J. Oleczinski que muito tem me auxiliado tanto neste trabalho, quanto na hospedagem do sítio na internet, dirigido à comunidade de PowerBuilder no Brasil, www.celso.cortes.nom.br. Agradeço também a todos os participantes do nosso fórum http://groups.yahoo.com/group/powerbuilder-br/ que estão sempre a disposição com valorosos textos. Aos meus filhos, Daniel e Thiago, pela paciência que me dispensaram enquanto eu escrevia este livro. Aos meus amigos de trabalho José de Souza Pinto Guedes, Analista de Sistemas e Paulo Sergio da Silva, Desenvolvedor (Supervisor do Sistema de Coleta das Pesquisas Contínuas Agropecuárias – IBGE/DI/COADS) pelo companheirismo, incentivo e profissionalismo que compartilhamos nestes onze anos de convívio e trabalho. E, em especial, a Eduardo Olimpio Mota Fialho, Analista de Sistemas (Sistema Pesquisas Contínuas Agropecuárias - IBGE/DI/COADS), Estatístico, Mestre em Estudos Populacionais e Pesquisas Sociais, um grande amigo, pelo interminável incentivo e revisão desta obra. Celso S. Côrtes. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Apresentação Sobre o livro Este livro tem o objetivo de ajudar os iniciantes desta ótima ferramenta de desenvolvimento o “PowerBuilder 9.0” em português. O roteiro de desenvolvimento para essa ajuda se dará de modo aplicado. Alguns conceitos básicos serão explicados para em seguida desenvolvermos uma aplicação modelo, utilizando os módulos básicos do PowerBuilder, visando uma maior fixação dos seus conceitos. Sobre o Sybase PowerBuilder 9.0 O PowerBuilder 9.0 é uma ferramenta de desenvolvimento padrão MS Windows !, orientada a objetos, que permite desenvolver aplicações cliente, cliente/ servidor e para internet. Em versões anteriores do PowerBuilder você poderia trabalhar só nos objetos da sua aplicação . A partir do PowerBuilder 8.0 foi introduzido a WorkSpace no qual você pode trabalhar em várias aplicações ou objetos. Para trabalhar com objetos, você tem que ter uma WorkSpace aberta. Você só pode ter uma única WorkSpace aberta, mas, você incluir vários objetos. Há dois tipos de objetos: PowerScript cliente e Objetos de Rede. Um objeto de PowerScript pode ser qualquer aplicação que você trabalha, como uma aplicação cliente. Um objeto de Rede pode conter todos os elementos que você precisa para construir um sitio (HTML) , códigos, imagens, componentes, bem como definições para conexões de banco de dados. Para trabalhos corporativos, sem dúvida, será um grande ganho no desenvolvimento, pois se poderão compartilhar códigos, objetos sem ter que incluí-los a sua aplicação. Além disso, o workspace possibilita a inclusão de vários diretórios que podem ser abertos e linkados à sua aplicação. PowerBuilder 9.0 Básico Sumário Sumário Capítulo 1 Barras de Ferramentas Conhecendo as suas funções Criando a WORKSPACE Criando uma aplicação 1 1 4 5 Capítulo 2 Criando uma WINDOW (janela) Configurando as barras de menu Template “Properties” Salvando a WINDOW 6 8 9 15 Capítulo 3 Criando um menu Escrevendo em PowerScript Como definir tipos de janelas Uso dos tipos de janela Tipos de controle 16 19 22 23 24 Capítulo 4 Implementação da Herança de Janelas 29 Capítulo 5 Projetando o menu 31 i Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Sumário Sumário Capítulo 6 A Linguagem PowerScript Eventos Ambiente de Script A Linguagem PowerScript Fundamentos da Linguagem PowerScript Variáveis Tipos de Dados Escopo de Variáveis Encapsulamento Objetos e Controle Execução de uma função por meio da notação de ponto Estruturas Arrays Arrays multidimensionais Arrays variáveis Dados de objetos Operadores Operadores Aritméticos Operadores binários Operadores unários Operadores de combinação Operador de string Operadores lógicos Operadores relacionais Operadores de conjunção Procedência e Parênteses Comandos do PowerBuilder O Uso da estrutura IF Estrutura Choose Case Estrutura de iteração(Loops) Estrutura de Do Loop Estrutura For… Next 36 37 38 39 41 41 42 44 45 46 46 48 50 51 51 52 52 52 53 53 54 54 54 55 55 56 56 56 57 58 58 59 ii PowerBuilder 9.0 Básico Sumário Sumário Capítulo 7 Transações de Bancos de Dados Definindo uma transação Montando a transação em PowerScript O uso do SQL no PowerBuilder 60 61 61 63 Capítulo 8 DataWindow Objeto DataWindow Fonte de dados Interface inteligente Interface com o usuário Como criar um objeto DataWindow Fontes de dados SQL Select Query Stored Procedure External Montando uma DataWindow com SQL Select Template de SQL Argumentos Personalizando sua DataWindow Composite Crosstab (planilha) FreeForm (Formulário livre) Graph (Gráfico) Grid (Grade) Group(Grupo) Label (Etiquetas) N-up (Múltiplas linhas) Olé 2.0 RichText Tabular Cores e Bodas 67 67 68 68 68 69 70 71 71 71 71 72 74 75 77 78 79 80 81 82 83 84 84 85 85 86 87 iii Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Sumário Sumário Capítulo 9 Recuperação de dados a partir de uma DataWindow Funções para o controle DataWindow Montando um Objeto DataWindow Aperfeiçoando a visualização da DataWindow Vinculando duas DataWindow Vinculando objeto DataWindow a um controle DataWindow Incluindo controle DataWindow a Window (janela) Incluindo parâmetros de atualização Rotina de inclusão Rotina de alteração Rotina de Exclusão 88 90 105 110 114 123 123 130 131 137 144 Capítulo 10 DataWindow : Técnicas avançadas Buffers Internos Detectar a validação Detectar o Tipo de dado Detectar regras de validação Detectar mudanças no item Usando Filtros Classificando Cláusula Where para Update e Delete Modify e Describe Função Evaluate( ) Propriedade Object Parametrizando com a cláusula DATA 147 148 148 148 148 150 151 153 155 160 162 165 Capítulo 11 PipeLine de dados 167 Capítulo 12 Criando Relatórios 175 iv PowerBuilder 9.0 Básico Sumário Sumário Capítulo 13 Gráficos 197 Capítulo 14 XML Conceito Exportando DataWindow (DataWindow Export) Importando um padrão XML para a DataWindow 213 228 239 Capítulo 15 Preparando sua aplicação final Criando o objeto “Project” Criando o arquivo executável 249 249 254 Capítulo 16 Criando uma aplicação Web Criando um sítio WEB com PowerDynamo 256 256 Capítulo 17 Criando a primeira página Web Utilizando 4GL Web/JSP Page wizard 269 270 Guia de Referência Nomenclaturas Atributos e Eventos Dados Enumerados 293 296 316 v Adquirido por : Fabrício Moreira da Silva Capítulo 1 Barras de Ferramentas Conhecendo as suas funções Criando a WORKSPACE Criando uma aplicação PowerBuilder 9.0 Básico Capítulo 1 1 Barras de Ferramentas: PowerBar1 A barra de ferramenta PowerBar1 é a barra principal do PowerBuilder.Nessa barra podemos definir e selecionar os tipos de objetos da nossa aplicação. Em qualquer local da PowerBar1, clicando-se com o botão esquerdo do mouse pode-se customizar suas funções, incluindo ou inibindo seus módulos. A barra acima é um padrão que aparecerá na primeira vez que você iniciar o PowerBuilder e caso seja customizada as alterações serão mantidas. Conhecendo as suas funções SEARCH - Ativa o tópico AJUDA no modo “SEARCH” (pesquisa) HELP - Ativa o tópico AJUDA no modo padrão. NEW - Ativa o template de habilitação dos objetos do PowerBuilder, como WorkSpace, Target, PB Object, Web, DataWindow, DataBase, Project e Tool. Iremos estudar cada um desses modulo descrito acima. OPEN – Abre um objeto previamente salvo, como uma DataWindow, Menu ou aplicação. SYTEM TREE – Mostra ou esconde a janela de descrição do seu projeto. OUTPUT – Mostra ou esconde a janela de informações de saída do seu projeto. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 1 2 Conhecendo as suas funções NEXT ERROR/MESSAGE – Exibe a próxima mensagem de erro da aplicação (se existir). PREVIOU ERROR/MESSAGE – Exibe a mensagem de erro anterior (se existir). SYSTEM OPTION – Ativa o template de configuração pessoal da sua máscara de trabalho. TO-DO-LIST – Monta uma lista de pendências BROWSER – Ativa o template de visão dos objetos da WorkSpace, com suas propriedades. CLIP WINDOW – Abre o template “CLIP”. Serve como um bloco de notas para sua aplicação possibilitando copiar e colar. LIBRARY – Abre o template tipo “EXPLORER” para seleção de aplicação ou objetos. DB PROFILE – Abre o template que possibilita configurar o tipo de conexão e a base de dados à qual seu projeto estará associado. EASERVER PROFILE – Abre o template que possibilita configurar o tipo de conexão com o servidor de aplicação EASERVER. DATA BASE – Abre o template de consulta, edição e alteração das bases de dados associadas ao DB PROFILE. PowerBuilder 9.0 Básico Capítulo 1 3 Conhecendo as suas funções FILE EDITOR – Abre o template de edição de arquivo. Com esse editor é possível criar qualquer função ou objetos para serem utilizados pelo POWERBUILDER. DEBUG – Abre o template para auxilio a depuração de sua aplicação. RUN – Ao clicar neste botão o POWERBUILDER irá aplicação em modo interpretado. executar sua SELECT and RUN – Executa a aplicação selecionada, em modo interpretado. EXIT – Sair do POWERBUILDER. Conhecendo as funções básicas da POWERBAR1 podemos iniciar a nossa primeira aplicação. Desse modo iremos, passo a passo conhecendo o PowerBuilder 9.0. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 1 4 Criando a WORKSPACE Clique no botão NEW e selecione WORKSPACE. Clique em “OK”. Selecione o diretório onde você ira salvar a WorkSpace e dê um nome para ela (para acompanhar corretamente a aplicação neste livro atribua o nome exemplo_01 e clique em “salvar”). Se tudo deu certo no template Sytem Tree aparecerá : PowerBuilder 9.0 Básico Capítulo 1 5 Criando uma aplicação. Clique em clique em “OK”. NEW e selecione “Target” em seguida “Application” e Aparecerá a tela de definição da sua aplicação. Em “Application Name” digite : exemplo1. Em “Library” selecione o diretório onde você salvou a WorkSpace. Em “Target” repita o procedimento anterior. Clique em “Finish” OBS: Não necessariamente você precisa atribuir os mesmos diretórios na criação de uma aplicação. Neste caso fizemos isso, para facilitar o exemplo. Se tudo deu certo você visualizará : Agora que estamos com a WorkSpace e a Aplicação criada. Vamos criar nosso primeiro objeto. Adquirido por : Fabrício Moreira da Silva Capítulo 2 Criando uma WINDOW (janela) Configurando as barras de menu Template “Properties” Salvando a WINDOW (janela) PowerBuilder 9.0 Básico Capítulo 2 6 CRIANDO UMA WINDOW(JANELA) Clique em NEW selecione “PB Object”, selecione o ícone “Window” conforme figura abaixo: E clique em “OK”. Com este procedimento, você acaba de criar sua primeira Window (janela) e poderá notar que três novas barras de trabalho surgiram assim como um novo template denominado “Properties” à direita. Note que, ao centro, está a window que você criou, e logo abaixo existem cinco “abas” de tabela com as descrições: “Layout”, “Open”, “Event List”, “Function List” e “Declare Instance Variables”. Open : Abre o template dos eventos padrão do objeto assim como o quadro de funções e de declaração de variáveis e funções compartilhadas. Event List : Como o próprio nome diz, lista os eventos padrão da window. Function List :Abre o template das funções padrão da window. Declare Instance Variables : Abre o template para as declarações das variáveis e funções compartilhadas que podem ser de instância ou global. Instancia – Pertence ao objeto e só estará disponível se o objeto estiver ATIVO. Global – Pertence à APLICAÇÃO Adquirido por : Fabrício Moreira da Silva Capítulo 2 PowerBuilder 9.0 Básico 7 CRIANDO UMA WINDOW (JANELA) Para uma visualização mais limpa, clique em template de OUTPUT e clique em template de trabalho. OUTPUT para inibir o CLIP WINDOW para inibir o Você agora tem uma visão mais limpa da sua WINDOW(janela). PowerBuilder 9.0 Básico Capítulo 2 8 CRIANDO UMA WINDOW (JANELA) Configurando as barras de menu Coloque o mouse sobre uma barra de menu e clique no botão esquerdo. Um menu-popup aparecerá conforme a figura abaixo: A PowerBar1 é a barra de trabalho do POWERBUIDER. As barras PainterBarX são as barras de trabalho do objeto que você selecionou para trabalhar - neste caso, o objeto WINDOW. Clique em cada opção do menupopup para conhecer as barras. Você pode também definir o seu posicionamento, colocando o mouse sobre a barra e clicando nas opções de posicionamento: “Left”, “Top”, “Right”, “Botton” ou “Floating”. O PowerBuilder possibilita personalizar a sua barra, incluindo ou excluindo itens que serão exibidos. Posicione o mouse na barra, clique no botão esquerdo, selecione “Customize” e utilize o processo de “arrastar” e “soltar”. Adquirido por : Fabrício Moreira da Silva Capítulo 2 PowerBuilder 9.0 Básico 9 CRIANDO UMA WINDOW (JANELA) Template “Properties” Desvendando as “Propriedades” da janela que acabamos de criar. Title : O título que aparecerá no topo da janela que você está criando. Tag : Uma descrição para a sua janela ou um alerta ao utilizá-la. Poderá conter qualquer texto e poderá ser acessada em tempo de execução através, por exemplo, da função do PowerBuilder “SetMicroHelp” que veremos mais adiante. MenuName : O PowerBuilder disponibiliza 6 (seis) tipos de janela, a saber: Child, Main, MDI, MDIHelp, Popup e Response. Somente as janelas Main, MDI, MDIHelp e Popup podem possuir barras de menus associados. Para atribuir uma barra de menu a uma janela primeiro você terá que criá-la. Os “checkbox” a seguir definem o estado da sua janela assim como os itens que você quer exibir na mesma. Visible: Define se a sua janela terá o status de estar visível ou invisível ao usuário. Enable: Define se a sua janela estará ativa ou inativa para o usuário. Titlebar: Define se a sua janela terá uma barra de titulo. Controlmenu: Define se a sua janela terá os itens direita da janela. MaxBox: Define se a sua janela terá no “controlmenu”. MinBox : Define se a sua janela terá no “controlmenu”. na lateral ClientEdge: Define se a sua janela apresentará um padrão de apresentação chanfrado. Capítulo 2 PowerBuilder 9.0 Básico 10 CRIANDO UMA WINDOW (JANELA) Center : Centraliza automaticamente a sua janela. Resizable: Ativa a permissão de redimensionar a janela em modo de execusão. WindowType: Define o tipo da janela. Template “Properties” WindowState: Define o modo de apresentação em modo de execução: Normal desenvolvimento. – do mesmo tamanho que foi definido no Maximized – Será redimensionada para o tamanho máximo da resolução do monitor em modo de execução. Minimized – Ativará a janela minimizada, colocando-a na barra de ferramenta do MS Windows. BackColor: Define a cor de fundo da sua janela. Icon: Define o Ícone(imagem) que você quer associar a sua janela é o ícone padrão. Você pode associar qualquer imagem padrão .ICO. O PowerBuilder disponibiliza vários ícones. NOTA : Alguns itens não foram descritos, devido a sua complexidade, serão vistos mais à frente. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 2 11 CRIANDO UMA WINDOW (JANELA) Com a janela aberta, e agora que conhecemos algumas de suas propriedades, vamos configurar-la. Assim começaremos nosso projeto, exemplo1. No template properties, na “aba” GENERAL digite : Tiltle Tag MenuName : Exemplo 01 : Janela principal do exemplo 01 : Deixe em branco Marque as caixas de verificação conforme as figuras abaixo: Capítulo 2 PowerBuilder 9.0 Básico 12 CRIANDO UMA WINDOW(JANELA) WindowType : WindowState : BackColor : Icon: Agora clique em Selecione Selecione Selecione Selecione MAIN Normal Button Face um ícone a sua escolha PREVIEW e veja como ficará a sua janela. Para fechar e voltar ao editor clique em na janela que você criou. Podemos notar que o tamanho da janela não está no padrão. Para uma janela que será a principal do nosso primeiro projeto você pode redimensiona-la manualmente. Para isto, na barra de rolagem da janela procurar o seu vértice, verificar a mudança do ícone do mouse, pressionar o botão direito do mouse e arrastar para o tamanho que lhe satisfizer. Veja a figura abaixo: ou se você sabe o tamanho que sua janela deverá ficar, clique na “aba” “Other” do template “Properties”. Se a “aba” “Other” não estiver visível clique na barra de rolagem (parte superior direita do template “Properties” nas “setinhas” ai ao lado) e a ela aparecerá. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 2 13 CRIANDO UMA WINDOW (JANELA) Ao selecionar o item “Other” nos deparamos com novos itens a serem configurados. Então vamos entendê-los para poder configurá-los com segurança. X – Posição inicial na esquerda do seu monitor. margem Y – Posição inicial que sua janela ocupará de cima para baixo. OBS : As duas opções só terão efeito se a opção “Center” estiver desmarcada. Width – Define a largura da sua janela. Height – Define a altura da sua janela. OBS: As opções só terão efeito, se a opção “Normal” em “WindowState” estiver selecionada. Pointer – Define que o ponteiro do mouse será apresentado quando o mouse passear pela janela. O padrão apresentado acima estabelece uma tomada completa do monitor, padrão 800x600, resolução que aconselho utilizar, devido a quantidade de informações que o PowerBuilder, assim como outros Front-End, hoje disponibilizam. Capítulo 2 PowerBuilder 9.0 Básico 14 CRIANDO UMA WINDOW(JANELA) Já que começamos a navegar no template “Properties”, iremos ver as suas outras propriedades. Clique na “aba” Scroll. HscrollBar- Ativa a barra de rolagem horizontal na sua janela. VscrollBar – Ativa a barra de rolagem vertical na sua janela. UnitsPerLine, ColunmPerPage, LinesPerPage – Definem o modo de como sua janela ira deslizar, “0” define como padrão o mesmo do MS Windows. Clique agora na “aba” ToolBar. Quando anexamos um menu em nossa aplicação, podemos definir automaticamente o seu posicionamento assim como deixá-lo visível, ou não. Esse procedimento pode ser padrão, configurando-se a propriedade Toolbar ou em modo de execução. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 2 15 CRIANDO UMA WINDOW (JANELA) Note que a maioria das propriedades de uma janela no PowerBuilder, já esta configurada para a utilização do padrão MS Windows, o que facilita bastante, você só terá que configurar itens a qual queira personalizar sua aplicação. Nesta primeira vez, percorremos todos os passos para que pudéssemos conhecer as características e propriedades de uma janela no POWERBUILDER, da próxima vez, será muito mais tranqüilo. SALVANDO A WINDOW (JANELA) Clique em SAVE e preencha : Windows : w_001 Comments: Janela principal do exemplo 1 Clique em “OK” e sua Janela já estará criada e anexada a aplicação exemplo1. Capítulo 3 Criando um menu Escrevendo em PowerScript Como definir tipos de janelas Uso dos tipos de janela Tipos de controle Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 3 16 CRIANDO UM MENU A criação de objetos no PowerBuilder segue sempre o mesmo padrão. A diferença recai na particularidade das propriedades de cada objeto que se queira criar. A criação de um menu segue os passos da criação de uma WINDOW (JANELA). Clique em NEW, na “aba” “PB Object” e selecione . O Template de criação do MENU se abrirá: Coloque o mouse sobre o texto “untitled0”, clique no botão direito e selecione a opção do menu-popup “Insert Submenu Item”. O Template de “Properties” se abrirá no lado esquerdo. Então deveremos montar o nosso menu preenchendo os campos a seguir. PowerBuilder 9.0 Básico Capítulo 3 17 CRIANDO UM MENU Clique em “untitled0” e com o botão esquerdo do mouse selecione a opção do menu-popup “Insert Submenu Item” para inserir outro item no menu. Troque em Name para “m_item02”, Text para Item 02, “MicroHelp” para “Item 01 esta em foco” e Tag para “item 01”. Ficou fácil não? No final dessa operação o seu quadro de menu ficará assim. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 3 18 CRIANDO UM MENU Clique em SAVE e preencha o quadro “Menu” com “m_menu01” e o quadro “Comments” com “Menu 01 da aplicação”. Clique em “OK”. Seu menu já foi criado e salvo na aplicação exemplo1. Dê um duplo clique no item w_001 no template TREEVIEW à esquerda. Sua Janela w_001 se abrirá. No template “Properties” à direita, no item “MenuName”, clique no botão de seleção , e selecione o menu que acabamos de criar, “m_menu01”. Pronto, nossa janela já possui um menu. Agora clique em PREVIEW e teste. PowerBuilder 9.0 Básico Capítulo 3 19 Escrevendo em PowerScript. Até agora montamos nossa Janela e adicionamos um menu sem funcionalidade. Agora, vamos escrever nosso primeiro código em PowerScript, O PowerScript é a linguagem que o PowerBuilder aceita. Assim poderemos escrever comandos para que o PowerBuilder os execute. no template TREEVIEW, à esquerda, Dê um duplo clique em uma janela de “Script” aparecerá no centro. A tradução desta tela é : A aplicação é exemplo1, este Script está direcionado para o evento “open” e este evento não prevê código de retorno. Agora digite conforme a tela abaixo: Clique em SAVE, depois em Para fechar a aplicação clique em RUN e veja-a sua aplicação executando. . Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 3 20 Escrevendo em PowerScript. Para ficar mais fácil, e treinarmos um pouco mais vamos selecionar no TREEVIEW à esquerda, com um duplo clique, “m_menu01”. O objeto menu será editado. Clique com o botão esquerdo do mouse sobre o item “m_menu01” e selecione “Insert Submenu Item”. Na opção que se abriu ao final da lista de itens digite “Sair”. No template “Properties” a direita, no item “MicroHelp”, digite “Sair do exemplo 01” e repita o texto para o item “Tag”. Dê um duplo clique no item “Sair” no painter “Script” logo abaixo. Repare que já esta selecionado o evento “clicked”. Este evento será sempre ativado quando se clicar na opção “Sair” e então vamos escrever em “PowerScript” o comando para sair da aplicação. PowerBuilder 9.0 Básico Capítulo 3 21 Escrevendo em PowerScript. Digite : Close(w_001). Salve a aplicação “Save” e clique em “Run” para executar fechar a aplicação, clique em “Sair” do menu. e testar. Para Analisando : Até aqui você criou uma aplicação e incluiu uma window. A esta window, acrescentou um objeto menu e a este objeto menu, incluiu itens e viu como programar esses itens de modo que possa executar procedimentos diversos ao ser selecionado. Por enquanto só executamos o comando “closed”. Outros comandos veremos adiante. Para continuar com o nosso exemplo, precisaremos entender um pouco mais sobre a “window”, que a partir de agora iremos chamar de “janela”. Nos próximos itens, iremos : !" !" !" !" Delinear e fazer a distinção entre diferentes tipos de janela; Definir atributos de janela; Adicionar e implementar controles de janela; Implementar a herança de janelas. Já vimos um pouco dos atributos de janela quando w_001 foi definida. Agora, veremos outros tipos de janela e o motivo pelo qual você deve utilizá-las. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 3 22 Como definir tipos de janelas Janelas MDI (Multiple Document Interface). Dificilmenta sua aplicação não apresentará uma tela principal. Normalmente utilizamos o padrão MDI como tela principal que apresenta dos modelos MDI e MDIhelp. A MDIhelp é normalmente mais utilizada pois o microhelp, aquela barra na inferior da janela, é uma excelente opção para exibição de mensagens resumidas para os usuários do seu aplicativo, MDIhelp tem um aspecto mais profissional do que as janelas independentes. Janelas Popup (Instantânea) As janelas instantâneas são abertas normalmente a partir do interior de outra janela, Embora esta janela não possa ser encoberta por sua janela superior, ela pode se estender além daqueles limites da janela superior. Quando a janela superior é fechada ou minimizada a janela instantânea também é fechada, ou minimizada. Janelas Child (filhas) As janelas filhas também são abertas a partir de outra janela, assim como as janelas instantâneas elas possuem uma janela superior, mas com alguns conceitos fundamentais. !" !" !" !" Nunca podem existir fora da janela superior; Nunca são consideradas ativas; Quando maximizadas, só preenchem o espaço da janela superior; Não possuem menus. Janelas Response (Resposta) As janelas de resposta são um tipo de janela instantânea. Elas diferem das janelas pelo fato de serem modais à aplicação. Nenhuma outra janela na aplicação pode ser acessada enquanto a janela de resposta não for fechada. As janelas de resposta são muitas vezes chamadas de caixa de diálogos. Você irá utilizar com freqüência essas janelas de resposta. PowerBuilder 9.0 Básico Capítulo 3 23 Uso dos tipos de janela MDI e MDI com microhelp Um MDI é uma janela(quadro) que contém outras janelas (folhas). Você só tem um quadro por aplicação mas pode ter muitas folhas dentro do seu quadro. Em qualquer aplicação complexa e em geral qualquer aplicação simples do MS WIndows você deve empregar um quadro MDI. A MDI microhelp funciona bem como um meio fácil de transmitir uma mensagem para o usuário, sem interromper a aplicação. Inclusão de controles de janela Um controle de janela é qualquer elemento que você insere em uma janela. A quase totalidade da PainterBar de janelas contém diferentes controles que você pode colocar na sua janela. Os controles são necessários para toda a janela. Sem controles uma janela é simplesmente um retângulo sem qualquer funcionalidade, que é exibido na sua tela. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 3 24 Tipos de controle Existem diversos tipos diferentes de controles, tais como : Botão de comandos O botão de comando é um objeto que tem por finalidade executar processos quando clicados. Quando são acionados aparecem como se fossem empurrados enquanto o botão do mouse se encontra pressionado. Para inserir Command um botão de comando na sua janela, dê um clique no ícone Button na barra PowerBar1 e depois clique no local em que deve ficar o botão de comando no interior da janela que você esta definindo. Botão de figura O botão de figura é semelhante ao botão de comando, exceto pelo fato de terem figuras sobre eles. Para colocar na sua janela um controle botão de Picture Button e depois clique no local em que o figura, clique no ícone botão de figura deve estar posicionado na janela que você esta definindo. Nas suas propriedades, à direita, no item “PictureName”, você pode selecionar a figura que ele deverá exibir. Texto estático O Texto estático é uma frase ou descrição exibida na sua janela. Para inserir Static Text, e depois um controle de texto na sua janela clique no ícone um clique no local em que deve aparecer o texto estático. Através do template “propriedades” à direita no item “Text” você tem a possibilidade de digitar o texto que deverá ser exibido na janela que está sendo definida. PowerBuilder 9.0 Básico Capítulo 3 25 Tipos de controle DataWindow Para acrescentar um controle DataWindow à sua janela, clique no ícone DataWindows control e em seguida, clique no local em que a DataWindow deve aparecer no interior da janela que você esta definindo. A DataWindow é a resposta do PowerBuilder às telas de entrada de dados. A DataWindow é de uso muito prático quando você está tentando unir sua aplicação a um banco de dados, além disto, são fundamentais para o desenvolvimento do PowerBuilder. A DataWindow também apresenta vários recursos avançados de edição. Edição em várias linhas Para inserir na sua janela um controle de edição em várias linhas, clique sobre MultLineEdit , e depois dê um clique no local em que o controle de edição em várias linhas deve ficar posicionado na janela que você está definindo. Diferente dos controles de edição em única linha (veremos a seguir), que só permitem a introdução ou visualização de uma linha de texto, o controle de edição em várias linhas é um controle que permite a digitação pelo usuário de diversas linhas de texto. A edição em várias linhas é usada com freqüência nos comentários de forma livre. Pelo fato de incorporarem muitos recursos de edição, as edições em várias linhas são indispensáveis durante a introdução de grandes quantidades de dados em campos. Entretanto, os controles de edição em várias linhas não são utilizados com freqüência pois é possível conseguir maior funcionalidade através de uma coluna DataWindow. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 3 26 Tipos de controle Figuras Para inserir na sua janela um controle de figura, clique sobre Picture Control , e depois dê um clique no local em que a figura deve ficar posicionado na janela que você esta definindo. As Figuras são controles que fazem referência a mapas de bits que serão exibidos em uma janela. Da mesma forma que o texto estático, as figuras são utilizadas apenas para a exibição de informações, a partir da versão 7.0, links da web podem ser associados através dos Picture HiperLink control que tem as mesmas propriedades da Picture e mais o HiperLink. Edição em uma única linha Para inserir na sua janela um controle de edição em uma única linha, clique SingleLineEdite Control , e depois clique no local em que edição sobre em uma única linha deve ficar posicionado na janela que você esta definindo. Os controles de edição em uma única linha são campos de entrada de dados que você pode inserir em uma janela com o objetivo de digitar uma linha de texto isolada. Os controles de edição em uma única linha não são usados normalmente, porque a maior parte de entrada de dados é realizada em uma DataWindow. Máscara de Edição Para inserir na sua janela um controle de edição em uma única linha, clique EditMask Control , e depois dê um clique no local em que máscara sobre de edição deve ficar posicionada na janela que você esta definindo. As máscaras de edição constituem um tipo de edição em uma única linha e permitem você especificar a formatação necessária no momento da entrada. Essa formatação é definida quando você acrescenta inicialmente o controle máscara de edição por meio do template “Properties”, “Mask”. PowerBuilder 9.0 Básico Capítulo 3 27 Tipos de controle Caixa de listagem Para inserir na sua janela uma controle de caixa de listagem, clique sobre ListBox control , e depois clique no local em que a caixa de listagem deve ficar posicionada na janela que você está definindo. A caixa de listagem constitui um tipo de edição em uma única linha e oferece ao usuário diversas opções para a resposta correta. Podem ser usadas barras de rolagem caso exista uma quantidade muito grande de opções, como ocorre com muitos outros controles de janela que se relacionam com entrada de dados. Caixa de verificação Para inserir na sua janela uma controle de caixa de verificação, clique sobre CheckBox control , e depois clique no local em que a caixa de verificação deve ficar posicionada na janela que você está definindo. As caixas de verificação funcionam com questões do tipo sim-não que podem ser ativadas ou desativadas. Internamente, uma tabela de códigos descreve o valor de dados retornado quando uma caixa de verificação é ativada ou desativada. Botões de rádio e Caixas de grupo Para inserir na sua janela uma controle de caixa de verificação clique sobre RadioButton control , e depois clique no local em que o botão de rádio deve ficar posicionado na janela que você esta definindo. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 3 28 Tipos de controle Para inserir na sua janela um controle caixa de grupo, clique sobre o ícone GroupBox Control e, em seguida, um clique no local em que a caixa de grupo deve ser colocado no interior da janela que esta sendo definida. Um botão de rádio é um tipo de caixa de verificação. Vários botões de rádio são agrupados no interior de uma caixa de grupo. Esses botões de rádio, assim como as caixas de verificação, podem estar ativos ou inativos. Somente um botão de rádio no interior de uma caixa de grupo pode ser ativado de cada vez. Manipulação de controles e janelas Muitas vezes você desejará manipular seus controles. Através de um clique simples sobre um controle será exibido o template de propriedades na lateral direita. Com um clique com o botão direito do mouse sobre o controle fará surgir um menu de opções possíveis para essse controle. Ordem e tabulação Você pode utilizar o teclado em lugar do mouse. Para se deslocar entre os controles, o usuário tem de pressionar a tecla “Tab” Entretanto a ordem de tabulação padrão dos controles de janela é a ordem na qual esses controles são acrescentados. Para alterar a ordem de tabulação em uma janela, abra o menu “Format” e escolha “Tab Order”. Essa opção exibe a ordem de tabulação de cada controle, incrementada pelo valor de 10. Se quiser mudar a ordem de tabulação simplesmente altere a numeração dos controles. Em seguida escolha de novo ‘Format” e “Tab Order”, a fim de desativar a ordem de tabulação. Capítulo 4 Implementação da Herança de Janelas Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 4 29 Implementação da Herança de Janelas A herança é o modo pelo qual usamos nossos protótipos no PowerBuilder. Através da herança o objeto filho obtém todos os controles, powerscript e atributos do objeto ancestral. Quaisquer mudanças adicionais efetuadas no objeto ancestral se refletem automaticamente no objeto filho. O Objeto filho pode então acrescentar outras características ou modificar as que herdaram. As janelas e os menus podem ser herdados. Para entender melhor vamos criar uma janela herança da janela w_001 do nosso exemplo. Com o PowerBuilder aberto, no TREEVIEW à esquerda, clique com o botão esquerdo do mouse sobre o objeto Window “w_001”. No menu-popup que se abrirá, selecione “Inherit” e uma nova janela se abrirá. Clique em “Save” e dê como nome “w_002”. Repare no título do template da window que você acabou de criar: A janela w_002 foi criada como uma herança da w_001. Toda mudança que você implementar na w_001 será herdada pela w_002 e esta poderá ter objetos que só pertençam a ela própria. Essa funcionalidade de herança, assim como a DataWindow, faz a grande diferença no desenrolar de um projeto com PowerBuilder. PowerBuilder 9.0 Básico Capítulo 4 30 Implementação da Herança de Janelas Para o nosso exemplo ficar mais claro, vamos agora abrir a nova janela do nosso projeto exemplo, chamado “exemplo1”. No TREEVIEW à esquerda dê um duplo clique no objeto w_001, template "propriedade" item "WindowType" e selecione "mdihelp!". Salve a w_001. No TREEVIEW à esquerda dê um duplo clique no objeto w_002, template "propriedade" item "WindowType" e selecione "main!", no item "MenuName". Apague o "m_menu01" e salve a w_002. No TREEVIEW à esquerda dê um duplo clique no objeto menu “m_menu01”. Selecione com um clique o item do objeto menu “Item 01” no template "Script". Note que já se encontra selecionado o evento "Clicked", e então escreva : OpenSheet(w_002, w_001, 2, Layered!) Salve o m_menu01. Execute a aplicação, clique na opção "Item 01" e veja a janela w_002 abrir dentro da janela w_001. Para uma melhor visualização selecione no TREEVIEW à esquerda a janela w_001, e no template "propriedade" selecione a opção "ClientEdge". Salve a janela w_001. Execute a aplicação. Adquirido por : Fabrício Moreira da Silva Capítulo 5 Projetando o menu PowerBuilder 9.0 Básico Capítulo 5 31 Projetando o menu. O menu constitui uma parte importante de qualquer aplicação, seja ela padrão MS Windows!, Linux, Solares, MAC ou outro qualquer. Através do menu disparamos eventos, emitimos comandos e controlamos o fluxo de uma aplicação. Você já foi apresentado aos menus, quando “m_menu01” foi criado na parte 03 deste manual. Agora você terá a possibilidade de aumentar seus conhecimentos e compreensão dos menus. Antes de projetar o menu é importante ter uma idéia da aparência que você deseja para ele. Usando uma planilha eletrônica, uma tabela de processador de texto, ou uma folha de papel esquematize aquilo que deverá estar contido em todos os menus. Pode ser útil observar outras aplicações a fim de examinar as opções que elas apresentam nos seus menus. Dica : Para manter a coerência dos menus, desenvolva um único com todas as suas opções em vez de projetar vários menus diferentes. Este menu “mestre” será usado como layout básico para outros menus. No menu “m_menu01” desenvolvido até agora implementamos os itens: “Item 01”, “Item 02” e “Sair”. Para prosseguir com o nosso exemplo devemos implementar esse menu. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 5 32 Projetando o menu. Edite o menu “m_menu01” e selecione com um duplo clique “Item 01”, as propriedades. Selecione “Text” e digite no lugar de “Item 01” “&Arquivo”. O caractere “&” na frente de um caractere qualquer no campo “Text” das propriedades do menu incluirá automaticamente um atalho para esse item no menu, Como conseqüência ao rodarmos a nossa aplicação e pressionarmos a tecla “ALT” junto com a letra “A” de “Arquivo”, teremos acesso imediato aos itens desse item do menu. Cada item deve ter a sua própria tecla de atalho. Definindo A para o item Arquivo e a mesma letra A para um outro item qualquer, sempre irá ser acionado o primeiro item encontrado. Note que a palavra “Arquivo” esta com a letra “A” sublinhada, informando que essa letra é o atalho para esse item. Caso queira trocar para uma outra letra do item, basta colocar o caractere “&” na frente da letra que você quer que seja o atalho. Apague nesse novo item “Arquivo” o item “MicroHelp”. Coloque o mouse sobre esse novo item “Arquivo” e com o botão direito do mouse selecione, no menu-popup, “Insert Submenu Item”. Nesse novo quadro digite “&Fechar” e no Item “MicroHelp” digite “Fecha a janela corrente”. Repita a operação, crie um novo quadro e digite “&Sair”. No item “MicroHelp” digite, “Fechar a aplicação”. Dê um duplo clique nesse item e no template de eventos digite, no evento “Clicked” : Close (w_001) Agora apague o item “Sair”, o último item do nosso antigo menu. Dê um duplo clique no item “Arquivo” e apague o comando PowerScript do evento “clicked”. Salve o menu e execute a aplicação quando então teremos. PowerBuilder 9.0 Básico Capítulo 5 33 Projetando o menu. Selecione o item “Arquivo” : Clique em Sair ou tecle “Alt” + “S” para sair da aplicação. Ainda no item “Arquivo” pode-se implementar um pouco mais e tornar o menu mais agradável visualmente acrescentando uma barra de ferramentas, “ToolBar”, com figuras. Dê um clique em “Fechar”, e no template “propriedades” selecione a “aba” “ToolBar”. Em “ToolBarItemText” digite “Fechar”. No Item “ToolbarItemName” selecione “CheckBox!”. Você pode selecionar qualquer ícone, mas para que tenhamos uma coerência no nosso projeto aconselho que siga o parametrizado. No Item “ToolbarItemDownName” você pode selecionar o ícone que irá ser exibido quando a figura estiver sendo pressionada com o mouse. No nosso exemplo deixe em branco. No Item “ToolbarItemVisible” verifique se esta marcado marcado indica que a “Toolbar” estará visível. . Este item . Este item sem No Item “ToolbarItemDown” deixe desmarcado marcação indica que o “ToolbarItemName” selecionado aparecerá sempre, como se estivesse pressionado. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 5 34 Projetando o menu. No item “ToolbarItemSpace” mantenha “0” esse item define a quantidade de espaços que deverá existir entre os ícones. No item “ToolbarItemOrder” mantenha “0” esse item define a ordem que o ícone deverá aparecer na janela. O Item “ToolbarItemBarIndex” define a ordem que a “Toolbar” irá aparecer quando no seu projeto existir mais de uma “Toolbar”. No Item “Object Type” selecione “Menu”. A opção “Menu Cascate” é para o caso de seu menu ter subItens. Será visto adiante. Repetiremos o mesmo processo para o item "Sair". Dê um clique em “Sair” e no template “propriedades” selecione a “aba” “ToolBar”. Em “ToolBarItemText” digite “Sair”. No Item “ToolbarItemName” selecione “Exit!”. Você pode selecionar qualquer ícone, mas para que tenhamos uma coerência no nosso projeto aconselho que siga o parametrizado. No Item “ToolbarItemDownName”, você pode selecionar o ícone que irá ser exibido quando a figura estiver sendo pressionada com o mouse. No nosso exemplo, deixe em branco. No Item “ToolbarItemVisible”, verifique se está marcado, indica que a “Toolbar” estará visível. . Esse item . Esse item sem No Item “ToolbarItemDown” deixe desmarcado marcação indica que o “ToolbarItemName” selecionado aparecerá sempre como se estivesse pressionado. PowerBuilder 9.0 Básico Capítulo 5 35 Projetando o menu No item “ToolbarItemSpace” mantenha “0”. Esse item define a quantidade de espaços que deverá existir entre os ícones. No item “ToolbarItemOrder” mantenha “0”. Esse item define a ordem que o ícone deverá aparecer na janela. No Item “ToolbarItemBarIndex” define a ordem que a “Toolbar” irá aparecer quando no seu projeto existir mais de uma “Toolbar”. No Item “Object Type”, selecione “Menu”, a opção “Menu Cascate” é para o caso de seu menu ter subItens. Será visto adiante. Os primeiros passos para montagem do menu principal da aplicação 01 já foram dados, adiante teremos a necessidade de incluir novos itens no menu, quando outras técnicas serão apresentadas. Adquirido por : Fabrício Moreira da Silva Capítulo 6 A Linguagem PowerScript Eventos Ambiente de Script A Linguagem PowerScript Fundamentos da Linguagem PowerScript Variáveis Tipos de Dados Escopo de Variáveis Encapsulamento Objetos e Controle Execução de uma função por meio da notação de ponto Estruturas Arrays Arrays multidimensionais Arrays variáveis Dados de objetos (continua) Capítulo 6 Operadores Operadores Aritméticos Operadores binários Operadores unários Operadores de combinação Operador de string Operadores lógicos Operadores relacionais Operadores de conjunção Procedência e Parênteses Comandos do PowerBuilder O Uso da estrutura IF Estrutura Choose Case Estrutura Choose Case Estrutura de iteração (Loops) Estrutura de Do Loop Estrutura For… Next Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 36 A Linguagem PowerScript. Até aqui foi aplicado o conceito de criação de janelas, janelas com herança e menu. Para continuarmos com o nosso exemplo teremos que abordar outros conceitos, como o uso de eventos, funções e da linguagem PowerScript. A linguagem PowerScript, sendo a linguagem de programação do PowerBuilder, controla o fluxo de um programa, atualiza banco de dados, exibe informações e mensagens de erro e ainda, encerra o programa. É importante que o desenvolvedor do PowerBuilder tenha um bom conhecimento do trabalho com o PowerScript. Nesta parte do manual iremos abordar : !" !" !" !" !" Ambiente de Script Compreender os eventos Tipos de variáveis do PowerScript Entender as estruturas, objetos e os controles Escopo das variáveis Programação a eventos não é um conceito novo no desenvolvimento de software. A programação mais antiga tem natureza seqüencial onde cada função pode ser considerada como resultante de uma instrução anterior. Contudo, no mundo real, a maior parte das funções de negócios são baseadas em eventos, não sendo seqüenciais. Funções baseadas em eventos são funções independentes e não obedecem a uma seqüência lógica. Em vez disso, certos eventos fazem com que as funções sejam executadas. Como conseqüência, o desenvolvimento de software se tornava difícil porque se tentava mapear o mundo baseado em eventos, nos programas de natureza seqüencial. A codificação no PowerBuilder se baseia em eventos. Se você dá um clique sobre um ícone é executado um certo PowerScript em um evento. Se uma janela perde o foco logo surge outra, e é executado outro PowerScript em outro evento. Programação de eventos se adapta melhor à maneira pela qual o usuário final irá utilizar sua aplicação. Programação de eventos é um dos muitos pontos de destaque do PowerBuilder. PowerBuilder 9.0 Básico Capítulo 6 37 A Linguagem PowerScript. É importante diferenciar Programação baseada em eventos de Ambiente de programação baseado em objetos. Muito poderia ser dito a respeito da programação baseada em objetos (OOP Object-Oriented Programming). Para simplificar, as linguagens baseadas em objetos consistem em três maneiras principais para realizar a atividade de programação. 1. Toda função e grupo de funções inter-relacionadas (classes) não devem afetar os valores de dados em outras funções.A a isto chamamos "Encapsulamento". 2. A linguagem deve permitir que seja reutilizada grande parte do seu código antigo e seja efetuada alteração. 3. As funções que herdam características de cada uma das outras devem ter a possibilidade de se personalizarem, quando necessário. A isso chamamos "Polimorfismo". Uma vez implementado, o OOP facilita bastante o projeto interativo. O projeto interativo é um projeto que pode ser ampliado posteriormente com pouco esforço do desenvolvedor, e nele consiste em criar uma pequena parte de sua aplicação de cada vez. O projeto interativo é um subproduto do desenvolvimento baseado em objetos, o que permite desenvolver sua aplicação em blocos, desde o início até o fim. Enquanto um bloco está sendo avaliado e testado você pode ampliar facilmente seu trabalho anterior. Partindo desta filosofia de OOP, desde a versão 8.0 do PowerBuilder foi implantado a “WorkSpace” onde este conceito, antes implícito, agora fica explicito desde a inicialização do seu projeto. O PowerBuilder é “visual”, com implementações que não existem em outras Ferramentas de desenvolvimento "visual". No PowerBuilder você não programa sua aplicação, mas desenha a aplicação. Quando necessário qualquer atividade de programação ela é implementada por trás dos objetos projetados. Isto pode parecer um pouco estranho, mas na construção das nossas janelas e menus você não programou para que isso acontecesse, simplesmente você desenhou, utilizando os painter para desenvolver sua aplicação. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 38 A Linguagem PowerScript. Ambiente de Script Um objeto do PowerBuilder é uma entidade que você desenvolve por meio do uso do PowerBar. Janelas, Menus, DataWindow e aplicações são exemplos de objetos. Os controles do PowerBuilder são construções que se associam aos objetos. Botões de comando, Figuras e DataWindow são exemplos de controles. Nota : Há uma diferença entre Objeto DataWindow e Controle DataWindow, será visto oportunamente. Cada controle e cada objeto podem ter um PowerScript ou Script. Vamos agora identificar o ambiente Script no PB 9.0. Dê um duplo clique no TREEVIEW à esquerda, no Objeto Window w_001. Na parte inferior do template da janela você poderá visualizar várias "abas" de tabelas como a figura abaixo. Onde: Layout : É o template que exibe a janela que você criou. Open : É o template dos eventos relacionados ao objeto em foco, no caso a sua janela, quando selecionar outro evento do seu objeto, seu nome será exibido nessa "aba". Event List : Exibe os eventos já disponíveis para o objeto em foco. Function List: Exibe as funções pré-definidas para o objeto em foco. Declare Instance Variable : Exibe o template de declaração de variáveis de Instancia, Compartilhadas e Globais, assim como, declarações de funções externas Globais e Locais. PowerBuilder 9.0 Básico Capítulo 6 39 A Linguagem PowerScript. Dê um clique na "aba" open e o template do script do evento "open" será exibido. O template de script sempre se abre automaticamente pela primeira vez no evento "open". Ele se abrirá sempre no último evento que você codificou. Neste template é que você deverá escrever seu código, caso necessite, para ser executado quando a janela "w_001" se abrir. No quadro onde foi desenhado um circulo mais claro à esquerda, você poderá selecionar o que definir. Serão disponibilizados os objeto(s), o template para declarações de funções, seja do PB ou qualquer outro que você queira definir (desenvolver), ou o template para declarações e definições de variáveis e funções externas. No quadro à direita você poderá selecionar eventos pré-definidos ou definir um novo evento. Sempre que for disparado um evento será executado o script contido nesse evento, Isto é diferente das técnicas tradicionais em outros Front-End onde um código sempre tem que ser escrito para verificar a ocorrência de eventos, e para reagir a cada evento. O PowerBuilder predetermina os eventos para os quais você precisará, ou não, codificar. Entretanto pode ser necessário um evento especial que o PowerBuilder não tenha previsto. Para definir seus próprios eventos: No quadro de seleção de eventos, selecione (New Event). Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 40 A Linguagem PowerScript. E o template para definição do novo evento do usuário será disponibilizado. Access : Neste caso ele será de acesso "Publico" Return Type : O tipo de dados que será retornado, Numérico, Caractere ou Binário, se você quiser que o evento retorne algum dado; quando definido como None não haverá retorno de dados. Event Name : O nome que você definirá para o seu evento. Pode ser qualquer nome, mas o ideal é que tenha sempre uma relação com a ação que você está definindo. Argument Type : Indica que tipo de dado será repassado para o evento. Pode ser tanto um dado de conteúdo, como valores ou textos, quanto objetos, Windows, botão etc. Argument Name : O nome definido pelo usuário para o tipo de dado definido. Ao preencher esse campo ou quando necessitar de mais campos para definir outras variáveis que o seu evento deverá receber, deve-se pressionar a tecla "TAB" para que essa linha seja repetida. Throws : Cria um trigger para uma exceção que ocorra neste evento. External : Caso esteja criando um evento para controlar um objeto externo. PowerBuilder 9.0 Básico Capítulo 6 41 A Linguagem PowerScript. Event ID : Você poderá selecionar um dos eventos do PB que já estão definidos mas não disponibilizado para o objeto em foco. Também serve para selecionar um evento denominado "pbm_customX" onde X está em um intervalo de 1 a 75, mas neste caso, a passagem de parâmetros é padrão, ou seja deve-se não selecionar nenhum valor. Fundamentos da Linguagem PowerScript Comentário : // Barra dupla, Transforma em comentário o restante da linha. Também é possível incluir entre /* e */ uma seqüência de texto ou até mesmo diversas linhas. Exemplo : X = Y // Isto é comentário ou /* Isto também é comentário */ Caracter de continuação : & E comercial, Algumas vezes uma linha de comando se estende além do limite da janela o que pode tornar difícil à depuração, a impressão ou a visualização do PowerScript. Digite o caractere de continuação &, ao final da linha, de modo a informar ao programa que o comando continua na linha seguinte. Exemplo : var_01 = "Aqui é um exemplo de con" & +"tinuação" Espaço em branco : Espaço em branco, ou seja, os espaços vazios entre variáveis, constantes ou comandos são ignorados em PowerScript. A exceção acontece quando se está no interior de uma variável string. Você pode inserir entre os comandos a quantidade de espaços que desejar. Dica : Lembre-se que a tecla "Enter" não é considerada como espaço em branco. O retorno do cursor somente são ignorados quando está dentro de um comentário. Variáveis Como qualquer outra linguagem o PowerScript permite que você utilize uma variável para armazenar valores. Algumas dessas variáveis são declaradas por você, outras são declaradas pelo próprio PowerBuilder. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 42 A Linguagem PowerScript. Tipos de Dados Toda variável tem um tipo de dado que informa ao desenvolvedor que tipo de informações estão armazenadas na variável, bem como também informa ao PowerBuilder qual a quantidade de espaços de armazenamento que deverá ser reservado e ainda como tratar a variável. Sintaxe: Tipo_de_dado nome_da_variavel Para declarar uma variável do tipo inteira e numérica, utilizaremos: Int contador Onde : int é o tipo de dado Integer (inteiro) no caso e contador é o nome da variável. Tipo de dado Boolean(booleano) Charater (caráter) Date (data) DateTime Decimal Integer (inteiro) Long (longo) String Time (hora) Faixa de variação TRUE ou FALSE Observação Variável lógica Pode ser abreviado como char De 01-01-1900 até 12-31- A data esta no formato mm-dd3000 aaaa. Não são permitidos espaços em branco. 01-01-1900 00:00:00:0000 23:59:59:9999 Até 18 dígitos (todos O separador pode estar em significativos) qualquer lugar entre os 18 dígitos. O tipo pode ser abreviado como dec De -32.768 até +32.767 Pode ser abreviado como int De -2.147.483.648 até +2.147.483.647 Até 60.000 caracteres Todos os caracteres ASCII De 00:00:00:0000 A hora é incrementada em Até 23:59:59:9999 segundos PowerBuilder 9.0 Básico Capítulo 6 43 A Linguagem PowerScript. Tipo de dados Blob Double DragObject Object PowerObject Real UsingnedInteger UnsignedLong LongLong 64 bits Faixa de variação Observação Tipo de dado não vinculado que significa objeto binário extenso. É usado geralmente para guardar figuras. De 2.23E-308 até 1.78E308 Precisão de 15 dígitos Contém o tipo de objeto arrastado. Contém o tipo de dados enumerado de um objeto do PowerBuilder. Qualquer objeto do PowerBuilder, inclusive estruturas. De 1.18e-38 até 3.40E+38 Precisão de 6 dígitos De 0 até 65.535 Pode ser abreviado como unsignedint ou uint De 0 até 4.294.967.295 Pode ser abreviado como ulong De 9223372036854775808 a 9223372036854775807. Atenção : Todos os tipos de dados numéricos incluem faixas de variação para cada tipo de dado. Alguns tipos de dados numéricos também incluem dígitos de precisão (dígitos significativos) . Se você efetuar um cálculo com perda de dígitos significativos o PowerBuilder não informará sobre isto. Tenha cuidado !!! Além disso, se você exceder a faixa de variação do tipo de dado ocorrerá o rollover. O rollover acontece quando um número excede o limite de uma faixa de variação, e recomeça em outro extremo de faixa. Por exemplo, se você armazenasse 32.766 em uma variável inteira e acrescentasse cinco unidades a variável inteira conteria o valor -32.765 no campo. Em outras palavras foi efetuado o rollover de quatro unidades e agora você tem um valor incorreto guardado na sua variável inteira. Nenhuma mensagem de erro irá surgir se isso acontecer. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 44 A Linguagem PowerScript. Escopo de Variáveis Em linguagens mais antigas, como COBOL e BASIC, qualquer variável poderia ser acessada de qualquer local da aplicação . Atualmente , a maior parte das linguagens aceita o conceito de escopo de variável. O escopo de variável descreve onde uma variável pode ser utilizada. O conceito de escopo de variável é importante. O escopo permite a um usuário escrever uma função ou um evento sem sobrescrever as variáveis de outra área da aplicação, mesmo que as variáveis tenham o mesmo nome. Há quatro níveis de escopo no PowerBuilder. Escopo local : As variáveis de escopo local (variáveis locais) são variáveis que você declara dentro do seu script. As variáveis definidas pelo usuário que você emprega são, em sua maioria, variáveis locais, que só existem no interior do evento ou da função em que são declaradas. Exemplo : Você pode declarar uma variável int contador no evento "open" da janela w_001 e declarar também int contador no evento "close" da mesma janela w_001. Neste caso você tem duas versões de contador isoladas uma da outra o que você fizer no contador no evento "open" não influenciará o contador no evento "close". Escopo de instancia : As variáveis de escopo de instancia são variáveis às quais o objeto inteiro tem acesso. Se você declara uma variável como sendo uma variável de instância de um objeto então qualquer evento, função ou controle desse objeto terá acesso à variável. Escopo Compartilhado : Em uma aplicação com janelas MDI você pode abrir mais de uma janela do mesmo tipo; ou seja, você pode abrir mais de uma "w_001". Essas versões múltiplas da mesma janela são chamados instancias da janela. As variáveis compartilhadas são variáveis que podem ser compartilhadas por todos os objetos, funções ou controles de cada instancia de um objeto. Escopo Global : As variáveis globais são acessadas por toda a aplicação. Elas nunca saem do escopo enquanto a aplicação não é fechada. Você não deve usar variáveis globais se outro tipo de variável servir. O uso de uma grande quantidade de variáveis globais viola o princípio do encapsulamento. PowerBuilder 9.0 Básico Capítulo 6 45 A Linguagem PowerScript. Se você define uma variável global em um evento qualquer outro evento pode reinicializar a variável sem que aquele evento tome conhecimento do fato. Encapsulamento O termo encapsulamento é usado com freqüência na programação baseada em objetos. Quando uma função ou um evento estiver encapsulado isso significa que ele é independente. A função encapsulada não pode ter suas variáveis alteradas a partir do seu exterior. Além disso, a função encapsulada também não tem acesso a variáveis fora dela própria. O Encapsulamento é uma questão de grau. Para elevar o encapsulamento de um sistema ao maior grau possível existem algumas regras, a saber : 1. É desejável que todas as suas declarações de variáveis sejam locais. Essa é a melhor maneira de encapsular seus dados, evitando que eles sejam danificados por outras funções e eventos. Nesse nível mais elevado de encapsulamento uma função ou um evento pode ser inserido em qualquer objeto e ainda funcionar de maneira apropriada. 2. Quando uma variável local não funciona porque você precisa preservar um valor ou ter acesso à variável a partir de outras áreas do seu objeto, experimente usar uma variável de instância caso não resolva dessa forma use uma variável compartilhada. 3. Como último recurso utilize uma variável global. As variáveis globais podem ser acessadas e alteradas por qualquer objeto ou função em uma aplicação. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 46 A Linguagem PowerScript. Objetos e Controle Na programação orientada a objetos, freqüentemente você precisa se referir a um controle do interior de outro controle, necessitará alterar suas configurações originais (seus atributos) em tempo de execução. Todo controle e todo objeto possui atributos ou variáveis que controlam a sua funcionalidade e a sua aparência. Podemos ter acesso aos atributos de um objeto ou controle por meio da notação de ponto. controle.atributo objeto.atributo Para definir um atributo você referencia o controle ou o objeto em que se encontra o atributo. Essa referência é seguida por um ponto (.) e pelo nome do atributo. A maior parte dos objetos e controles tem um atributo booleano chamado visible (visível) que estabelece se o objeto ou controle pode ser visto na tela. Suponha que exista um objeto botão (cb_01) na janela w_001. Para definir o atributo para o botão cb_01, usaríamos a seguinte notação: w_001.cb_01.visible = FALSE // botão está invisível Você também pode verificar a propriedade do botão usando a seguinte instrução IF: IF w_001.cb_01.visible THEN {executa alguma função} END IF Execução de uma função por meio da notação de ponto Você também utiliza a notação de ponto para executar funções. Todo objeto bem como todo controle, têm um conjunto de funções que podem ser executadas em seu interior. PowerBuilder 9.0 Básico Capítulo 6 47 A Linguagem PowerScript. A função Hide é compartilhada pela maioria dos controles e objetos, e estabelece o atributo visible como FALSE. Para ocultar o botão cb_01 na janela w_001 através de uma função ao contrário de ocultá-lo por meio de um atributo, use a função: w_001.cb_01.Hide () No mesmo patamar teremos Show para estabelecer o atributo visible como TRUE. Para tornar o botão cb_01 visível na janela w_001 através de uma função use a função abaixo: w_001.cb_01.Show () Se você estiver no escopo do objeto, que você quer alterar seu atributo, você pode referenciá-lo diretamente. cb_01.Hide () ou cb_01.Show () ou This.Hide () ou This.Show () A notação de ponto é utilizada largamente em linguagens orientada a objetos. Por ser uma linguagem totalmente estruturada você pode navegar pela estrutura dos objetos através da notação de pontos. Exemplo : Se você quiser acessar o evento “Clicked!”, do item “Sair” do menu m_menu01, no qual definimos o comando PowerScript “Close (w_001)” sem precisar clicar no item “Sair” escreva : M_menu01.m_sair.TriggerEvent (Clicked!) Com este comando PowerScript você faz o PowerBuilder imaginar que o usuário abriu o menu “Arquivo” e escolheu a opção “Sair”. Você pode usar a função TriggerEvent no PowerBuilder com a finalidade de forçar o PowerBuilder a executar um evento. TriggerEvent usa um único argumento. Este pode ser uma string contendo o nome do evento ou um tipo de dados enumerado do PowerBuilder descrevendo o evento. Clicked! é um tipo de dado enumerado que descreve um evento clicked acionado. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 48 A Linguagem PowerScript. Estruturas Você usa as estruturas para criar seu próprio tipo de dados. As estruturas contêm muitas variáveis inter-relacionadas diferentes de diversos tipos agrupadas sob um nome único. As estruturas permitem que você faça a movimentação dos dados e usando um único nome, para fazer referência a eles. Criando uma estrutura. Clique em “New”, selecione “PB Object” e clique em “Structure” O template para a criação da estrutura é bem simples, com um quadro para a seleção do tipo de dados e um quadro para a definição do nome da variável, ao final clique em salvar. Nota : É sempre importante você utilizar a padronização para nomes de objetos, funções e etc. Capítulo 6 PowerBuilder 9.0 Básico 49 A Linguagem PowerScript. Você acabou de criar uma estrutura global. O PowerBuilder também permite declarar estruturas locais que só podem ser acessadas no objeto em que foram criadas. Para criar uma estrutura local no PB 9 abra a janela à qual você quer que sua estrutura pertença, clique em “Insert” no menu principal e selecione “Structure”, abrindo o painter de criação de estrutura. Ao salvar essa estrutura ela só poderá ser acessada dentro da instância dessa janela. A qualquer momento você pode alterar a sua estrutura, incluindo, excluindo ou alterando tipo e nome de dados. Acessando uma estrutura Você terminou de criar a sua estrutura, mas lembre-se de que uma estrutura é um tipo de dado e não uma variável. Ainda é preciso declarar variáveis usando a sua estrutura, e depois utilizar a notação de ponto para obter acesso às variáveis no interior da estrutura. Para um melhor entendimento vamos criar uma pseudo-estrutura: Nome da estrutura Variável 1 string Variável 2 string Variável 3 string : : : : str_identifica s_nome s_sigla s_senha Em PowerScript : // cria a variável identifica_usuario com o modelo de dados da // estrutura str_identifica str_identifica identifica_usuario //criando variáveis locais com o mesmo padrão de dados da estrutura string nome string sigla, senha Adquirido por : Fabrício Moreira da Silva Capítulo 6 PowerBuilder 9.0 Básico 50 A Linguagem PowerScript. //atribuindo dados a variáveis locais. nome = “Roberto” sigla = “bob” senha = “power” // Atribuindo dados à estrutura identifica_usuario.s_nome = nome identifica_usuario.s_sigla = sigla identifica_usuario.s_senha = senha ARRAYS Os arrays são séries de variáveis indexadas do mesmo tipo de dados. Você declara um array colocando um número entre colchetes logo após uma declaração de dados. Ao declarar uma variável inteira de nome “X” criamos uma única célula de inteiro na memória. Int x Acrescentando [5] à declaração do inteiro “X” você passa a ter cinco inteiros declarados. Int x[5] Os arrays podem ser acessados usando o nome do array seguido por um número entre colchetes X[1] X[2] X[3] X[4] X[5] Capítulo 6 PowerBuilder 9.0 Básico 51 A Linguagem PowerScript. Arrays Multidimensionais Se a declaração de um array tiver mais de um conjunto de números depois dela, isto significa que foi declarado um array multidimensional. Array simples Int X [5] X[1] X[2] X[3] X[4] X[5] X[1,4] X[2,4] X[3,4] X[4,4] X[1,5] X[2,5] X[3,5] X[4,5] Array Multidimensional int x[4,5] X[1,1] X[2,1] X[3,1] X[4,1] X[1,2] X[2,2] X[3,2] X[4,2] X[1,3] X[2,3] X[3,3] X[4,3] Onde : Int x[linha, coluna] Array variáveis Os arrays variáveis são arrays cujo tamanho não é definido no momento da declaração. Para declarar um array variável deixe o número fora dos colchetes quando declarar o array. O tamanho será estabelecido com o primeiro acesso a esse array. Int x [] // Define o limite superior do array como 35 e preenche a posição 35 // com o dado 1234 Int x [35] = 1234 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 52 A Linguagem PowerScript. Dados de objetos Os objetos que você declara constituem um tipo de dados. Esses tipos de dados especiais são chamados de instâncias do seu objeto. O principal uso das variáveis de instâncias é a abertura de várias versões da mesma janela em um quadro MDI. Desejando abrir duas janelas w_001 você poderia usar o seguinte trecho de código: W_001 janela1 // declara a primeira instância de w_001 W_001 janela2 // declara a segunda instância de w_001 Open (janela1,w_001) Open (janela2,w_001) A sintaxe anterior abre duas janelas. Você pode navegar entre as janelas utilizado “Alt+Tab”. Operadores Existem quatro tipos de operadores: aritméticos, de strings, lógicos e de agrupamento. !" !" !" !" Operadores aritméticos são usados em cálculos matemáticos; Operadores lógicos são utilizados para realização de testes de condições; Operadores strings executam funções sobre variáveis do tipo string; Operadores de agrupamento são os parênteses esses afetam a ordem na qual os outros operadores serão executados; Operadores Aritméticos. Os operadores aritméticos podem ser divididos em três categorias : !" !" !" Operadores binários; Operadores unários; Operadores de combinação; Capítulo 6 PowerBuilder 9.0 Básico 53 A Linguagem PowerScript. Os operadores binários exigem dois operandos (variáveis ou constantes) Os operadores binários do PowerBuilder estão relacionados na tabela abaixo: Símbolo ^ Nome Exponenciação Exemplo a^b + * / = Adição Subtração Multiplicação Divisão Igualdade a a a a a +b -b *b /b =b Descrição Eleva a, à potência representada pelo expoente b Soma a + b Subtrai b de a Multiplica a por b Divide a por b Atribui o valor de b em a Os operadores unários requerem um único operando. Os operadores unários do PowerBuilder encontram-se na tabela abaixo. Símbolo - Nome Negativo Exemplo -a + Positivo +a ++ Incremento a ++ -- Decremento a -- Descrição Simboliza o valor negativo de a Simboliza o valor positivo de a Incrementa uma unidade ao valor de a Decrementa uma unidade ao valor de a Adquirido por : Fabrício Moreira da Silva Capítulo 6 PowerBuilder 9.0 Básico 54 A Linguagem PowerScript. Os operadores de combinação são operadores binários que combinam as características de dois operadores , o operador de igualdade e o de adição ou subtração. Como os operadores de combinação são binários, eles exigem dois operandos. Símbolo += -= *= /= ^= Nome Plus Equal Minus Equal Times Equal Divide Equal Power Equal Exemplo a+=b a-=b a*=b a/=b a^=b Defina Define Define Define Define a, a, a, a, a, Descrição como igual a como igual a como igual a como igual a como igual a a a a a a +b -b *b /b ^b O único operador de string do PowerBuilder usa um sinal de adição (+) para concatenação. String x1 = “Power” String x2 = “Builder” String x3 = x1 + x2 O valor resultante em x3 é : “PowerBuilder” Os operadores lógicos testam se uma condição é verdadeira ou falsa. Há dois tipos de operadores lógicos: os operadores relacionais e os operadores de conjunção. Capítulo 6 PowerBuilder 9.0 Básico 55 A Linguagem PowerScript. Os operadores relacionais são sempre binários e, portanto, exigem dois operandos. Símbolo Nome = Igual Exemplo a=b > Maior que a>b < Menor que a<b >= Maior que ou igual a>=b a Menor que ou igual a<=b a Não igual a <> b <= <> Descrição Retorna TRUE se a é igual ab Retorna TRUE se a maior que b Retorna TRUE se a é menor que b Retorna TRUE se a é maior ou igual a b Retornar TRUE se a é menor ou igual a b Retorna TRUE se a não é igual a b Todo operador relacional que não retorna TRUE, retorna FALSE. Os operadores de conjunção têm expressões relacionais com seus operandos. Os três operadores de conjunção do PowerBuilder são dois operadores binários , (AND e OR), e um operador unário, (NOT). Suas funções podem ser vistas na tabela verdade abaixo: a TRUE TRUE FALSE FALSE b TRUE FALSE TRUE FALSE a AND b TRUE FALSE FALSE FALSE b OR b TRUE TRUE TRUE FALSE Not a FALSE FALSE TRUE TRUE A primeira linha pode ser lida como “Se a é TRUE e b é TRUE, então a AND b é TRUE, a OR b é TRUE e NOT a é FALSE” Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 56 A Linguagem PowerScript. Procedência e Parênteses Certas operações têm precedência sobre outras. Por exemplo, 5 + 4 * 3 pode parecer que resulta em 27, porque 5 + 4 = 9 e 9 * 3 = 27. Na verdade, essa equação resulta em 17, porque a multiplicação (*) tem precedência sobre a adição (+). Desse modo 4 * 3 é avaliado primeiro totalizando 12, em seguida é somado o valor 5 a esse resultado. Para que o resultado fosse 27, teríamos que escrever : (5 + 4) * 3 Comandos do PowerBuilder A linguagem PowerScript contém dois tipos de instruções: funções embutidas (ou internas) e comandos. Embora existam muitas funções internas há somente três tipos principais de comando: os comandos de atribuição que atribuem um valor a uma variável; as estruturas de decisão que consistem em instruções IF e instruções Choose Case; e as estruturas iterativas (ou de loops), que consistem em loops Do e loops For...Next. As estruturas de decisão são comandos que avaliam variáveis. O PowerBuilder aceita dois tipos de estruturas de decisão: a estrutura IF..ElseIf..Else...End (ou apenas a estrutura IF) e a estrutura Choose Case. O Uso da estrutura IF A instrução IF avalia variável. Com base nessa avaliação a instrução IF realiza alguma forma de ação. IF a < b THEN Um comando ou conjuntos de comandos END IF IF a < b THEN um comando // dispensa o END IF IF a < b THEN Um comando ou conjuntos de comandos ELSE Um comando ou conjuntos de comandos END IF Capítulo 6 PowerBuilder 9.0 Básico 57 A Linguagem PowerScript. IF a < b THEN Um comando ELSEIF a < c THEN Um comando ELSEIF a > d THEN Um comando ELSE Um comando END IF ou conjuntos de comandos ou conjuntos de comandos ou conjuntos de comandos ou conjuntos de comandos Você pode ter quantas cláusulas ELSEIF desejar em uma instrução IF. O Uso de instrução IF é uma forma eficiente de controlar o fluxo do seu programa de acordo com as informações existentes. Estrutura Choose Case A estrutura CHOOSE CASE avalia uma única variável de diversas maneiras diferentes. Choose Case variável_a_ser_testada Case expressão 1 Um comando ou conjuntos Case expressão 2 Um comando ou conjuntos Case Expressão 3 Um comando ou conjuntos Case ESLE Um comando ou conjuntos END Choose de comandos de comandos de comandos de comandos Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 6 58 A Linguagem PowerScript. Exemplo: Choose Case salario Case is > 4000 Um comando ou Case 2000 to 3000 Um comando ou Case 2000, 2100,2200 Um comando ou Case 5000 Um comando ou Case Else Um comando ou END Chosse conjuntos de comandos conjuntos de comandos conjuntos de comandos conjuntos de comandos conjuntos de comandos Estrutura de iteração (Loops) As estruturas de loops são construções que causam a execução de uma série de comandos um certo número de vezes. A linguagem PowerScript tem duas estruturas de loop: a estrutura Do Loop e a estrutura For...Next. Estrutura Do Loop Em PowerScript é uma maneira eficiente de implementar um loop. Existem quatro maneiras de implementação. Do While condição 1 Conjunto de comandos 1 Loop Do Until condição 2 Conjunto de comandos 2 Loop Do Conjunto de comandos 3 Loop Until condição 3 Do Conjunto de comandos 4 Loop While condição 4 Capítulo 6 PowerBuilder 9.0 Básico 59 A Linguagem PowerScript. Estrutura For… Next Outro tipo de estrutura de loop é o loop For.. Next que combina a iteração e o incremento de um contador. For variável_numérica = inicio TO fim { Step incremento } Conjunto de comandos Next For a = 1 to 10 b=b+a Next For a = 100 to 1 Step -1 b=b+a Next Adquirido por : Fabrício Moreira da Silva Capítulo 7 Transações de Bancos de Dados Definindo uma transação Montando a transação em PowerScript O uso do SQL no PowerBuilder PowerBuilder 9.0 Básico Capítulo 7 60 A Linguagem PowerScript. Transações de Bancos de Dados. Os objetos de transações são usados pelo PowerBuilder para se comunicar com um banco de dados. Antes de usar um banco de dados você tem que defini-lo no objeto de transação. Embora você possa definir sua própria variável de transação o PowerBuilder lhe oferece uma variável padrão, SQLCA. Um objeto (ou estrutura) de transação como SQLCA possui quinze campos. Dez desses campos precisam ser preenchidos pelo desenvolvedor, os outros cincos são usados para uma área de retorno depois que você efetua a chamadas de SQL. Atributo DBMS Database Tipo de dado String String UserId String DBParm DBPass String String Lock LogId String String LogPass ServerName String String AutoCommit Boolean Descrição nome do tipo de banco de dados nome do banco de dados ao qual você esta se conectando Identificação do usuário que esta se conectando ao banco Específica de um DBMS senha que será usada para conexão com o banco de dados. nível de bloqueio nome ou identificação do usuário que irá se conectar ao servidor senha usada para a conexão ao servidor nome do servidor no qual reside o banco de dados Indicador automático de Commit, (TRUE) automático. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 7 A Linguagem PowerScript. Atributo SQLDBCode Tipo de dado Long SQLDBNRow s SQLDBCode Long Long SQLErrText String SQLReturnDa String ta Descrição Código de sucesso ou falha da operação de SQL mais recente: 0 = Sucesso; 100 = Nenhum conjunto de resultados retornado; -1 = Erro (Use SQLDBCode ou SQLErrText para obter os detalhes). O Número de linhas afetadas. O código de erro do fornecedor do banco de dados. A mensagem de erro do fornecedor do banco de dados Dados de retorno específicos do DBMS Definindo uma transação Transação DataBase Usuário Senha CONEXÃO : : : : : SQLCA TESTE joao 12345 VIA ODBC Montando a transação em PowerScript. SQLCA.DBMS = “ODBC” SQLCA.Database = “TESTE” SQLCA.USERID = “joao” SQLCA.DBPass = “12345” SQLCA.DBParm = “ ConnectString=´DSN=TESTE;UID=DBA;PWD=SQL´” // Conectando CONNECT USING SQLCA; 61 PowerBuilder 9.0 Básico Capítulo 7 A Linguagem PowerScript. //Testando a conexão IF SQLCA.SQLCode <> 0 THEN Messagebox (“DataBase”, “Erro ao conectar”) HALT END IF Definindo uma transação Transação DataBase Usuário Senha CONEXÃO : : : : : SQLCA TESTE joao 12345 NATIVA ORACLE Montando a transação em PowerScript. sqlca.DBMS sqlca.database sqlca.userid sqlca.dbpass sqlca.logid sqlca.logpass sqlca.servername sqlca.dbparm = = = = = = = = "O73 Oracle 7.3" “” “” “” "joao" "12345" @ORACLE_PROD DelimitIdentifier='No',Block=1000 // Conectando CONNECT USING SQLCA; //Testando a conexão IF SQLCA.SQLCode <> 0 THEN Messagebox(“DataBase”, “Erro ao conectar”) HALT END IF Adquirido por : Fabrício Moreira da Silva 62 PowerBuilder 9.0 Básico Capítulo 7 63 O uso do SQL no PowerBuilder. A SQL(Structures Query Language) é uma linguagem comum encontrada em muitos bancos de dados. A SQL foi criada para oferecer ao desenvolvedores um método comum para atualização e recuperação de dados de tabelas de um banco de dados. A SQL permite o acesso a um banco de dados a partir do painter PowerScript. Pode ser que você não tenha percebido, mas escrever instruções em SQL pode ser um trabalho penoso. Você é obrigado a conhecer além da sintaxe de SQL, as colunas das tabelas que deseja acessar. O PowerBuilder responde a essa exigência através do seu Painter de SQL. O ícone “DataBase” fornece acesso ao “DataBase Administration” um ambiente visual que proporciona um total controle de acesso, edição e desenvolvimento de bancos de dados. PowerBuilder 9.0 Básico Capítulo 7 64 O uso do SQL no PowerBuilder. No ícone “DB Profile” DataBase Profile você pode criar, modificar e excluir uma conexão. Se você instalou o PB 9 e o SQL AnyWhere Studio poderá ter acesso ao banco EAS Demo Db V9 que acompanha o PB 9.0 e verificar a potencialidade deste painter. Na figura anterior, no template Object Layout, você pode visualizar graficamente todo o seu banco assim como seus relacionamentos. Clique em para expandir o item ODB ODBC , em seguida clique em “Table” para listar as tabelas do banco EAS Demo Db V9. Coloque o mouse sobre a tabela “bônus”, pressione o botão esquerdo e arraste para o template Object Layout onde você poderá visualizar a tabela bonus. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 7 65 O uso do SQL no PowerBuilder. Clicando com o botão direito do mouse sobre a barra de titulo da tabela aparecerá o menu-popup . PowerBuilder 9.0 Básico Capítulo 7 66 O uso do SQL no PowerBuilder. Close : Fecha a tabela em foco. New : Habilita a criação de Index, Foreign Key, Primary Key e a tabela em foco. Coluna para Edit Data : Edita a tabela no formato Grid, Tabular ou Livre permitindo inclusão, alteração e exclusão de dados. DataPipeline : Ativa o template de PipeLine. O PipeLine é um objeto do PowerBuilder que auxilia na construção, manutenção, cópia e exportação de dados. Alter Table : Habilita o template para a alteração física da tabela, nome da coluna, tamanho do campo etc. Drop Table : Exclui fisicamente uma tabela. Print Definition : Imprime a definição da tabela em foco. Export Sintaxe : Exporta a sintaxe de criação para o parâmetro de ODBC selecionado, da tabela em foco. Properties : Exibe as propriedades da tabela. Adquirido por : Fabrício Moreira da Silva Capítulo 8 DataWindow Objeto DataWindow Fonte de dados Interface inteligente Interface com o usuário Como criar um objeto DataWindow Fontes de dados SQL Select Query Stored Procedure External Montando uma DataWindow com SQL Select Template de SQL Argumentos (continua) Capítulo 8 Personalizando sua DataWindow Composite Crosstab (planilha) FreeForm (Formulário livre) Graph (Gráfico) Grid (Grade) Group (Grupo) Label (Etiquetas) N-up (Múltiplas linhas) Olé 2.0 RichText Tabular Cores e Bodas Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 67 DataWindow Objeto DataWindow O objeto DataWindow é um objeto exclusivo do PowerBuilder. É usado para recuperar, apresentar, manipular e atualizar dados de uma base de dados relacional ou de outras fontes de dados. Esse objeto encapsula as informações sobre a fonte de dados. Inclui também informação de formatação que descreve como o dado deve ser apresentado no controle DataWindow. A informação codificada no objeto DataWindow é usada pelo núcleo da DataWindow para fornecer uma interface inteligente entre o cliente e o servidor em tempo de execução. Buffers são associados ao objeto DataWindow para armazenar os dados. Estes dados são referenciados como result set. PowerBuilder 9.0 Básico Capítulo 8 68 Fonte de dados Uma das informações encapsuladas no objeto é a fonte de dados. Existem dois tipos de fontes de dados: !" Relacional, que deve executar um comando SELECT em uma tabela ou view, ou um EXECUTE PROCEDURE !" Não relacional, para importar arquivos seqüenciais (nos formatos TXT, DBF, CSV e XML) ou pela digitação do usuário. Interface inteligente O núcleo do objeto administra todo o relacionamento que deve existir entre a máquina cliente e o servidor de banco de dados. Por exemplo, o núcleo da DataWindow sabe onde existe um item de dado alterado, quando um item de dado é obrigatório, qual é o tipo de dado e quando um valor passa pelas regras de validação. Antes de o processamento iniciar o núcleo da DataWindow realiza todas essas checagens nos dados assegurando a validade dos mesmos. Interface com o usuário O PowerBuilder fornece uma variedade de features para criação de uma interface com o usuário atrativa e amigável. Permite que se escolha o estilo de apresentação dos dados recuperados. Os estilos possíveis são: tabular, grid, freeform, label, N-up, OLE, rich text, groups, graphs, crosstabs, e composite. Exemplo: Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 69 Como criar um objeto DataWindow O PowerBuilder também fornece outras facilidades para melhorar o formato padrão de apresentação. Por exemplo, podemos reorganizar e classificar os itens de dados. Podemos, também, adicionar elementos gráficos como linhas, círculos e retângulos, botões, figuras, etc. New. 1. Na PowerBar1 clique em 2. No template New selecione o tipo de estilo que sua DataWindow deverá apresentar. (figura 1.1) 3. No Template Fonte de Dados, (figura 1.2), você deve selecionar o tipo de fonte de dados que sua DataWindow irá processar. Figura 1.1 PowerBuilder 9.0 Básico Capítulo 8 70 Fontes de dados. Figura 1.2 Entendendo Fonte de Dados No PowerBuilder, existem cinco maneiras de sua DataWindow, recuperar dados, a saber: 1. 2. 3. 4. 5. Quick Select; SQL Select; Query; Store Procedures; External. Quick Select. No PowerBuilder é a forma mais simples de definir a fonte de dados. Você não escreve nada, apenas desenha com o mouse o tipo de dado. Esta opção impõe alguns limites pois a navegação entre a tabela só é possível através dos seus relacionamentos. O Tipo de SELECT utilizado é o mais simples, apenas a cláusula WHERE é suportada. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 71 SQL Select. Permite que o desenvolvedor selecione livremente o conjunto de tabelas do banco de dados. Suporta todas as clausulas pertencentes ao comando SELECT, padrão ANSI (ODBC) e padrão do seu banco, com a conexão nativa. Query O mesmo tipo de comando SELECT da opção SQL Select pode ser obtido usando o template Query. Este comando, uma vez salvo na biblioteca PowerBuilder como um objeto do tipo Query, pode ser utilizado como base para a construção de objetos DataWindow. Stored Procedure Esta seleção retorna uma lista de stored procedures gravadas no banco de dados atualmente conectado. Uma stored procedure é um conjunto de comandos SQL que executam uma operação no banco de dados. Quando escolhemos uma stored procedure da lista o objeto DataWindow constrói o result set da DataWindow em função das colunas recuperadas pela stored procedure selecionada. O uso de Stored Procedures pode incrementar a performance pela redução: !" !" do número de passos que a DataWindow percorre para recuperar dados do tráfego na rede O DBMS compila a stored procedure no momento da sua criação. External O PowerBuilder possibilita que o desenvolvedor forneça externamente a fonte de dados para construção da DataWindow. Para isso o padrão EXTERNAL foi disponibilizado. Tal opção exige que se informe o nome do dado e o formato para cada coluna. Capítulo 8 PowerBuilder 9.0 Básico 72 Montando uma DataWindow com SQL Select Quando selecionado o SQL Select, o template para seleção das tabelas disponíveis no banco de dados conectado é apresentado. Ao fundo o template de construção da DataWindow receberá a sua seleção. Com um duplo clique no nome da tabela selecione a(s) tabela(s). Ao final clique em “Cancel” . Selecionando as tabelas “departament” e “employee” como exemplo, teremos no template de “Layout”: Neste exemplo, escolhemos um conjunto de tabelas que possuem representa o “Join” entre as tabelas. Um duplo relacionamentos onde clique sobre o símbolo do “Join” abrirá o template de possibilidades de junção da tabela, sempre com a opção definida com foco. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 73 Montando uma DataWindow com SQL Select A tabela a seguir, descreve as possibilidades de “Join”. Símbolo *= =* > < <= >= <> Descrição Tabela A = tabela B e linhas da tabela A que não tenham correspondência em B Tabela A = tabela B e linhas da tabela B que não tenham correspondência em A Tabela A > que tabela B Tabela A < tabela B Tabela A menor ou igual à tabela B Tabela a maior ou igual à tabela B Tabela a diferente da tabela B Você também pode especificar um “Join” manualmente. Para isso clique no Join e selecione a(s) coluna(s) para realização desse “Join”. Ao ícone término clique no ícone “Join” outra vez. Assim como podemos criar, podemos excluir um “Join”. Dê um duplo clique no ícone no template “Join” e selecione a opção à excluir em seguida clique no botão “Delete”. PowerBuilder 9.0 Básico Capítulo 8 74 Montando uma DataWindow com SQL Select Template de SQL Neste template, localizado na parte inferior do template DataWindow, existem algumas ferramentas de auxílio na construção do seu comando SQL, são elas: Template SQL Onde : Sort : Seleciona as colunas para a classificação do resultado da query. A colunas selecionadas farão parte da clausula “Order By”. Where : Define o critério de seleção de dados na query. Group : Agrupa logicamente o resultado da query criando um grupo definido pelo desenvolvedor para sumarizar os dados da(s) coluna(s) selecionada(s). Having : Restringe os dados recuperados pela query, baseado na seleção feita pelo desenvolvedor. Compute : Cria uma nova coluna, com referência, ou não, a outras colunas da tabela selecionada. Syntax : Exibe a query montada. Nota : Muitas vezes poderá ser interessante manipularmos os dados da tabela. Por exemplo, na tabela existem as colunas salario e gratificacao. Só o que interessa no relatório é a renda composta pelo salario + gratificação. É mais lógico trafegar pela rede somente a informação de renda do que as informações de salário e gratificação que serão somadas na máquina cliente. Para excluir uma coluna computada basta limpar a sua especificação na pasta Compute. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 75 Montando uma DataWindow com SQL Select A cláusula Where, se existir, contém o critério lógico do relacionamento entre as tabelas escolhidas. Se não desejarmos recuperar todas as linhas do banco de dados, devemos acrescentar um critério lógico para seleção das linhas. Normalmente a cláusula Where é formada por colunas do banco de dados, colunas computadas e argumentos de recuperação, fornecidos pela aplicação ou pelo usuário. Argumentos O PowerBuilder permite que você defina argumentos. Argumentos são variáveis que serão encaminhadas na chamada de execução da query, com o propósito de filtrar a seleção. Selecione no menu principal, item ‘Design “ e sub item” Retrieve Arguments “ para exibir o template de definição”: Escreva o nome do argumento e o tipo de variável. Ao final clique em “OK”. Outro método muito interessante é que o PowerBuilder disponibiliza o modo “Syntax”, da sua query, onde você poderá incluir manualmente (digitando direto) definições mais elaboradas na sua query. No Menu principal, selecione “Design” e sub item “Convert to Syntax” para retornar ao modo gráfico. Então, selecione “Design” e sub item “Convert to Graphics”. Atenção : Algumas implementações não serão suportadas no modo “Gráfico” mas funcionarão perfeitamente no modo “Syntax”. Capítulo 8 PowerBuilder 9.0 Básico 76 Montando uma DataWindow com SQL Select Com as colunas selecionadas e a query montada, clique no ícone Return, e o PowerBuilder montará sua DataWindow nos padrões de sua seleção, tanto em estilo quanto em recuperação de dados. Para retornar ao template do SQL clique em Data Source. Entendendo o template da DataWindow. No painter “Design” da DataWindow você pode movimentar os objetos a vontade até que melhor lhe sirva o Layout. Para Alterar o conteúdo dos “label”, que está em negrito, basta selecioná-los com um clique. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 77 Montando uma DataWindow com SQL Select Toda alteração será representada automaticamente no template Preview. Para atualizar os dados no template preview clique em Preview. Personalizando sua DataWindow O painter DataWindow fornece vários recursos para formatação da interface com o usuário: !" Estilos de apresentação predefinidos. !" Funções para geração de relatórios !" Funções para ajuste do formato das colunas e seus cabeçalhos. O PowerBuilder fornece vários estilos de apresentação predefinidos para auxiliar na formatação dos dados. Cada estilo de apresentação representa um formato diferente. PowerBuilder 9.0 Básico Capítulo 8 78 Personalizando sua DataWindow Composite O Estilo composite consiste em um Objeto DataWindow com vários objetos DataWindow inseridos. Trata-se de uma maneira bem profissional de apresentar um relatório pequeno com várias informações de estilos e origem, distintos ou não. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 79 Personalizando sua DataWindow Crosstab (planilha) O estilo de apresentação crosstab apresenta os dados de forma sumarizada, em células subordinadas a uma linha ou coluna. PowerBuilder 9.0 Básico Capítulo 8 80 Personalizando sua DataWindow FreeForm (Formulário livre) O estilo de apresentação freeform é muito flexível. Com este estilo, as colunas e seus labels são distribuídos na vertical. É possível organizar as colunas automaticamente em vários agrupamentos verticais através da especificação da altura máxima de uma coluna no painter DataWindow. Por default a DataWindow tem somente um campo em cada linha. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 81 Personalizando sua DataWindow Graph (Gráfico) O estilo de apresentação gráfico fornece uma apresentação gráfica do result set em vários estilos. Podemos escolher entre vários estilos, de duas e três dimensões, incluindo gráfico de barras, linha, área, pizza, etc. PowerBuilder 9.0 Básico Capítulo 8 82 Personalizando sua DataWindow Grid (Grade) O estilo de apresentação grid exibe os dados em colunas separadas por linhas de grid. Em tempo de execução, ou no modo preview, o estilo grid permite que se arraste o grid vertical de uma coluna para aumentar ou diminuir a sua largura além de trocar a seqüência das mesmas. No modo design, não se pode movimentar as colunas. Podemos, no entanto, trocar a ordem da coluna, executando o modo preview e arrastando as colunas para a posição desejada. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 83 Personalizando sua DataWindow Group (Grupo) É parecido com o estilo tabular, mas ele simplifica a construção de um objeto DataWindow tabular com agrupamentos. Quando se escolhe o estilo group, o template DataWindow exibe caixas de diálogo para definir cabeçalho de agrupamentos, gerar subtotal de agrupamentos e total geral para os campos numéricos . PowerBuilder 9.0 Básico Capítulo 8 84 Personalizando sua DataWindow Label (Etiquetas) Apresenta os dados na forma de etiquetas. Podemos escolher o estilo da etiqueta a partir de uma relação ou especificar uma configuração personalizada. N-up (Múltiplas linhas) Suporta a exibição de múltiplas linhas, repetidas horizontalmente. É útil quando a linha de detalhe é estreita. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 8 85 Personalizando sua DataWindow Olé 2.0 Conecta com servidores OLE que suportem o protocolo Uniform Data Transport (UDT). Tais como Microsoft Word, Microsoft Graph, ou Microsoft Excel entre outros, registrados na máquina cliente. RichText Uma DataWindow com o estilo de apresentação RichText, permite: !" Carregar arquivos RTF (RichText Format) !" Incluir cabeçalhos e rodapés !" Usar várias fontes, cores e tamanhos dentro de um único controle !" Fornecer funções de edição ao usuário PowerBuilder 9.0 Básico Capítulo 8 86 Personalizando sua DataWindow Tabular Exibe as colunas de dados em linhas no controle DataWindow. Formata um cabeçalho sobre cada coluna. Podem-se movimentar as colunas livremente, agrupá-las e personalizar cabeçalhos. Adquirido por : Fabrício Moreira da Silva Capítulo 8 PowerBuilder 9.0 Básico 87 Personalizando sua DataWindow Cores e Bodas Ao término da etapa de criação da DataWindow, surgirá o template para definição do estilo de borda, cores e distâncias entre as “bands” (faixas). Aconselha-se manter o default nesta etapa de criação. Tais dados podem ser alterados facilmente no template da DataWindow e, ainda com uma melhor visualização dos resultados. Marque o item “Save características padrão. as default” para criar a DataWindow com Capítulo 9 Recuperação de dados a partir de uma DataWindow Funções para o controle DataWindow Montando um Objeto DataWindow Aperfeiçoando a visualização da DataWindow Vinculando duas DataWindow Vinculando objeto DataWindow a um controle DataWindow Incluindo controle DataWindow a Window Incluindo parâmetros de atualização Rotina de inclusão Rotina de alteração Rotina de Exclusão Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 88 Recuperação de dados a partir de uma DataWindow. No PowerBuilder basicamente toda recuperação e atualização de dados são realizadas por controles de DataWindow associados com objetos de DataWindow. O Objeto DataWindow mantém o controle sobre a fonte de dados sua formatação, validação e atualização. O Controle DataWindow é usado para exibir os dados selecionados no objeto DataWindow. Sendo a interface entre o banco de dados e o usuário é nesse controle que devemos inserir os códigos PowerScript que se farão necessários para a manipulação correta da base de dados como; inclusão, alteração, validação e exclusão. Para tanto o controle DataWindow disponibiliza algumas funções já programadas que facilitam muito a manipulação de dados na DataWindow. No controle DataWindow está disponibilizado uma lista de eventos préprogramados, ao contrario de outras linguagens, o PowerScript não precisa de uma programação para detectar se um evento foi ou não disparado. Os eventos disponíveis no controle DataWindow sempre são disparados quando a condição à qual eles foram programados acorrerem, o evento “CLICKED!” será disparado quando o controle DataWindow sofrer a ação do clique do mouse, independente, se nesse evento houver uma codificação PowerScript ou não. PowerBuilder 9.0 Básico Capítulo 9 89 Recuperação de dados a partir de uma DataWindow. O PowerBuilder 9.0, disponibilizou alguns novos eventos, mas ainda não estão trigados a ações, segundo a Sybase em breve estarão, a saber: DoDefaultAction DoHitTest DoNavigation DoSelection GetChildCount GetDefaultAction GetDescription GetFocusObject GetHelp GetHelpFile GetHelpTopic GetKeyboardShortcut GetName GetRole GetSelection GetValue A DataWindow disponibiliza várias funções pré-programadas de manipulação de dados, na tabela a seguir descreveremos essas funções. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 90 Funções para o controle DataWindow. Função DataWindow AcceptText Retorno Integer CanUndo Boolean CategoryCount Integer CategoryName String ClassName Clear String Integer ClearValues Integer Clipboard Integer Copy Integer CopyRTF String Descrição Aplica o conteúdo da edição de um controle DataWindow do item corrente ao buffer da DataWindow. Retorna TRUE se a última edição pode ser desfeita para a linha e coluna especifica e FALSE se a última edição não puder ser desfeita. Retorna o número de categorias em um gráfico especifico do controle DataWindow. Retorna o nome de uma categoria especifica de um gráfico em um controle DataWindow. Retorna o nome do controle DataWindow. Apaga os textos selecionados em no controle de edição de um controle DataWindow, Se o estilo for RichText apagará os textos selecionados na DataWindow. Apaga todos os itens da lista associada com a coluna especificada no controle de DataWindow. Cópias o gráfico especificado no controle de DataWindow para o clipboard. Copia o texto selecionado no controle de edição para a linha e coluna do controle de DataWindow para o clipboard. Para uma apresentação de estilo RichText DataWindow, copia o texto selecionado no controle de DataWindow. Copia o texto selecionado, quadros, e campos de edição em um controle de DataWindow como uma linha de texto formatado com RichText. São incluídos bitmaps e campos de edição na linha. PowerBuilder 9.0 Básico Capítulo 9 91 Funções para o controle DataWindow. Função DataWindow Create Retorno Integer CrosstabDialog Integer Cut Integer DataCount Long DBCancel DBErrorCode Integer Long DBErrorMessage String DeletedCount Long Descrição Cria um objeto de DataWindow usando o código fonte especificado, substituindo o objeto DataWindow no controle DataWindow especificado com o novo objeto de DataWindow. Exibe a definição Crosstab na caixa de dialogo, onde o usuário poderá modificar a definição em tempo de execução. Corta o texto selecionado do controle de edição em uma linha e coluna da DataWindow e guarda no clipboard. Para um estilo de apresentação RichText DataWindow, corta o texto selecionado no controle DataWindow. Retorna o número de dados em uma série, em um gráfico do controle DataWindow informado. Cancela o Retrieve em progresso. Retorna o código de erro gerado pelo banco de dados. Esta Função esta obsoleta DBErrorCode é uma e será descontinuado em uma liberação futura. Códigos de erro de banco de dados estão agora disponíveis como argumentos de evento. Devolve uma linha que contém o texto da mensagem de erro gerado por um erro de banco de dados. DBErrorMessage é uma função obsoleta e será descontinuada em uma liberação futura. Devolve o número de linhas que foram apagadas do controle DataWindow, mas não foram atualizadas no de banco de dados. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 92 Funções para o controle DataWindow. Função DataWindow DeleteRow Retorno Integer Describe String Drag Integer FilteredCount Integer Find Long FindCategory Integer FindGroupChange Long FindNext Integer FindRequired Integer FindSeries Integer GenerateHTMLForm Integer Descrição Apaga a linha especificada no controle de DataWindow. Retorna informações sobre a estrutura do controle DataWindow. Começos ou fins o arrastamento no controle de DataWindow. Devolve o número de linhas que não são visíveis por causa do filtro atual. Sintaxe 1: procura a próxima linha em um controle DataWindow no qual os dados satisfaçam uma condição especificada. Sintaxe 2: Para um estilo RichText acha o texto especificado no controle e realça o texto se achou. Você pode especificar a direção de procura e se procura palavras inteiras ou em partes Retorna o número da categoria especificada do gráfico no controle de DataWindow. Procura o inicio de uma linha especificada para a primeira quebra para o grupo especificado no controle de DataWindow. Procura a próxima ocorrência de texto no controle e realça, enquanto aplica os critérios em uma chamada prévia da função de procura (find). Esta função só se aplica a controles de DataWindow cujo conteúdo tem o estilo de apresentação RichText. Identifica as colunas editáveis que o usuário não preencheu. Retorna o número das séries do gráfico no controle DataWindow. Cria um formulário HTML que contém colunas para uma ou mais linhas. PowerBuilder 9.0 Básico Capítulo 9 93 Funções para o controle DataWindow. Função DataWindow GenerateResultSet Retorno Long GetBandAtPointer String GetBorderStyle Border (enumerated ) GetChanges Long GetChild Integer GetClickedColumn Integer GetClickedRow Long GetColumn Integer GetColumnName String GetContextService Integer GetData Double GetDataPieExplode Integer Descrição Retorna um result set EAServer de um objeto PowerBuilder rodando como um componente em EAServer. Retorna uma string que contém a faixa na qual o ponteiro fica atualmente posicionado seguido por um caráter (~t). Retorna o tipo de borda da coluna especificada no controle de DataWindow. São: Box!Lowered!NoBorder!Raised!Resize Border!ShadowBox!Underline! Recupera as mudanças feitas a um DataWindow. Guarda em uma variável, o nome da coluna especificada da child DataWindow . Retorna o número da coluna no controle DataWindow que o usuário clicou ou clicou duas vezes. Retorna o número da linha no controle DataWindow que o usuário clicou ou clicou duas vezes. Retorna o número da coluna atual no controle DataWindow. Retorna o nome da coluna atual no controle DataWindow. Cria uma referência a uma instância especificada do serviço especificado. Retorna os valores de dados nas séries no gráfico do controle de DataWindow. Também veja GetDataValue. Informa à porcentagem que uma fatia é explodida em um gráfico tipo pie (torta). Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 94 Funções para o controle DataWindow. Função DataWindow GetDataStyle GetDataValue GetFormat GetFullState GetItemDate GetItemDateTime GetItemDecimal GetItemNumber GetItemStatus Retorno Integer Descrição Retorna estilos, dependendo do que for informado para se retornar. Existem 3 sintaxes diferentes. Integer Retorna o valor dos dados na série especificada no gráfico do controle DataWindow. String Retorna qual formato foi usado para exibição da coluna especificada do controle DataWindow. Long Recupera o estado completo de um DataWindow/Datastore em uma variável Blob. Esta função é principalmente usada em aplicações distribuídas. Date Retorna o dado no padrão Date na linha e coluna especificada do controle DataWindow. DateTime Retorna o dado no padrão de DateTime na linha e coluna especificada do controle DataWindow. Decimal Retorna o dado no padrão decimal na linha e coluna especificada do controle DataWindow. Double Retorna o dado no padrão Numérico na linha e coluna especificada do controle DataWindow. dwItemSta Retorna o estado do item na linha e tus coluna especificada. Valores são: (enumerat DataModified!New!NewModified!NotModif ed) ied! PowerBuilder 9.0 Básico Capítulo 9 95 Funções para o controle DataWindow. Função DataWindow GetItemString GetItemTime GetMessageText GetNextModified GetObjectAtPointer GetParent GetRow GetRowFromRowId GetRowIdFromRow GetSelectedRow Retorno String Descrição Retorna os dados no padrão String na linha e coluna especificada do controle DataWindow. Retorna os dados no padrão Time na Time linha e coluna especificada do controle DataWindow. Retorna o texto de mensagem gerado por String uma DataWindow CrossTab. GetMessageText é uma função obsoleta e será descontinuada em uma liberação futura. MessageText está agora disponível como um argumento em um evento DataWindow que pode ser definido associado com o pbm_dwnmessagetext. Retorna o número da primeira linha que Long foi modificada no buffer da DataWindow. Retorna uma string que contém o nome String da coluna ou controle de gráfico apontado no controle DataWindow, separado por (~t), e o número da linha. PowerObject Retorna uma referência para o nome do objeto pai. Retorna um Inteiro que contém o número Long da linha atual no controle DataWindow. Obtém o número da linha de uma linha Long afim em um controle DataWindow, identificada por uma linha diferente, associada com aquela linha. Obtém um identificador único da linha em Long um controle de DataWindow do número da linha associado com aquela linha. Retorna o número da primeira linha Integer selecionada depois do número da linha especificada no controle DataWindow. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 96 Funções para o controle DataWindow. Função DataWindow GetSeriesStyle Retorno Integer GetSQLPreview String GetSQLSelect String GetStateStatus Long GetText String GetTrans Integer GetUpdateStatus Integer GetValidate String GetValue String GroupCalc Integer Hide Integer Descrição Procura externamente o aparecimento de umas séries em um gráfico. Há várias sintaxes, enquanto dependendo de que colocações você queira. Retorna a declaração de SQL atual que o controle de DataWindow está submetendo ao banco de dados. GetSQLPreview é uma função obsoleta e será descontinuada em uma liberação futura. Sintaxe de SQL está agora disponível como um argumento de evento. Retorna a declaração SELECT atual para o controle DataWindow. Retorna o estado atual das flags de status internas do objeto DataWindow e as guarda em uma variável Blob. Esta função é principalmente usada em aplicações distribuídas. Retorna o texto no controle de edição na linha e coluna atual do controle DataWindow. Retorna os valores da transação do objeto DataWindow. Guarda o número da linha que será atualizada no dwBuffer e o datatype que a identifica. GetUpdateStatus é uma função obsoleta e será descontinuada em uma liberação futura. GetUpdateStatus está agora disponível como um argumento no controle DataWindow DBError e eventos de SQLPreview. Retorna que a regra de validação usada na coluna especificada do controle DataWindow. Retorna um item especificado na lista de valores para a coluna especificada. Recalcula as quebras nos grupos no controle DataWindow. Faz o controle invisível. PowerBuilder 9.0 Básico Capítulo 9 97 Funções para o controle DataWindow. Função DataWindow ImportClipboard Retorno Long ImportFile Long ImportString Long InsertDocument Integer InsertRow Long IsSelected Boolean LineCount Integer ModifiedCount Long Modify String Move Integer Descrição Copia dados do clipboard para o controle DataWindow. Copia dados de um arquivo para o controle DataWindow. Copia dados de uma string para o controle de DataWindow. Inserir um formato de richtext ou arquivo de texto em um controle DataWindow. Você usa um parâmetro de função para especificar como o conteúdo novo é adicionado, pode ser inserido a um ponto de inserção, ou pode substituir todo um conteúdo existente. Esta função aplica-se a controles DataWindow cujo conteúdo tem um estilo RichText. Insere uma nova linha antes da linha especificada no controle DataWindow. Retorna TRUE se a linha especificada na DataWindow foi selecionada; Retorna FALSE se a linha não esta selecionada ou é maior que o número de linhas no controle DataWindow. Determina o número de linhas dentro um controle de edição que permite linhas múltiplas. Retorna o número de linhas que foram modificadas no controle DataWindow mas não foram contudo atualizadas no banco de dados. Usada especificamente para modificar um controle DataWindow com seu conteúdo string. Move o controle DataWindow para uma localização especificada. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 98 Funções para o controle DataWindow. Função DataWindow ObjectAtPointer Retorno Descrição grObjectType Retorna o ObjectType e o nome da séria OLEActivate Integer Paste Integer PasteRTF Long PointerX Integer PointerY Integer Position Integer PostEvent Boolean Print Integer PrintCancel Integer ReplaceText Integer de qualquer ponto clicado do gráfico . Ativa o OLE para o objeto OLE da linha e coluna especificada no controle DataWindow Insere o conteúdo do clipboard em cima da linha e coluna atual controle DataWindow. Cola dados de um controle RichText de uma linha em um controle DataWindow com estilo RichText. Retorna a distância que o objeto esta da extremidade à esquerda do controle DataWindow. Retorna a distância que o objeto esta do topo do controle DataWindow. Sintaxe 1: Retorna a posição do ponto de inserção no controle de edição em cima da linha e coluna do controle DataWindow. Sintaxe 2: Retorna a linha e coluna do ponto de inserção ou o começo e fim de texto selecionado em um controle DataWindow cujo conteúdo tem o estilo RichText. Acrescenta um evento ao fim da fila de mensagem para o controle DataWindow. Envia o conteúdo do controle DataWindow à impressora atual. Esta função tem várias sintaxes. Cancela o trabalho de impressão e apaga o arquivo de spool (se existir) quando o conteúdo do controle DataWindow é enviado pela função de print. Substitui o texto selecionado dentro do controle edição pela string especificada. PowerBuilder 9.0 Básico Capítulo 9 99 Funções para o controle DataWindow. Função DataWindow ReselectRow Retorno Integer Reset Integer ResetDataColors Integer ResetTransObject Integer ResetUpdate Integer Resize Integer Retrieve Long RowCount Long RowsCopy Integer RowsDiscard Integer RowsMove Integer Descrição Acessa o banco de dados para recuperar todas as colunas que podem ser atualizadas a recuperação pode ser pontual. apaga todos os dados de um controle DataWindow. Apaga os dados, as categorias, ou as séries de um gráfico dentro de um objeto DataWindow com uma fonte de dados externa. Reajusta a cor de um ponto de dados à cor especificada para as séries. Faz com que controle DataWindow pare de usar um objeto de Transação. Reajusta e atualiza as flags do controle DataWindow. Muda a largura e altura do controle DataWindow. Recupera as linhas do banco de dados para o controle DataWindow. retorna o número de linhas atualmente disponível no controle de DataWindow (todas as linhas recuperadas menos as excluídas e as filtradas) e acrescenta as que foram incluídas. Cópias uma gama de linhas de um controle DataWindow para outro ou de um buffer para outro dentro de um único controle de DataWindow. Descartes uma gama de linhas. As linhas não podem ser restabelecidas sem serem recuperadas do banco de dados. Apaga uma gama de linhas de um controle DataWindow e insere as linhas em um outro controle DataWindow ou outro buffer do mesmo controle DataWindow. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 100 Funções para o controle DataWindow. Função DataWindow SaveAs Retorno Integer SaveAs Integer SaveAsAscii Long Scroll Integer ScrollNextPage Long ScrollNextRow Long ScrollPriorPage Long ScrollPriorRow Long ScrollToRow Integer SelectedLength Integer SelectedLine Integer Descrição Envia os dados representados no gráfico especificado no controle DataWindow para o arquivo especificado, no formato especificado. Envia o conteúdo do controle DataWindow ao arquivo especificado, no formato especificado, com ou sem títulos de coluna. Envia o conteúdo de um DataWindow em um arquivo texto padrão ASCII. Avança o um controle DataWindow à direção especificada o número especificado de linhas. Avança para a próxima página do controle DataWindow. Avança para aproxima linha do controle DataWindow. ScrollNextRow muda a linha atual mas não muda a coluna atual. Retorna para a primeira pagina do controle DataWindow. Retorna para a primeira linha, muda a linha atual mas não muda a coluna atual. Avança ou retrocede para a linha especificada, muda a linha atual mas não muda a coluna atual. Retorna o número total de caráter e espaços (comprimento) no texto selecionado no controle de edição em cima da linha atual e coluna. Retorna o número da linha no controle de edição em cima da linha atual e coluna. PowerBuilder 9.0 Básico Capítulo 9 101 Funções para o controle DataWindow. Função DataWindow SelectedStart Retorno Integer SelectedText String SelectText Integer SelectTextAll Integer SelectTextLine Integer SelectTextWord Integer SeriesCount Integer SeriesName String SetActionCode Integer SetBorderStyle Integer SetChanges Long SetColumn Integer Descrição Retorna a posição começando no controle editado em cima da linha atual e coluna. Retorna qualquer texto se selecionado para a linha atual e coluna do controle DataWindow. Seleciona texto dentro de um controle DataWindow. Você especifica onde a seleção começa e quanto caractere irá selecionar. Seleciona todo o conteúdo de um controle DataWindow com o estilo RichText . Seleciona a linha que contém o ponto de inserção em um controle DataWindow com o estilo. Seleciona a palavra que contém o ponto de inserção em um controle DataWindow com o estilo RichText. Retorna o número de séries no gráfico especificado no controle DataWindow Retorna o nome das séries especificadas no gráfico especificado no controle de DataWindow. Define a ação um controle DataWindow disparando um evento. SetActionCode é uma função obsoleta e será descontinuado em uma liberação futura. Atribui o estilo de borda da coluna especificada no controle DataWindow. Aplica mudanças capturadas com GetChanges a um DataWindow. Esta função é principalmente usada em aplicações distribuídas. Salta para a coluna especificada da coluna atual no controle de DataWindow. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 102 Funções para o controle DataWindow. Função DataWindow SetDataPieExplode Retorno Integer SetDataStyle Integer SetDetailHeight Integer SetFilter Integer SetFocus Integer SetFormat Integer SetFullState Long SetHTMLAction Integer SetItem Integer SetItemStatus Integer Descrição Explode uma fatia do gráfico PIE em um gráfico de PIE Para o dado especifico apontado na série especifica no gráfico especifico no controle DataWindow: Sintaxe 1: Mudar a cor do ponto de dados. Sintaxe 2: Mudar o estilo de linha e largura para os dados. Mudar a altura de cada linha em uma faixa especificada Define os critérios de filtro para o controle de DataWindow. Move o foco para o controle DataWindow. Move o formato de exibição para a coluna especificada do controle DataWindow. Aplica o conteúdo de uma variável Blob de DataWindow recebido por GetFullState a um DataWindow. Esta função é principalmente usada em aplicações distribuídas. Aceita ação e informação de contexto sobre interação de usuário com o controle Web DataWindow em um browser de forma que HTML recentemente gerado possa refletir qualquer mudança. Move o valor da linha especificada e coluna do controle DataWindow. Atribui o status de uma linha e uma coluna especificada do controle DataWindow no buffer. PowerBuilder 9.0 Básico Capítulo 9 103 Funções para o controle DataWindow. Função DataWindow SetPosition Retorno Integer Descrição SetRedraw Integer SetRow Integer SetRowFocusIndicator Integer Especifica o foco na linha atual para o controle DataWindow. SetSeriesStyle Integer SetSort Integer SetSQLPreview Integer SetSQLSelect Integer Especifica para a série do gráfico do controle DataWindow: Sintaxe 1: seta a cor das séries. Sintaxe 2: seta o estilo de linha e largura. Sintaxe 3: seta o padrão de preenchimento ou símbolo para marcadores de dados nas séries. Define os critérios de sort para o controle de DataWindow. A escolha atual é executada pela função de sort. Especifica a declaração de SQL atual para o controle DataWindow. Muda declaração SELECT atual para o controle DataWindow. SetTabOrder Integer SetText Integer SetTrans Integer Sintaxe 1: Especifica se o controle DataWindow sempre exibe On TOP na ordem de frente-para-parte de trás dentro da window. Syntaxe 2: Movimenta um objeto dentro da DataWindow para outra faixa ou muda a ordem de frente-para-parte de trás de objetos dentro de uma faixa. Controla automaticamente novo desenho do controle DataWindow depois de cada mudança em suas propriedades ou conteúdos. Especifica que a linha especificada é a linha atual do controle DataWindow. Muda o valor do TabOrder da coluna especificada no controle de DataWindow Substitui o texto para a linha atual e coluna do controle DataWindow com o texto especificado. Especifica os valores no objeto de Transação interno do controle DataWindow. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 104 Funções para o controle DataWindow. Função DataWindow SetTransObject Retorno Integer SetValidate Integer SetValue Integer ShareData Integer ShareDataOff Integer Show ShowHeadFoot Integer Integer Sort Integer TextLine String TriggerEvent Integer TypeOf Undo Object Integer Update Integer Descrição Especifica o objeto de Transação para a DataWindow e provê controle em cima da transação, inclusive a habilita o commit. Muda a regra de validação para a coluna especificada do controle DataWindow. Especifica o valor do item em uma lista valida ou na tabela de código da coluna especificada do controle DataWindow. Compartilham dados entre o buffer Primário do controle DataWindow e um buffer secundário do controle DataWindow. Cancela o compartilhamento do buffer primário para o controle de DataWindow. Todos os controles DataWindow secundários serão desconectados e perderão seus dados. Faz o controle DataWindow visível. Em uma DataWindow estilo RichText, exibe os painéis para editar o cabeçalho e rodapé ou esconde os painéis e retorna a edição do texto principal. Classifica as linhas do controle DataWindow baseado em seus critérios de classificação (sort) atuais. Exibe Informações sobre o controle editado em cima da linha e coluna corrente. Chama um evento especificado no controle de DataWindow e executa o script para o evento. Retorna o tipo do controle. Cancela as últimas modificações em um o controle de edição para a linha e coluna corrente. Envia ao banco de dados todos os Inserts, Deletes, e Updates do controle DataWindow. PowerBuilder 9.0 Básico Capítulo 9 105 Montando um Objeto DataWindow Nesta etapa, iremos nos aprofundar dos conceitos da DataWindow, iremos: !" !" !" !" Criar e visualizar um objeto DataWindow; Aperfeiçoar a visualização da DataWindow; Vincular duas DataWindow; Incluir os dois objetos DataWindow a um controle DataWindow O Primeiro passo é criar a DataWindow, como já foi visto anteriormente, a receita é única, mas vamos repeti-la para uma melhor fixação. NEW, no template selecione DataWindow e selecione o Clique em estilo Tabular. Clique em OK. No template Wizard que irá se abrir, selecione Quick Select para o Data Source e certifique-se que a caixa de verificação Retrieve on Preview esteja marcada. Clique em Next. Neste momento o PB 9.0, deverá conectar com o banco de dados EAS Demo DB, caso isto não aconteça, siga os passos de como conectar a uma base de dados. No template Quick Select selecione a tabela “customer” com um clique, a lista de colunas disponíveis da tabela será disponibilizada para seleção. Selecione as colunas: id, fname, lname. Mantenha a ordem de seleção para que nosso exemplo possa ficar coerente com o que você esta desenvolvendo. Clique na verticalscrollbar, da lista de colunas para selecionar a coluna company_name. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 106 Montando um Objeto DataWindow Na figura abaixo mostramos o template Quick Select. Quando se seleciona as colunas, automaticamente elas são inseridas no template de colunas, disponibilizados abaixo do template de seleção, o template de colunas disponibiliza as linhas de : Column, Sort, Criteria e Or. Onde : Column Sort Criteria OR : Indica o nome da coluna selecionada; : Define como os dados recuperados serão apresentados, Ascendentes ou Descendente; : Realiza um filtro no momento da seleção dos dados, aceita todos os modelos do padrão SQL; : Operador para combinações lógicas. PowerBuilder 9.0 Básico Montando um Objeto DataWindow Os operadores lógicos aceitáveis : Operadores = > < <> >= <= LIKE NOT LIKE IN NOT IN Descrição Igual a Maior que Menor que Diferente de Maior ou Igual a Menor ou Igual a Contém Não Contém São iguais a São diferentes de Exemplos : Adquirido por : Fabrício Moreira da Silva Capítulo 9 107 PowerBuilder 9.0 Básico Capítulo 9 108 Montando um Objeto DataWindow Rolando a VerticalScrollbar à esquerda, permitindo múltiplos critérios de filtragem. o template interno rolará, Para continuar a construção do objeto DataWindow, clique em OK, Next e Finish. O objeto DataWindow será gerado, no template de DataWindow. Do mesmo modo, teremos a visão da seleção definida, no template Preview da DataWindow. Agora salve a posteriormente. DataWindow gerada para que tenhamos acesso à PowerBuilder 9.0 Básico Capítulo 9 Montando um Objeto DataWindow Clique em Save, e salve com o nome de d_lista01, em nossa aplicação exemplo_1. Adquirido por : Fabrício Moreira da Silva 109 PowerBuilder 9.0 Básico Capítulo 9 110 Aperfeiçoando a visualização da DataWindow No PowerBuilder 9.0 podemos modelar a DataWindow para uma visualização mais apropriada ao negocio desenvolvido. Sempre que se cria um objeto DataWindow ele seguirá uma apresentação padrão, mas nem sempre a apresentação padrão é a melhor forma de visualizarmos os dados, utilizando os recursos de edição do painter de DataWindow, com facilidade poderemos maquiar o objeto DataWindow. Abra o objeto DataWindow: d_lista01 Note que, o cabeçalho não esta alinhado com a linha de detalhe(Customer ID) com ( ID ), vamos alinhar. Clique em cima de “Customer ID", mantendo pressionada a tecla Ctrl, clique em id, note que as duas células estarão marcadas com selecionadas. Agora na Painterbar2, Alinhamentos, o ícone as colunas se alinharão. selecione no ícone Alinhar pela direita, Clique em qualquer parte branca do objeto DataWindow para remover a seleção. PowerBuilder 9.0 Básico Capítulo 9 111 Aperfeiçoando a visualização da DataWindow Clique em “Company Name” e mantendo o Ctrl pressionado, clique em Last Name, arraste para direita ou utilize as setas do teclado para movimentar as colunas para a direita afastando-as da coluna First Name. Então teremos: Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 112 Aperfeiçoando a visualização da DataWindow Ajuste as colunas se baseando no Preview DataWindow, até conseguir uma formatação mas bem definida entre as colunas. Utilize os botões de ajustes para auxiliar na formatação, são eles: Conteúdo da coluna Justifica o texto. Alinha a direita Centraliza Alinha a esquerda OBJETOS Alinha objetos à esquerda Alinha direita Centraliza os objetos selecionados horizontalmente Alinha os objetos selecionados pelo topo Padroniza os espaços horizontalmente entre os objetos selecionados Padroniza os objetos selecionados quanto a sua largura Padroniza os objetos selecionados quanto a sua largura e altura objetos à Centraliza os objetos selecionados verticalmente Alinha os objetos selecionados pela base Padroniza os espaços verticalmente entre os objetos selecionados Padroniza os objetos selecionados quanto a sua altura PowerBuilder 9.0 Básico Capítulo 9 113 Aperfeiçoando a visualização da DataWindow Com o botão Selection, podemos selecionar objetos para incluir no LINE para incluir uma objeto DataWindow, selecione cabeçalho(Header), clique no ponto onde você quer incluir a linha. linha no Para modificar seu tamanho, clique no objeto linha inserido e com a tecla Shift pressionada, clique nas setas do teclado para realizar a operação. Você também poderá clicar no objeto linha e passar o mouse sobre o objeto, quando o ícone do mouse mudar para uma cruz, clique no botão direito do mouse continue pressionando e arraste até o tamanho desejado. No final seu objeto DataWindow deverá ficar com a aparência da figura abaixo. Clique em configurações. Save para salvar o objeto DataWindow com as novas Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 114 Vinculando duas DataWindow Na montagem do primeiro objeto DataWindow, selecionamos algumas colunas para visualização. Nessa etapa, vincularemos outro objeto DataWindow e trabalharemos com seleção de dados, para tal, teremos que utilizar o Retrieval Argument e a clausula WHERE como critério de seleção para o segundo objeto DataWindow, que será passado em tempo de execução. Para isso teremos que seguir os seguintes passos: 1. 2. 3. 4. 5. 6. Selecionar o Data Source e o estilo de apresentação; Selecionar a tabela e as colunas; Definir o Retrieval Argument; Especificar a clausula WHERE; Conferir no template Preview se esta tudo certo; Salvar o objeto DataWindow NEW selecione DataWindow, selecione o estilo Freeform. Clique em Clique em OK. No template Wizard que irá se abrir, selecione SQL Select para o Data Source e certifique-se que a caixa de verificação Retrieve on Preview esteja marcada. Clique em Next. A caixa de dialogo Select Table aparecerá, selecione a tabela customer. Clique em Open. Você também pode selecionar a tabela com um duplo clique. PowerBuilder 9.0 Básico Capítulo 9 115 Vinculando duas DataWindow Coloque o ponteiro do mouse sobre a parte mais escura da tabela customer (esta área é denominada Header). Clique com o botão direito do mouse e no menu-popup que aparecerá selecione Select All. Neste momento estamos com todas as colunas selecionadas no template Table Layout e automaticamente o PowerBuilder 9.0 escreveu o Select para as colunas que foram selecionas na tabela. Agora temos que definir o Retrieval Argument. Para isto clique na PainterBar1 em Design selecione Retrieval Argument. A caixa de dialogo para definição do tipo de argumento que será repassado para o objeto DataWindow aparecerá, para definirmos o tipo de argumento, teremos que informar um nome, que será utilizado nas definições no objeto DataWindow, associado a esse nome, o tipo de variável, se String, Numérica, Date, Time, Integer etc. Disponíveis na caixa de seleção. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 116 Vinculando duas DataWindow O tipo de dado sempre estará relacionado com a coluna a qual você quer selecionar, se o tipo de dado da coluna for uma variável string, o tipo de dado do Retrieval Argument deverá ser uma variável do tipo string. Defina como a figura abaixo. Clique em OK, para continuar. Name Type : pass_id : Number Clique no quadro abaixo na aba WHERE. O Template WHERE se abrirá, nele você ira visualizar os quadros; Column, Operator, Value e Logical. Clique sobre o quadro Column e todas as colunas da tabela selecionada, estarão disponíveis para a seleção, selecione "customer"."id". PowerBuilder 9.0 Básico Capítulo 9 117 Vinculando duas DataWindow No quadro Operator, selecione = (igual). No Quadro Value, clique com o botão direito do mouse e no menu-popup selecione Argument e na caixa de dialogo, selecione a variável que acabamos de criar, pass_id. Neste caso só teremos uma linha na clausula Where, portanto o quadro Logical, ficará em branco. Para uma maior noção das ações realizadas, clique na aba Syntax, e visualize a query montada. Clique em Return na caixa de dialogo que surgirá. Clique em Next e depois em Finish para visualizar o objeto DataWindow gerado. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 118 Vinculando duas DataWindow Aparecerá a caixa de dialogo para se especificar o Retrieval Argument, isto se dá pelo fato da opção Retrieve On Preview estar ligada, então digite 101 e poderá ver a recuperação dos dados relativos a customer"."id" = 101, definidos na clausula WHERE. Visão do objeto DataWindow. PowerBuilder 9.0 Básico Capítulo 9 119 Vinculando duas DataWindow Visão dos dados selecionados, DataWindow Preview. Para selecionar outros dados no painter de construção do objeto DataWindow, Retrive, e informe um outro valor na caixa de dialogo do clique em Retrieval Argument. Clique em exemplo1. Save e salve com o nome de d_lista02, na aplicação Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 120 Vinculando duas DataWindow Com a criação do segundo objeto DataWindow para a tabela customers, temos que pensar que esses dois objetos serão incluídos em uma janela (WINDOW) e que eles devem ter um tamanho que possibilite arrumar os dois objetos nesta janela sem que a janela fique muito poluída e de difícil navegação. O que podemos fazer para esta melhora? 1. Rearrumar as colunas e labels; 2. Alinhar as colunas e labels; 3. Facilitar a visualização de algumas colunas com o estilo de objeto drop-down DataWindow. Com um duplo clique sobre o label d_lista02 no template TreeView, edite o objeto DataWindow d_lista02. A visão inicial do objeto que criamos é : PowerBuilder 9.0 Básico Capítulo 9 121 Vinculando duas DataWindow Com base na edição e seguindo o caminho da alteração do objeto DataWindow d_lista01, altere o objeto d_lista02 para que ele tenha a aparência abaixo. OBS: Os campos da DataWindow que aparecem em negrito chamamos de Label. Label é uma descrição que identifica a coluna. A novidade em relação a d_lista01 é a coluna State, que apresenta uma visualização com estilo drop-down DataWindow. Para fazer esta coluna receber este estilo, siga os passos à seguir: 1. Dê um clique sobre a coluna; 2. Com o mouse sobre a coluna, clique o botão direito do mouse e selecione properties (propriedades); 3. Na tabela selecione a aba, Edit; 4. No item Style Type, selecione DropDownDW; 5. Marque a caixa Always Show Arrow; 6. Marque a caixa VscrollBar. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 122 Vinculando duas DataWindow Veja o exemplo: Quando terminar de arrumar o objeto DataWindow d_lista02, clique em Save para salvar as alterações. Dicas: Para trabalhar com as colunas e label´s, utilize os botões de ajustes que descrevemos. Clicando em uma parte branca do objeto DataWindow com o botão esquerdo do mouse e mantendo-o pressionado, arraste o mouse sobre várias células, (colunas e label´s) uma caixa de seleção surgirá, selecionando todas as células a qual a caixa de seleção estiver envolvendo. Veja figura. Neste caso serão selecionados todos os campos a qual a caixa de seleção esta envolvendo. PowerBuilder 9.0 Básico Vinculando objeto DataWindow Capítulo 9 DataWindow a um 123 controle Após criar e salvar os objetos DataWindow esses objetos já estão aptos a serem vinculados a um controle DataWindow esse controle DataWindow estará associado a um objeto Window (janela) e esse objeto Window (janela) a sua aplicação. Assim teremos uma janela com uma funcionalidade de recuperação de dados de uma base de dados. Para isso seguiremos os seguintes passos: 1. 2. 3. 4. Incluir o controle DataWindow a Window (janela); Incluir os objetos DataWindow ao controle DataWindow; Vincular a janela a aplicação; Executar e depurar a aplicação. Incluindo controle DataWindow a Window (janela) Edite a janela w_001 com um duplo clique em w_001 no template TREEVIEW à esquerda. Com a janela editada selecione a aba Layout na parte inferior. Agora você tem a sua janela pronta para receber o controle DataWindow e assim ser associado a esse controle, o objeto DataWindow. Clique em Visualizar e selecione DataWindow e inclua na parte superior da janela conforme o exemplo abaixo. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 124 Incluindo controle DataWindow a Window (janela) No template propriedades à direita no item DataObject. Clique no botão de seleção mais à direita e selecione o objeto DataWindow, d_lista01. Note que não foi possível visualizar todo o objeto d_lista01 agora iremos redimensionar o controle para se poder visualizar todo o objeto. Clique com o botão esquerdo do mouse no controle DataWindow na janela, coloque o mouse sobre a borda do controle à direita, quando o ponteiro do mouse se modificar para uma seta de duas pontas clique com o botão direito do mouse mantendo-o pressionado e arraste para a direita, assim o seu controle poderá ser redimensionado, conforme a figura abaixo. Com estes procedimentos, já podemos visualizar os labels do objeto DataWindow, d_lista01. Note que o PowerBuilder 9.0 automaticamente atribuiu a esse controle DataWindow o nome de dw_1, veja o atributo Name na figura. Você pode deixar sempre o PowerBuilder 9.0, atribuir nomes à seus controles, como também pode dar a eles o nome que desejar, mas sempre que possível, siga as regras já vistas para identificação de controles e objetos. Agora repetiremos toda a operação anterior, para incluirmos o objeto DataWindow d_list02, em um novo controle DataWindow abaixo do controle dw_1. PowerBuilder 9.0 Básico Capítulo 9 125 Incluindo controle DataWindow a Window (janela) Veja como ficou: Você pode executar a sua aplicação e visualizar como o controle DataWindow será apresentado na janela. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 126 Incluindo controle DataWindow a Window (janela) Mas notará que nenhum dado foi recuperado da base de dados porque ainda não vinculamos o controle a esta base de dados. Para vincular o controle DataWindow a base de dados primeiro temos que ativar o banco de dados ou seja, colocá-lo ativo, para depois poder extrair dados desse banco, através da tabela customers. Usaremos a transação padrão, a SQLCA, como já vimos em capítulos anteriores. Os parâmetros necessários para serem informados são: sqlca.dbms : Recebe o tipo de conexão nesse caso ODBC. sqlca.dbparm : Recebe os parâmetros de conexão como Nome do profile definido, o nome do usuário do banco e a senha de acesso para o usuário que esta pedindo a conexão. // Aplica os parâmetros do DBMS de teste, a transação SQLCA sqlca.dbms sqlca.dbparm ="ODBC" ="ConnectString='DSN=EAS Demo DB V9;UID=dba;PWD=sql'" Após a definição dos parâmetros, conectamos ao banco. // Conecta com o banco Connect; O banco será ativado e estará disponível para acesso, para testarmos usamos: //Testando a conexão If sqlca.sqlcode < 0 Then MessageBox ("Erro: dados", & Impossivel conectar com o banco de sqlca.sqlerrtext, Exclamation!) HALT End If PowerBuilder 9.0 Básico Capítulo 9 127 Incluindo controle DataWindow a Window (janela) //Se tudo estiver OK //associamos o controle DataWindow a transação SQLCA //e recuperamos os dados dw_1.settransobject(SQLCA) dw_1.Retrieve() Nesse ponto, associamos o primeiro controle DataWindow a transação do banco agora associamos o segundo controle a mesma transação. dw_2.settransobject(SQLCA) Note que não faremos a recuperação dos dados neste momento porque os dados para este controle deverão ser recuperados a partir da seleção no controle DataWindow dw_1. Para que o controle DataWindow dw_1 execute a seleção para o controle DataWindow dw_2 dê um duplo clique no controle dw_1, procure na dropdown de eventos, o evento “clicked” e escreva em PowerScript o código a seguir. //Cria a variável numérica que recebera o código para a //recuperação em dw_2 integer wk_id //Recupera a seleção wk_id = dw_1.GetItemNumber(row, "id") //Recupera os dados segundo a seleção em dw_1 dw_2.Retrieve(wk_id) Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 128 Incluindo controle DataWindow a Window (janela) Clique em executar. Save e salve a sua aplicação e em Run para Teremos então: Essa janela só tem a funcionalidade de consulta a partir de um pequeno dado se pode acessar uma gama maior de informações pertinentes ao dado selecionado. PowerBuilder 9.0 Básico Capítulo 9 129 Incluindo controle DataWindow a Window (janela) O próximo passo será o desenvolvimento de rotinas de inclusão, atualização e alteração. Com esses procedimentos teremos uma visão bem ampla de como se pode manipular dados através de controles DataWindow e de como é simples e seguro faze-lo. A manipulação de dados com controles DataWindow, embora seja uma tarefa simples pode se tornar complexa assim como, tão complexa for a sua aplicação e o foco do seu negocio. Você verá que esta tarefa por mais complexa que ela seja se tornará menos árdua utilizando os objetos e controles DataWindow. O desenvolvimento utilizando objetos DataWindow não se limita às caixas de diálogos e wizards disponibilizados pelo PowerBuilder 9.0. Através de um editor SQL, como SQLplus® da Oracle por exemplo, você poderá desenvolver querys complexas e importar para o painter de SQL do PowerBuilder 9.0, além disso, você também poderá trabalhar com CURSOR e PROCEDURE para recuperar dados em um objeto DataWindow. Uma outra forma de se trabalhar com um objeto DataWindow é a utilização de DataStore, o DataStore é um controle DataWindow não visual, ou seja, é um controle DataWindow invisível, Quase todas as funcionalidades de um controle DataWindow estão disponibilizados, menos as funcionalidades visuais que não caberiam ao DataStore, tendo em vista que ele não permite visualizar dados e só e somente só, recuperar e manipular dados. Se você entendeu o que é um controle DataWindow, tenha certeza que também entendeu o que é um DataStore. No decorrer desse capítulo iremos exemplificar as diversas técnicas de se trabalhar com o objeto DataWindow. Para que o exemplo comece a ficar mais completo iremos incluir a rotina de inclusão de dados. Utilizaremos alguns conceitos interessantes que já foram explicados, mas não exemplificados, como criar um evento de usuário, chamar estes eventos e incluir objetos na janela. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 130 Incluindo parâmetros de atualização Em nosso exemplo, incluiremos agora três rotinas: de inclusão, de exclusão e de atualização dos dados no banco, para isto, incluiremos três controles de botão de comando, e em cada controle adicionaremos sua programação PowerScript correspondente. Clique em CommandButton e clique do lado direito do controle DataWindow dw_1, assim será incluído o controle CommandButton na janela w_001. Como iremos incluir três controles, clique com o botão direito mouse sobre o controle CommandButton que acabou de incluir na janela e no menu-popup que aparecerá, selecione a opção Duplicate. Assim o controle será automaticamente inserido na janela. PowerBuilder 9.0 Básico Capítulo 9 131 Incluindo parâmetros de atualização Repita a operação e teremos os três controles na janela w_001. Agora incluiremos a programação correspondentes à cada controle, para que esse exerça a função a qual se vez necessária a sua inclusão na janela. Rotina de inclusão Clique no primeiro controle de botão de controle e selecione suas propriedades, no template que surgira à direita preencha os atributos para esse controle, conforme a figura abaixo. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 132 Rotina de inclusão A rotina de inclusão em um controle DataWindow deve habilitar o objeto DataWindow a receber uma nova linha no Buffer da DataWindow, e posteriormente atualiza-la na base de dados. Para incluir uma linha no buffer utilizamos a função InsertRow (linha). Essa função insere uma linha no Buffer da DataWindow ou de um DataStore. Sintaxe: long dwcontrole.InsertRow ( long linha ) Onde : dwcontrole : é o nome do controle DataWindow/DataStore. linha : é o número da linha que você quer incluir long : retorna a linha que será incluída ou -1 se houver erro na tentativa de inclusão da linha no controle DataWindow. Dê um duplo clique no controle cb_incluir e selecione o evento “Clicked” e escreva o código PowerScript abaixo: Praticando: No template em branco, clique com o botão do mouse direito selecionando Paste Special, e depois Object, na lista que surgirá selecione dw_2. Agora coloque um ponto (.) após dw_2, clique com o botão direito do mouse e selecione Function e Built-in. Na lista que surgirá procure por InsertRow. Com um duplo clique selecione a função. Agora coloque o zero(0) entre os parênteses. Pronto o PowerBuilder 9.0 montou para você a função InsertRow, o parâmetro zero(0) irá inserir uma linha no final do Buffer do controle DataWindow fazendo desta linha, a linha corrente. PowerBuilder 9.0 Básico Capítulo 9 133 Rotina de inclusão Você poderia ter digitado direto, mas o PowerBuilder 9.0 disponibiliza o autoscript para facilitar a edição e evitar erros de sintaxe provenientes de esquecimentos de detalhes da função. Como estamos usando a dw_2 que antes era só um controle de consulta dos dados selecionados na dw_1. Para podermos incluir e visualizarmos direto uma linha nova neste controle, primeiro apagamos o conteúdo desse controle. Caso você não o faça, a função InsertRow (0), irá incluir uma linha após a linha que estiver ativa, caso exista uma em dw_2, se não existir nenhuma linha ativa irá mostrar diretamente, então caso exista uma linha ativa, você deverá incluir uma barra de rolagem vertical para acessar esta nova linha, o que ficaria deselegante e com uma tarefa a mais para o usuário. Então sempre é aconselhável limpar o controle DataWindow, antes de uma inclusão, para este tipo de visualização que estamos utilizando existem outros modos de se exibir os dados que não se aplicaria esta regra. Para limpar o controle DataWindow utilizaremos a função Reset (). Sintaxe: integer dwcontrole.Reset ( ) Onde: dwcontrole : é o nome do controle DataWindow ou DataStore. Integer : Retorna 1, se a execução foi bem sucedida e -1 se houver erro. Então agora digite antes do comando dw_2.InsertRow (0), dw_2.Reset (). Clique em executar. Save e salve a sua aplicação em Adquirido por : Fabrício Moreira da Silva Run para PowerBuilder 9.0 Básico Rotina de inclusão Clique no botão Incluir e teste. Capítulo 9 134 PowerBuilder 9.0 Básico Capítulo 9 135 Rotina de inclusão Navegue pela dw_2 com a ajuda da tecla Tab note que agora podemos incluir uma nova linha na dw_2, mas ainda não podemos incluir esta linha nova na base de dados. Então teremos que montar uma rotina para executar esta função. Clique na aba Layout selecione com um duplo clique o último controle CommandButton. No template propriedade à direita, preencha: Após preencher as propriedate para o botão Gravar agora teremos que colocar o código PowerScript para ser executado quando o botão for pressionado e esta ação deve ser de gravação na base de dados. Para tal, utilizaremos a função UpDate(). Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 136 Rotina de inclusão Sintaxe: integer dwcontrole.Update ({ boolean accept {,boolean resetflag} }) Onde: dwcontrole : é o nome do controle DataWindow ou DataStore. Integer : Retorna 1, se a execução foi bem sucedida e -1 se houver erro. Accept : variável booleana que informa ao PowerBuilder 9.0 se ele deve proceder aos testes de validação antes de gravar na base. !" TRUE: (Default) procede ao teste e retorna se houver erro. !" FALSE: grava na base. Resetflag : variável booleana que informa ao PowerBuilder se ele deve resetar as flags de controle após o update ou não. !" TRUE: (Default) Reseta as flags. !" FALSE: Não reseta as flags. Dê um duplo clique no controle cb_gravar, selecione o evento Clicked, e escreva o código PowerScript abaixo: Clique em executar. Save e salve a sua aplicação e em Run para PowerBuilder 9.0 Básico Capítulo 9 137 Rotina de alteração A rotina de alteração já esta pronta é a combinação da rotina de consulta com a rotina de gravação. Então você pode clicar na dw_1, editar o item selecionado, alterar este item e clicar em Gravar. A novidade é o terceiro botão, o de Retrieve. Que servirá para recuperar os dados alterados na dw_2. Essa rotina poderia ser automatizada, veremos os dois modos. Primeiro, com o botão Ler Dados (retrieve). Clique no CommandButton que esta no meio e preencha suas propriedades. Clique na aba “Clicked” e digite os comandos para recuperação dos dados. Usaremos o Retrieve() igual para a recuperação no evento Open da aplicação. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 138 Rotina de alteração Clique em executar. Save e salve a sua aplicação e em Run para Poderíamos também automatizar a recuperação dos dados sem precisar incluir um botão para isto. Umas das soluções seria incluir a rotina do botão Ler Dados na linha de IF após o comando Commit. Outra solução seria atualizar a dw_1 sem precisar usar o comando Retrieve (), assim não estaríamos contribuindo para o trafego na rede e a aplicação ficaria muito mais rápida. Vamos demonstrar as duas embora, a segunda seja uma solução mais profissional. A primeira não esta errada depende do enfoque do seu negócio. Por exemplo: imagine uma grande rede com grande volume de dados, e o usuário precise acessar vários dados. E esses dados estão sempre sofrendo alteração. Então se faz necessário o uso do Retrieve, para cada atualização ou grupos de atualização. PowerBuilder 9.0 Básico Capítulo 9 139 Rotina de alteração Primeira solução: Para o segundo método usaremos a aplicação da rotina de alteração do controle DataWindow dw_1. Através do uso do evento já disponibilizado pelo PowerBuilder 9.0 para controles DataWindow, UpdateEnd. Esse evento sempre é disparado ao final de uma atualização através do controle DataWindow, seja um Insert, Delete ou Update. Com um duplo clique no controle DataWindow dw_2 o template de script se abrirá. Na caixa de seleção de script ao centro da parte superior, selecione o evento UpdateEnd. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 140 Rotina de alteração Segunda solução: Para se incluir ou substituir dados em um controle DataWindow, utiliza-se à função SetItem. Para se recuperar dados de um controle DataWindow se utiliza à função GetItemNumber, GetItemString, GetItemDate, GetItemDateTime e GetItemTime. Cada função recupera o seu dado correspondente ao tipo de coluna definido no objeto DataWindow. Sintaxe : numeric dwcontrole.GetItemNumber ( long row, string column {, DWBuffer dwbuffer, boolean originalvalue } ) numeric dwcontrole.GetItemNumber ( long row, integer column {, DWBuffer dwbuffer, boolean originalvalue } ) Onde: dwcontrole Row : é o nome do controle DataWindow/DataStore. : Dado numérico que representa a linha do dado no objeto DataWindow. Column : Nome ou a posição (numérica) da coluna. Dwbuffer(opcional) : Identifica qual buffer o dado será recuperado na DataWindow. Originalvalue(optional):Variável booleana, que indica se a recuperação será da linha corrente ou dos dados originais no buffer. True: Retorna os valores originais (os mesmos do Retrieve na base de dados). False: (Default) Retorna os valores correntes. PowerBuilder 9.0 Básico Capítulo 9 141 Rotina de alteração Segunda solução: Sintaxe: integer dwcontrole.SetItem ( long row, integer column, any value ) integer dwcontrole.SetItem ( long row, string column, any value ) Onde: dwcontrole row column value : é o nome do controle DataWindow/DataStore. : Dado numérico que representa a linha do dado no objeto DataWindow. : Nome ou a posição (numérica) da coluna. : Valor que deverá ser incluído na DataWindow. Notando a sintaxe da função SetItem verifica-se a necessidade de se informar que linha deve ser alterada. Essa informação só é possível se obter através do evento “Clicked!” da dw_1. Onde montamos a rotina de recuperação de dados para a dw_2. Para que se passe esse valor para um outro evento de um outro objeto, podemos criar uma variável do tipo Instance, como definido anteriormente. Clique caixa de seleção de script a esquerda da parte superior, selecione Declare Instance Variable. Defina a variável long wk_linha conforme a figura abaixo. Agora clique na aba “Clicked” e atribua o valor da linha clicada (row) a variável de instacia wk_linha. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 142 Rotina de alteração Segunda solução: Clique na aba Layout e de um duplo clique no controle DataWindow dw_2 combinando a função SetItem com a função GetItemNumber e GetItem String. teremos: Para uma melhor documentação, é sempre melhor utilizar o nome da coluna na sintaxe, mas pode-se utilizar o número (posição) que ela ocupa no banco de dados. Onde : id seria posição 1 e fname posição 2. Caso tenha implementado a primeira opção coloque as linhas dw_Reset( ) e dw_Retrieve( ) como comentário para testar a segunda opção. PowerBuilder 9.0 Básico Capítulo 9 143 Rotina de alteração Segunda solução: Clique em executar. Save e salve a sua aplicação e em Run para Para completar este exemplo de manipulação de dados em um controle DataWindow. Inclua um botão de exclusão de dados. Rotina de Exclusão CommandButton e depois na posição da janela que você Clique em quer incluir o botão(coloque logo abaixo do botão Gravar). E no template Propriedade preencha: Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 144 Rotina de Exclusão Agora de um duplo clique no botão cb_excluir. No evento “clicked”, programe a rotina para exclusão usando a função DeleteRow. Sintaxe : integer dwcontrole.DeleteRow ( long row ) Onde : dwcontrole : é o nome do controle DataWindow/DataStore. row : Dado numérico que representa a linha do dado no objeto DataWindow. Para excluir uma linha do controle DataWindow primeiro selecionamos a linha que se deseja excluir. Como programamos para a inclusão, a variável wk_linha guardará a linha em que se clicou. Então podemos utilizar esta mesma variável para pegar a linha clicada. Note, que desta vez programamos o botão no modo Enable para desabilitado e este só estará habilitado caso se selecione uma linha à excluir. A exclusão em uma base de dados é uma transação que deve ser cautelosa. Pôs, não tem retorno. Então devemos sempre pedir uma confirmação para executarmos esta tarefa. Para isto utilizaremos a função MessageBox. Sintaxe: MessageBox ( title, text {, icon {, button {, default } } } ) Onde : title : Texto que ira aparecer no header da janela de alerta. text : Um texto que represente o motivo da mensagem. icon : (opcional) Informa ao PowerBuilder 9.0 que tipo de ícone será apresentado do lado esquerdo da janela de mensagem para chamar atenção. !" Information! (Default) !" StopSign! !" Exclamation! !" Question! !" None! button: (opcional) Que tipo de botão se queira mostrar dependendo do tipo de questionamento que se faça. !" OK! — (Default) OK !" OKCancel! — OK e Cancelar !" YesNo! — Sim e Não !" YesNoCancel! — Sim, Não, e Cancelar !" RetryCancel! — Repetir e Cancelar !" AbortRetryIgnore! — Abortar, Repetir e Ignora PowerBuilder 9.0 Básico Capítulo 9 145 Rotina de Exclusão Programando o botão. Dê um duplo clique no objeto DataWindow dw_1 no evento “Clicked” adicione o código abaixo: Agora de um duplo clique no botão Excluir e programe a rotina de exclusão. Note que a função DeleteRow apaga o dado selecionado do controle DataWindow. Para se ter o efeito refletido na base de dados precisamos atualizar a base. Utilizaremos a função Update. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 9 146 Rotina de Exclusão Então teremos: Nesse nosso exemplo poderemos notar a exibição de uma mensagem de erro após se optar por excluir na base de dados. Isso se deve ao fato da tabela customer ter a sua Primary Key apontada para a Foreign Key 'ky_so_customer' na tabela sales_order ou seja, para excluir este item devemos excluir em cascata como vimos no item, Uso do SQL no PowerBuilder. Veremos este processo mais adiante, mas se for retirado ou comentado a função UpDate poderemos ver a funcionalidade da função DeleteRow, apagando o item selecionado no controle DataWindow que é nosso foco. Manipular dados em um controle DataWindow. Capítulo 10 DataWindow : Técnicas avançadas Buffers Internos Detectar a validação Detectar o Tipo de dado Detectar regras de validação Detectar mudanças no item Usando Filtros Classificando Cláusula Where para Update e Delete Modify e Describe Função Evaluate( ) Propriedade Object Parametrizando com a cláusula DATA Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 10 147 DataWindow : Técnicas avançadas Neste capítulo veremos algumas expressões utilizadas no controle DataWindow para acessar os dados de um objeto DataWindow, tais expressões permitem acessar um dado específico ou retornar um grande volume de dado. Para isso teremos que entender um pouco mais sobre o controle DataWindow. Esse controle é responsável pela recuperação, manipulação e atualização de dados no banco de dados, dados quando recuperados, serão armazenados em buffers internos do objeto DataWindow. Buffers Internos. Buffer Original Primary Delete Filter Descrição Dados recuperados do BD que não se alteram. É a primeira imagem do original, aceita alteração e inserção. Itens que foram apagados do buffer primário. Dados que não serão mostrados, devido ao filtro de seleção definido no objeto DataWindow. Esses buffers sempre serão criados na máquina cliente e lá permanecerão até a atualização UPDATE() ou descarte dos dados pela aplicação que os solicitou. Toda manipulação de dado através de um controle DataWindow segue algumas regras para a sua transferência entre o controle DataWindow e o buffer primário. São elas: !" !" !" !" Detectar Detectar Detectar Detectar a validação; o tipo de dado; regras de validação; mudanças no item. Após essas regras retornarem todas como verdade ou zero, o dado do item selecionado é então transferido para o buffer primário. Capítulo 10 PowerBuilder 9.0 Básico 148 DataWindow : Técnicas avançadas Detectar a validação. O controle DataWindow dispara a validação quando: 1. Quando a coluna que foi alterada perde o foco; 2. Quando a tecla Enter é pressionada; 3. Ou a função AcceptText( ) é executada. Detectar o Tipo de dado. Todos os controles de edição são do tipo string, por esse motivo aceitam todos os caracteres. Por isso o controle DataWindow compara o tipo de dado digitado com o tipo de dado no Buffer. Se o tipo de dado não for compatível o evento ItemError é disparado. Detectar regras de validação Nessa etapa o dado é submetido a regras de validação para a coluna. Estas regras são definidas no banco de dados ou na criação da DataWindow para cada coluna. Detectar mudanças no item O dado digitado é comparado com o dado no buffer primário da DataWindow. Se o dado não foi alterado, esta etapa termina, caso contrário, o evento ItemChanged é disparado possibilitando a execução de alguma validação de usuário no evento ItemChanged. Após a execução da validação de usuário, se existir, o dado é transferido para o buffer primário. A execução de um script do evento ItenError será determinada pelos códigos de retorno, são eles: Código de retorno 0 1 2 3 Ação (Default) Rejeita o dado e exibe uma tela de mensagem de erro. Rejeita o dado sem exibir uma tela de mensagem de erro. Aceita o dado. Aceita o dado, sem alterar o buffer primário e permite que o foco mude de coluna. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 10 149 DataWindow : Técnicas avançadas Se o evento ItenChanged for disparado, a seqüência de execução será determinada pelos códigos de retorno, são eles: Código de Ação retorno 0 (Default) Aceita o dado digitado. 1 Rejeita o dado e dispara o evento ItemError. 2 Rejeita o dado, mas permite que o foco mude de coluna. Os eventos ItemError e ItemChanged, permitem ao desenvolvedor saber qual coluna, qual linha e que dado do controle DataWindow disparou o evento. Os argumentos para este evento estarão sempre disponíveis caso disparados, são eles : ROW DWO DATA Contém o número da linha do item que esta sendo alterado. Referência para a coluna que disparou o evento. O conteúdo da coluna que disparou o evento. Exemplo: dwo.Type dwo.Name : Retorna o tipo de controle que disparou o evento. : Retorna o nome da coluna que disparou o evento. PowerBuilder 9.0 Básico Capítulo 10 150 DataWindow : Técnicas avançadas Usando Filtros. O desenvolvedor poderá limitar o acesso que o controle DataWindow tem aos dados seja por segurança ou para facilitar o tratamento pelo usuário. Assim poderá com apenas um acesso a base de dados, disponibilizar os dados de várias maneiras diferentes (filtrados). Como funciona: Depois que o objeto DataWindow recupera os dados, aplicase o filtro no buffer primário gerando assim o buffer Filter com todas as linhas que não atenderam as condições determinadas pelo filtro. A função utilizada é a SetFilter (condição), para definir e aplicar o filtro utiliza-se a função Filter (). É sempre aconselhável utilizar a função SetRedraw ( boolean redraw ) em conjunto com a função Filter( ) essa função tem como parâmetro TRUE ou FALSE. False - interrompe a montagem em tempo de execução de um controle DataWindow. O que faz a aplicação do filtro ser mais rápido para grandes grades de dados. True - Ativa a montagem em tempo de execução de um controle DataWindow. Exemplo: String s_filtro s_filtro = “salario>1000 and departamento=’Informática’ ” dw_1.SetRedraw(FALSE) dw_1.SetFilter(s_filtro) dw_1.Filter( ) dw_1.SetRedDraw(TRUE) Ao se aplicar um filtro em uma DataWindow com agrupamentos, faz-se necessário executar a função GroupCalc( ) para se recalcular os agrupamentos. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 10 151 DataWindow : Técnicas avançadas Classificando. Pode-se ordenara a recuperação de dados tanto no servidor quando no cliente. No servidor usamos o ORDER BY no comando SELECT. Em tempo de execução utilizamos SetSort (). Para definir ou modificar a classificação corrente. Este método possibilita a pesquisa pelo usuário por dados específicos. Sintaxe : integer dwcontrole.SetSort ( string format ) Exemplo : //Classifica dw_1, ascendente por nome e descendente por salário dw_1.SetSort(“nome A, salario D”) Pode-se usar o número da coluna, com parâmetro. dw_1.SetSort(“#1 A, #10 D”) Onde : # 1 A 10 D : : : : : É obrigatório antes do número da coluna; Posição da coluna; Ascendente; Posição da coluna; Descendente. A função SetSort( ) apenas define os critério de classificação. Para efetivar a classificação na DataWindow, utilize a função Sort( ). dw_1.Sort( ) Para uma base com grande volume de dados, utilize a função SetRedraw( ). Ao se classificar uma DataWindow com agrupamentos, faz-se necessário executar a função GroupCalc( ) para se recalcular os agrupamentos. PowerBuilder 9.0 Básico Capítulo 10 152 DataWindow : Técnicas avançadas Conhecendo a função UpDate (). Quando se utiliza a função UpDate internamente o PowerBuilder executa vários comandos de SQL. São eles: DELETE UPDATE INSERT : Um para cada linha antiga do buffer delete; : Um para cada linha antiga modificada nos buffers, Primary e Filter; : Um para cada linha nos buffers, Primary ou Filter. Sempre que se chama a função UpDate um comando de atualização de banco é enviado por vez. Se algum erro for retornado todo o processo de atualização será interrompido e o evento DBError do controle DataWindow que chamou a atualização será disparado. E a função UpDate retornará -1. Para visualizar os comandos SQL gerados para atualização dos dados no banco de dados acesse os argumentos do evento SQLPreview no controle DataWindow que chamou a atualização. O PowerBuilder 9.0 controla as atualizações processadas no banco de dados montando o comando SQL mais apropriado para cada DML de INSERT, DELETE e UPDATE. Você pode dar um “lock” na linha editada internamente o PowerBuilder 9.0 responde a este problema com a técnica de analisar as características definidas pelo desenvolvedor na criação do objeto DataWindow. Estas características são definidas no painter DataWindow. Selecione na PowerBar1, Rows e UpDate Properties. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 10 153 DataWindow : Técnicas avançadas O Wizard “Specify UpDate Properties” se abrirá e as propriedades para as atualizações estarão disponíveis para seleção. São eles: Cláusula Where para Update e Delete. !" Key Columns; !" Key and Update Columns; !" Key and Modified Columns. Key Columns : Somente a chave primária da tabela selecionada é utilizada na cláusula Where. Vários usuários podem alterar o dado ao mesmo tempo. Key and UpDate Columns : A chave primária e as colunas atualizáveis da DataWindow serão usadas na cláusula WHERE. Esta opção pode notificar a outro usuário, que o item foi alterado. Key and Modified Columns : A chave primária e todas as colunas alteradas da DataWindow serão usadas na cláusula WHERE. Esta opção permite que usuários alterem itens distintos. Allow Update : Habilita o update para a tabela. Se desligada a DataWindow é apenas de leitura, normalmente utilizada para relatórios. UpDateTable Columns : Seleciona as colunas que serão atualizáveis as colunas não selecionadas não serão atualizadas com a função UpDate. Table to Update : Especifica a tabela que será atualizada apenas uma tabela. Se existir junções na query da DataWindow apenas uma delas poderá ser atualizada. PowerBuilder 9.0 Básico Capítulo 10 154 DataWindow : Técnicas avançadas Key Modification : Define o modo de alteração da chave primária. Pode ser definida como: Apaga o item e inclui um novo item na base ou Atualiza o item corrente alterando a chave primária. Essa opção deve ser bem estudada deve-se conhecer bem a base de dados, principalmente os relacionamentos entre as tabelas. Se a base de dados estiver parametrizada com “Delete on Cascate” serão excluídos todos os itens nas tabelas relacionadas. Unique Key Columns: Especifica as colunas que fazem parte da chave primária. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 10 155 DataWindow : Técnicas avançadas Modify e Describe, obtendo o máximo da DataWindow Sem dúvida a DataWindow é o mais poderoso recurso do PowerBuilder 9.0 para acesso a bases de dados possibilitando a criação de uma interface eficiente e de fácil utilização. No PowerBuilder 9.0 podemos manipular um controle DataWindow e objetos DataWindow através das funções Modify e Describe. Sempre ouço que estas funções são as mais difíceis de se utilizar das funções disponibilizadas pelo PowerBuilder 9.0. Até concordo que em alguns casos seja um emaranhado de linhas de código tornando bastante complexa a sua depuração, mas por outro lado, seguindo-se algumas regras veremos que não é um bicho de sete cabeças. Sintaxe: string dwcontrole.Modify ( string modstring ) Onde : string: Tipo de retorno. Modify retorna vazio se OK e o erro se falhar. dwcontrole: nome da DataWindow. modString : linha a ser modificada da DataWindow. Através do Modify pode-se alterar todos os atributos de um objeto ou controle DataWindow. Suponha que em tempo de execução você queira inibir uma coluna em uma DataWindow. Usando o Modify, ficaria: //Esconde a coluna dw_1.Modify(“nome_da_coluna.visible=0”) //Esconde o label dw_1.Modify(“label_t.visible=0”) dw_1.SetTransObject(SQLCA) dw_1.Retrieve(……) Com o Modify podemos também alterar os atributos do Painter de DataWindow contornando o problema de a DataWindow só deixar se especificar uma tabela para atualização. PowerBuilder 9.0 Básico Capítulo 10 156 DataWindow : Técnicas avançadas Suponha uma DataWindow com colunas exibidas de várias tabelas e se queira atualizar dados em todas as tabelas. Tabelas do processo: empregado e salário Passo 1: !" Aplique o UpDate padrão. //Atualiza a tabela definida no painter DataWindow(empregado) Integer i_ret I_ret = dw_1.Update(TRUE,FALSE) FALSE – Marca como não reiniciar as flags. IF i_ret = 1 THEN //desativa a atualização para as colunas da tabela, empregado dw_1.Modify(“empregado_numero.UpDate = No”) dw_1.Modify(“empregado_nome.UpDate = No”) dw_1.Modify(“empregado_endereco.UpDate = No”) dw_1.Modify(“empregado_telefone.UpDate = No”) //Faz a tabela salário aceitar UpDate dw_1.Modify(“DataWindow.Table.UpdateTable = ~’salario~’ ”) //Faz as colunas da tabela salario aceitarem Update dw_1.Modify(“salario_número_empregado.UpDate = Yes”) dw_1.Modify(“salario_salario.UpDate = Yes”) Adquirido por : Fabrício Moreira da Silva Capítulo 10 PowerBuilder 9.0 Básico 157 DataWindow : Técnicas avançadas //Atualiza a tabela salário e zera as flags i_ret = dw_1.UpDate( ) IF i_ret = 1 THEN dw_1.ResetUpDate Commit; ELSE Messagebox(“Erro”,”Erro no UpDate da tabela - salário”) RollBack; END IF ELSE Messagebox(“ERRO”,”Erro no UpDate da tabela – empregado”) RollBack; END IF //Desativa a tabela salário dw_1.Modify(“salario_numero.UpDate = No”) dw_1.Modify(“salario_salario.UpDate = No”) //Ativa a tabela empregado(estado original da DW) dw_1.Modify(“empregado_numero.UpDate dw_1.Modify(“empregado_nome.UpDate dw_1.Modify(“empregado_endereco.UpDate dw_1.Modify(“empregado_telefone.UpDate = Yes”) = Yes”) = Yes”) = Yes”) //Faz a tabela "empregado" aceitar UpDate dw_1.Modify(“DataWindow.Table.UpDateTable = ~´empregado~´”) Não foi tão complicado. Apenas uma seqüência até os sinais (~) til, (~r) til + r e (~t) til + t, seguem uma seqüência. !" !" Para se incorporar uma string dentro de outra string, apóstrofos(aspas simples) são reconhecidos como diferentes de aspas (duplas). Um apóstrofo (aspa simples) representa ~`. O PowerBuilder 9.0 incorpora um analisador de strings, que é usado para validar os strings submetidos. O “til” é usado para informar ao analisador que o caractere seguinte deve ser usado como literal. PowerBuilder 9.0 Básico Capítulo 10 158 DataWindow : Técnicas avançadas Alguns atributos do objeto DataWindow disponibilizam a utilização de expressões. Você pode nota-los com este botão ao lado do atributo. É o caso do atributo VISIBLE. Você poderá passar uma expressão através da função Modify. Coluna : salário Expressão IF - dentro do painter DataWindow : If ( boolean, truevalue, falsevalue ) string s_mod s_mod = “salário.visible = ´0~tIF (salário > 1000,0,1)´” dw_1.Modify(s_mod) Neste exemplo, sempre que o salário for maior que 1000 não ficará visível. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 10 DataWindow : Técnicas avançadas Todos os atributos estão disponíveis no HELP do PowerBuilder 9.0. 159 PowerBuilder 9.0 Básico Capítulo 10 DataWindow : Técnicas avançadas Função Evaluate() A função Evaluate( ) deve ser utilizada com a função Describe. A função Evaluate, permite a avaliação de expressões na DataWindow. Sintaxe : "evaluate('expressão', linha)" Onde : expressão : expressão que se deseja avaliar linha : número da linha que se deseja avaliar a expressão Exemplo : O exemplo abaixo retorna a linha corrente da página atual e coloca como título da janela w_1. string s_mod, s_linha s_linha = string(dw_1.GetRow()) s_mod = “Evaluate(´Page()´.” + s_linha +”)” w_1.Title = "Página " + dw_1.describe(s_mod) Evaluate com expressões condicionais Sintaxe : defaultvalue ~t expressão Onde : defaultvalue: Valor padrão da propriedade. ~t : separador obrigatório. expressão : expressão aplicada à função evaluate. Exemplo: Retorna 0 se a linha é nova ou 1 se a linha é antiga. string s_ret s_ret = dw_1.Describe(“Evaluate(´If( IsRowNew ( ), 0, 1) ´,GetRow() ) ” ) Adquirido por : Fabrício Moreira da Silva 160 PowerBuilder 9.0 Básico Capítulo 10 161 DataWindow : Técnicas avançadas Assim como a função Modify atribui a DataWindow existe a função Describe que recupera as informações da DataWindow. Sintaxe: String Describe (sintaxe) Onde : sintaxe : propriedade a ser recuperada. string : retorno da propriedade solicitada. Exemplo : //Lista todos os atributos da DataWindow dw_1.Describe("DataWindow.Attributes") Faça este teste no evento OPEN do exemplo1. Messagebox("Atributos da DataWindow", & + dw_1.Describe("DataWindow.Attributes")) !" Irá retornar uma lista com todos os atributos do controle DataWindow. Você poderá ter acesso a esses atributos e ver muitos exemplos no HELP do PowerBuilder 9.0. Procure por Describe DataWindow expression function e selecione Controls in a DataWindow and their properties. As funções Modify e Describe são muitos úteis quando se trata de trabalhar mais profissionalmente com as DataWindow por esse motivo tente sempre que possível utilizar estas funções. Seu projeto ficará sempre mais dinâmico e o limite das suas funcionalidades esta no limite da sua criação. PowerBuilder 9.0 Básico Capítulo 10 162 DataWindow : Técnicas avançadas Propriedade Object. Podemos utilizar a propriedade Object para acessar dados em um objeto DataWindow em forma de expressões. Essas expressões podem se referenciar ao nome da coluna, número da coluna ou a linhas inteiras. Recuperando uma única linha da coluna especificada. Sintaxe : dw_controle.Object.ColumnName[RowNum] Onde : dw_controle : Nome do controle DataWindow que se irá recuperar ou inserir dados. columnName : Nome da coluna no objeto DataWindow. cowNum : Número da linha que se deseja recuperar. Sempre retorna um único valor Exemplo: //RECUPERANDO UM VALOR Long l_salario l_salario = dw_1.Object.salario[1] Recupera o conteúdo da coluna salario no objeto DataWindow e guarda na variável l_salario. //ATRIBUINDO UM VALOR Long l_salario = 3450 dw_1.Object.salario[1]=l_salario //OU dw_1.Object.salario[1]=3450 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 10 DataWindow : Técnicas avançadas Recuperando todas as linhas da coluna especificada. Sintaxe : dw_controle.Object.ColumnName.Buffer Onde : dw_controle : Nome do controle DataWindow que se irá recuperar ou inserir dados. columnName : Nome da coluna no objeto DataWindow. buffer : designa o Buffer que será recuperado o dado. Retorna um ARRAY do mesmo tipo de dado definido para a coluna. Exemplo: //RETORNA OS DADOS DO BUFFER PRIMARIO DO OBJETO DATAWINDOW String s_departamento[ ] s_departamento = dw_1.Object.departamento.Primary //RETORNA OS DADOS DO BUFFER CORRENTE DO OBJETO DataWindow String s_departamento [ ] s_departamento = dw_1.Object.departamento.Current Recupera para o array “s_departamento” os dados da coluna “departamento” de todas as linhas do objeto DataWindow. Recuperando as linhas selecionadas da coluna especificada. Sintaxe : dw_controle.Object.ColumnName.Selected Onde : dw_controle : Nome do controle DataWindow que se irá recuperar ou inserir dados. columnName : Nome da coluna no objeto DataWindow. selected : Cláusula de acesso as linhas selecionadas na DataWindow. Retorna um ARRAY do mesmo tipo de dado definido para a coluna. 163 PowerBuilder 9.0 Básico Capítulo 10 164 DataWindow : Técnicas avançadas Exemplo: //RETORNA AS LINHAS SELECIONADAS NO CONTROLE DATAWINDOW String s_empregado[ ] S_empregado = dw_1.Object.empregado.Selectd Se no controle DataWindow nenhuma linha estiver selecionada, retornará um array vazio. Recuperando um conjunto de linhas da coluna especificada. Sintaxe: dw_controle.Object.ColumnName.[StartRowNum,EndRowNum] Onde : dw_controle : Nome do controle DataWindow que se irá recuperar ou inserir dados. columnName : Nome da coluna no objeto DataWindow. startRowNum : Número da primeira linha a ser recuperada. endRowNum : Número da última linha a ser recuperada. Retorna um ARRAY do mesmo tipo de dados definido para a coluna e os limites informados. Exemplo: //RECUPARA OS NOMES DAS LINHAS 20,21,22,23 E 24 DA COLUNA NOME String s_nomes[5] s_nome = dw_1.Object.nome[20,24] //ATRIBUI BRANCOS NAS LINHAS 20,21,22,23 E 24 DA COLUNA NOME dw_1.Object.nome[20,24]=”” Adquirido por : Fabrício Moreira da Silva Capítulo 10 PowerBuilder 9.0 Básico DataWindow : Técnicas avançadas Parametrizando com a cláusula DATA. Caso o nome da coluna seja desconhecido podemos parametrizar o acesso através do número da coluna. Recuperando uma única linha da coluna especificada. Sintaxe: dw_controle.Object.Data.[StartRowNum,StartColNum] Onde : dw_controle : Nome do controle DataWindow que se irá recuperar ou inserir dados. columnName : Nome da coluna no objeto DataWindow. startRowNum : Número da primeira linha a ser recuperada. startColNum : Número da coluna. Sempre retorna um único valor do buffer primário. //RECUPERA O DADO DA COLUNA 5 DA LINHA 9 Long l_dependentes L_dependentes = dw_1.Object.Data[9,5] //ATRIBUI O VALOR “3” NA COLUNA 5 DA LINHA 9 dw_1.Object.Data[9,5] = 3 Recuperando um bloco especifico de colunas Sintaxe: dw_controle.Object.Data.[StartRowNum,StartColNum,EndRowNum,EndColNum] Onde : dw_controle columnName startRowNum startColNum sndColNum : Nome do controle DataWindow que se irá recuperar ou inserir dados. : Nome da coluna no objeto DataWindow. : Número da primeira linha a ser recuperada. : Número da coluna inicial. : Número da coluna final. Retorna um ARRAY de estrutura do mesmo tipo de dados definido para a coluna e os limites informados. 165 PowerBuilder 9.0 Básico Capítulo 10 DataWindow : Técnicas avançadas Exemplo : //RETORNA OS VALORES DAS LINHAS 1 A 10 DAS COLUNAS DE 1 A 6 Str_departamento str_depto[ ] Str_depto = dw_1.Object.Data[1,1,10,6] A cláusula Data possibilita combinações para manipulação de dados. Retornar uma linha inteira. array_ou_estrutura = dw_1.Object.data[linha] Retorna a DataWindow inteira. array_tipo_ANY = dw_1.object.data Transfere dados do buffer primário de dw_1 para dw_2. dw_2.object.data = dw_1.Object.data Transfere da dw_1 para dw_2 as linhas selecionadas. dw_2.Object.Data = dw_1.Object.Data.Selected Adquirido por : Fabrício Moreira da Silva 166 Capítulo 11 PipeLine de dados PowerBuilder 9.0 Básico Capítulo 11 167 PipeLine de dados O pipeline de dados consiste como mais uma funcionalidade do PowerBuilder 9.0. Com o pipeline se transferem grandes quantidades de dados de um banco para outro banco independente. Podem-se transferir dados de um banco SQL Server para um banco Oracle. Assim como se pode utilizar o pipeline para se atualizar uma rede de dados distribuídos. No painter DataBase selecione a tabela que será transferida do banco e clique em Pipeline para abrir o template do pipeline. No Template pipeline. Teremos: Table : Nome da tabela que será criada no banco destino. Options: O tipo de transferência de dados, opções: !" !" !" !" !" Create-Add Table - Cria uma nova tabela, ela não pode existir na base destino. Replace-Drop/Add Table - Apaga a tabela se ela existir no banco destino e cria uma nova tabela. Refresh-Delete/Insert Rows - Mantém o banco destino, mas faz com que as linhas se correspondam ao banco origem. Append-Insert Rows - Insere apenas as linhas novas no banco destino, linhas repetidas serão apontadas através de mensagens de erro. Update-Update/Insert Rows - Insere linhas novas no banco destino e atualiza as linhas já existentes se alguma informação sofreu alteração. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 11 168 PipeLine de dados Key : O nome da chave primária da tabela destino, normalmente é a usada à mesma chave na tabela do banco origem. Max Errors : A quantidade de erros que sua transferência pode receber até ser suspensa. Commit de Commit. : A quantidade de instruções SQL executadas antes da instrução No template de definição de dados pode-se definir como os dados serão recebidos pelo banco de destino. Source Name e Source Type não permitem alteração, os itens com fundo em branco, permitem alteração. !" Destination Name - Altera o nome da coluna no banco destino. !" Type - Altera o tipo de dado na tabela destino. !" Key !" Width - Indica que itens farão parte da chave primária na tabela destino. - Altera o tamanho do item no banco destino. !" Dec !" Nulls !" Initial Value - Altera o número de casas decimais no banco destino - Indica que valores podem ter valores NULL. - Indica o novo valor padrão para o banco destino. PowerBuilder 9.0 Básico Capítulo 11 169 PipeLine de dados Após completar a definição dos dados para serem transferidos agora defina qual banco irá receber os dados da tabela de origem. Clique em Destination Profile e selecione o banco destino. Clique em Clique em Execute e será iniciada a transferência dos dados. Save para salvar a sua definição do pipeline para ser executada posteriormente. De o nome de U_COPIA_TABELA. O método que acabamos de ver executa o Pipeline no ambiente de desenvolvimento. Pode-se usar o Pipeline em tempo de execução para isso teremos que criar um objeto Pipeline e anexarmos a aplicação. Clique em New selecione PB Object e Standart Class. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 11 170 PipeLine de dados A caixa de dialogo para seleção do tipo de classe a ser usada se abrirá. Então selecione Pipeline. O template de definição da pipeline se abrirá : PowerBuilder 9.0 Básico Capítulo 11 171 PipeLine de dados Clique em Declare Instance Variables. Então defina os objetos: statictext st_lidos,st_gravados,st_erros Agora clique em Event List e escreva o código abaixo. Agora clique em Save e salve o objeto do usuário como uo_pipeline01 em nossa aplicação exemplo1. Para executar o pipeline em tempo de execução você pode criar uma dropdown com uma lista de objetos e ao selecionar o objeto execute o código abaixo ou crie um botão para isto. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 11 172 PipeLine de dados O código abaixo executa o PipeLine. Nesse exemplo teremos como padrão de execução um botão. Integer li_RC Long ll_Start, ll_End Transaction lt_Source uo_pipeline01 lp_Create st_erros.Text = "0" st_lidos.Text = "0" st_tempo.Text = "0" st_gravados.Text = "0" String erros[18] erros[1] = "-1 Erro ao abrir o Pipeline" erros[2] = "-2 Faltam colunas" erros[3] = "-3 Tabela já existe" erros[4] = "-4 Tabela não existe" erros[5] = "-5 Sem conexão inexistente" erros[6] = "-6 Erro nos parâmetros" erros[7] = "-7 Colunas incompatíveis" erros[8] = "-8 Erro fatal no SQL de origem" erros[9] = "-9 Erro fatal no SQL de destino" erros[10] = "-10 Maximo número de erros excedidos" erros[12] = "-12 Erro na sintaxe do Pipeline" erros[13] = "-13 chave requerido não encontrada" erros[15] = "-15 Pipeline já esta executando" erros[16] = "-16 Erro no database origem" erros[17] = "-17 Erro no database destino" erros[18] = "-18 Base de dados destino e um read-only" SetPointer(HourGlass!) This.Enabled = False cb_executa.Enabled = False transaction lt_origem lt_origem = CREATE Transaction lt_origem.dbms = sqlca.dbms lt_origem.database = sqlca.database PowerBuilder 9.0 Básico Capítulo 11 PipeLine de dados lt_origem.userid = sqlca.userid lt_origem.dbpass = sqlca.dbpass lt_origem.logid = sqlca.logid lt_origem.logpass = sqlca.logpass lt_origem.servername = sqlca.servername lt_origem.dbparm = sqlca.dbparm Connect using lt_origem; If lt_origem.sqlcode <> 0 Then Messagebox("Erro ao conectar", lt_origem.sqlerrtext) Return End If lp_Create = CREATE uo_pipeline01 lp_Create.st_lidos = st_lidos lp_Create.st_gravados = st_gravados lp_Create.st_erros = st_erros //Recupera o pipeline de uma dropdown //lp_Create.DataObject = ddlb_pipeline.text //Ou atribua direto lp_Create.DataObject = "u_copia_tabela" ll_Start = CPU() li_RC = lp_Create.Start(lt_origem, sqlca,dw_erros) ll_End = CPU() st_tempo.Text = String((ll_End - ll_Start)/1000,"##0.0") If li_RC <> 1 Then Beep(2) MessageBox("Erro", erros[ABS(li_rc)]) st_men.text = "Execução abortada" End if Commit; DESTROY lp_Create Disconnect Using lt_origem; DESTROY lt_origem This.Enabled = True cb_executa.Enabled = FALSE Adquirido por : Fabrício Moreira da Silva 173 PowerBuilder 9.0 Básico Capítulo 11 174 PipeLine de dados If li_RC = 1 Then st_men.text = "Execusão terminada com sucesso." End if Nota : Para a “dw_erros” crie somente o controle datawindow. Este exemplo você poderá testar no CD do PowerBuilder 9.0 Básico. Capítulo 12 Criando Relatórios Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 175 Criando Relatórios A criação de relatórios com o PowerBuilder 9.0 é muito simples quanto simples é o seu relatório, no PowerBuilder 9.0 a criação de um relatório segue os mesmos critérios da criação de uma DataWindow. O Relatório assim como a DataWindow é o resultado de uma consulta (query) ao banco de dados. A grande diferença é que o relatório não pode ser editado pelo usuário a sua ordem de tabulação é igual a zero. Em um relatório não existe validação de dados nem atualização dos mesmos. As opções de relatórios quanto a estilo de apresentação e origem de dados, são as mesmas disponibilizadas para a DataWindow. Veja as definições no capítulo 9, sobre DataWindow. Para se produzir um relatório devemos seguir alguns passos: 1. 2. 3. 4. Determinar o tipo de relatório que se irá produzir; Criar o objeto DataWindow que irá recuperar e exibir os dados; Anexar o objeto DataWindow a um controle DataWindow; Adicionar no controle DataWindow os processos para recuperar os dados e imprimir. Os tipos: !" !" !" !" !" !" !" !" !" !" !" Tabular Freeform Grid Label N-Up Group Composite Graph Crosstab OLE 2.0 RichText PowerBuilder 9.0 Básico Capítulo 12 176 Criando Relatórios Em um relatório podem-se agregar todas as funcionalidades da DataWindow exceto as funcionalidades de atualização, por uma questão lógica e não por limitação. Então criar um relatório com o PowerBuilder é muito simples. Seguiremos alguns passos criando um relatório em cima da base de dados exemplo EAS Demo DB V9 e descrevendo passo a passo seus eventos, funções e propriedades. Clique em New selecione DataWindow e o estilo Freeform. Selecione no estilo de recuperação de dados Quick Select marque Retrieve on Preview. Clique em Next. Selecione a tabela Department, selecione todas as colunas clicando no botão à direita Add All, agora clique na tabela associada Employee, selecione as colunas emp.id, emp.fname, emp.lname, emp.salary. Clique em “OK” e marque o Save as Default. Clique em Next e em Finish para finalizarmos a criação de nossa DataWindow. A DataWindow foi criada. Como selecionamos o estilo Freeform os dados e label foram disponibilizados na vertical assim teremos que ajustar para que o relatório disponibilize as informações de modo satisfatório e coerente para uma boa visualização e customização de recursos. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 177 Criando Relatórios Teremos então no template de edição o quadro abaixo: Neste exemplo que iremos criar de relatório utilizaremos os recursos mais comuns para um relatório gerencial. Com cabeçalho, informações de página, data da impressão, hora da impressão e a utilização de expressões na DataWindow de relatório. O Primeiro passo é maximizar o template de edição para uma melhor visualização dos dados. Com esse procedimento podemos melhor visualizar as bandas disponíveis para manipulação. !" !" !" !" Header Datail Summary Footer - Onde colocaremos nosso cabeçalho. Onde colocaremos as linhas de dados. Onde colocaremos os dados sumarizados. Detalhes de rodapé do relatório. PowerBuilder 9.0 Básico Capítulo 12 178 Criando Relatórios A figura acima mostra o template de edição maximizado coloque o mouse sobra à banda Header. Na mudança do ponteiro do mouse, clique com o botão direito e mantenha-o pressionado, arrastando para baixo abrindo assim um espaço entre o limite do template e a banda Header. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 179 Criando Relatórios Criando cabeçalho. Na PaintBar1 selecione o objeto Text e clique na parte branca entre o Header e banda limite Header. Para criarmos uma caixa de texto onde começaremos a montar nosso cabeçalho. Para o objeto texto criado digite: “Demonstrativo : Salário Departamento”. Centralize o texto na parte superior da banda Header. X Agora selecione o objeto Picture e clique na parte esquerda da banda Header. A caixa de dialogo para se selecionar a figura a inserir no objeto se abrirá. Selecione:C:\Arquivosdeprogramas\Sybase\PowerBuilder9.0\Code\ Examples\ExampleApp\nautilus.bmp Caso a figura fique fora de proporção, coloque o mouse sobre a figura e clique com o botão direito no menu popup que se abrirá. Selecione, “Original Size”. Selecione outro objeto Text e inclua-o na banda Header. Para cada coluna selecionada na base iremos incluir um objeto texto com a identificação da coluna conforme segue : PowerBuilder 9.0 Básico Capítulo 12 180 Criando Relatórios Algumas colunas estarão agrupadas formando assim uma única informação. Para se quebrar uma linha do objeto Text, digite logo após o texto que se deseja quebrar (~r) Til mais a letra erre. Coloque o mouse sobre cada banda e na mudança do ponteiro do mouse clique com o botão direito mantenha-o pressionado e alinhe cada banda para que o relatório tenha uma proporcionalidade adequada para cada linha que será exibida. Veja figura abaixo. Note que algumas colunas terão um alinhamento à esquerda e outras à direita podendo até ter colunas que deverão estar centralizadas. Esses ajustes serão necessários para adequar o tipo de dado a visualização que se queira dar ao relatório. Não existe uma regra definida neste caso vale sempre o bom senso. Lembrando que sempre se deve procurar mostrar o máximo de informações possíveis sem se poluir o relatório. Fazendo-se assim um relatório de fácil leitura e identificação dos dados. Adquirido por : Fabrício Moreira da Silva Capítulo 12 PowerBuilder 9.0 Básico 181 Criando Relatórios Agora vamos incluir algumas funções disponíveis no PowerBuilder 9.0. Função Today() Now() Page() PageCount() Retorna Retorna Retorna Retorna a a a o Descrição data corrente hora corrente página corrente total de páginas Incluindo a data corrente Clique em Today´s Date e clique ao lado do título à direita para incluir o objeto Text com a expressão Today(). Note que a expressão Today() retorna a data atual no modelo a qual ela esta definida no painel de controle do MS Windows®. À direita no template propriedades, em “Compute Expression”. clique no botão de seleção para abrir a caixa de dialogo “Modify Expression” e digite ou selecione na caixa de seleção na parte inferior à esquerda String(x,s), no lugar do “x”, escreva Today() e ignore o “s”. Então teremos: string( today() ) PowerBuilder 9.0 Básico Capítulo 12 182 Criando Relatórios Clique em “Ok”. Aumente a célula até que esta disponibilize a data e a hora. Então teremos no relatório : Coloque o mouse sobre a banda “Summary” e na mudança do ponteiro do mouse clique com o botão esquerdo mantenha-o pressionado e arraste abrindo assim um espaço entre a banda “Datail” e “Summary”. para criar uma Clique na coluna “salary” da banda “Datail” e clique em coluna com a média dos valores recuperados do banco de dados. Agora clique na parte branca da banda “Summary” e o campo computado com a expressão, “avg(employee_salary for all)” será adicionado a e crie um novo objeto de texto e digite “Média DataWindow. Clique em Salarial :”. Alinhe o campo computado com a coluna salário e coloque o objeto texto à frente do campo computado. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 183 Criando Relatórios Com estes procedimentos montamos uma coluna com a média salarial de todos os departamentos. Agora incluiremos um controle de página no rodapé do relatório. Coloque o mouse sobre a banda “Footer” e na mudança do ponteiro do mouse clique com o botão esquerdo mantenha-o pressionado e arraste. Abrindo assim um espaço entre a banda “Summary” e “Footer”. para criar um campo computado com a expressão: 'Page ' + Clique em page() + ' of ' + pageCount(). No template propriedade à direita na propriedade “Compute Expression” clique no botão de seleção na caixa de dialogo que se abrirá e substitua : 1. “Page” por “Página” 2. “of” por “de” Então teremos : 'Página ' + page() + ' de ' + pageCount() E como resultado: PowerBuilder 9.0 Básico Capítulo 12 184 Criando Relatórios Criamos controle e total para o relatório geral. Criaremos agora estes controles para um determinado grupo. Assim devemos criar um grupo para dividirmos o relatório e dar e ele uma aparência mais profissional. Na PowerBar clique em “Rows” e selecione no menu que se abrirá “Create Group”. Na caixa de dialogo “Specify Group Columns” que se abrirá clique e arraste a coluna “department_dept_id” da caixa Source Data para a caixa Columns. Conforme a figura abaixo. Clique em “Ok”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 185 Criando Relatórios Note que novas bandas foram disponibilizadas a partir da inclusão de um grupo. São elas : Header group department_dept_id : Cabeçalho específico para o grupo. Trailer group department_dept_id : Rodapé específico do grupo Coloque o mouse sobre a banda “Trailer group” e na mudança do ponteiro do mouse clique com o botão esquerdo mantenha-o pressionado e arraste. Abrindo assim um espaço entre a banda “Trailer group” e “Detail”. Mova os itens da banda “Summary” Média Salarial. O computed Field com o valor da média salarial e a linha para a banda “Trailer Group”. Para continuarmos teremos que entender sobre as propriedades da banda de grupo. As outras bandas exibem propriedades padrão, já para a banda de grupo existem algumas particularidades. Capítulo 12 PowerBuilder 9.0 Básico 186 Criando Relatórios Coloque o ponteiro do mouse sobre a banda “Header group” e clique com o botão direito. As propriedades da banda aparecerão à direita. Color : Define a cor de fundo da banda. Height : Define o tamanho (altura) que a banda vai ter. Group Definition : Definição dos itens que compõe o grupo. Group Sort : O tipo de classificação que o grupo terá. Reset Page Count : Inicia o contador para cada quebra de grupo. New Page on Group Break : Quebra a página a cada quebra de grupo. Clique no botão de seleção de “Group Sort” e clique e arraste a coluna “department_dept_id” de “Source Data” para “Columns”. Conforme a figura. Clique em “Ok”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 187 Criando Relatórios No template propriedade selecione “New Page on Group Break”. Essa seleção fará com se quebre a página a cada novo grupo. Veja no Template Preview como ficou o relatório. Note que automaticamente uma barra foi incluída em cada quebra, esta barra pode ser inibida, siga os passos abaixo. Clique na parte branca da banda “Trailer gruop” para acessar as propriedades. Selecione “Hide Gray Line on Group Break”. Se deseja inibir esta barra. PowerBuilder 9.0 Básico Capítulo 12 188 Criando Relatórios Para uma apresentação mais profissional, coloque o mouse sobre a banda “Header group” e na mudança do ponteiro do mouse clique com o botão esquerdo mantenha-o pressionado e arraste abrindo assim um espaço entre a banda “Header group” e a banda “Header”. Mova as colunas “department_dept_id”, “department_dept_name” e “department_dept_head_id” para a banda “Header group”. Como resultado, teremos: Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 189 Criando Relatórios Save salve o relatório com o nome “d_rel01”, feche o Clique em template DataWindow. Agora, clique em New selecione “DataWindow” escolha como estilo “Group” em “Choose Data Source for Group DataWindow” selecione “Quick Select”. Na caixa de dialogo “Quick Select” selecione a tabela “Department” e clique no botão “Add All”. Selecione a tabela “Employee” e selecione as colunas emp.id, emp.fname, emp.lname e emp.salary. Em “Source Data” clique em “department_dept_id” e arraste para o item “Columns”. Clique em “Next”. Na caixa de dialogo “Set Group Page Data” item “New page on group break” clique em “Next” e na caixa de dialogo “Select Color and Border Settings” clique em “Next”. Na Caixa de dialogo “Ready to Create Group DataWindow”, clique em “Finish”. O Resultado que teremos se aproxima e muito da DataWindow criada anteriormente com a vantagem que só “clicamos”, o PowerBuilder 9.0 construiu tudo automaticamente nesse caso teríamos somente que acertar o cabeçalho e dimensionar melhor as colunas. PowerBuilder 9.0 Básico Capítulo 12 190 Criando Relatórios Entendendo o estilo Composite. O Estilo denominado “composite” designa-se a apresentar uma DataWindow cujo seu conteúdo é a inserção de várias DataWindow independentes ou não entre si com estilos de apresentação diferentes. Normalmente este estilo é utilizado para relatórios condensados e complexos. A DataWindow principal receberá a denominação “Composite” (que recebe as outras DataWindow), as DataWindow internas recebem a denominação “Nested Reports” (que compõe a DataWindow de estilo composite). Clique em New selecione DataWindow e o estilo Grid. Selecione no estilo de recuperação de dados Quick Select. Marque Retrieve on Preview. Clique em Next. Selecione a tabela Department. Selecione todas as colunas clicando no botão à direita Add All. Clique em “OK”, e marque o Save as Default. Clique em Next e em Finish para finalizar a criação da DataWindow. Teremos : Clique em Save e salve a DataWindow como “d_relatorio_1”. Feche o template de DataWindow. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 191 Criando Relatórios Vamos criar a segunda DataWindow que será inserida em nosso relatório composite. Clique em New selecione DataWindow e o estilo Tabular. Selecione no estilo de recuperação de dados Quick Select marque Retrieve on Preview. Clique em Next. Na caixa de dialogo “Quick Select” selecione a tabela “employee” e as colunas; “emp_id”, “manager_id”, “emp_fname”, “emp_lname”, “dept_id” e “salary”. Clique em “Ok” , “Next” e “Finish”. Então teremos: Clique em Save e salve a DataWindow como “d_relatorio_2”. Feche o template de DataWindow. Vamos criar a terceira DataWindow que será inserida em nosso relatório composite. Clique em New selecione DataWindow e o estilo Graph. Selecione no estilo de recuperação de dados Quick Select. Marque Retrieve on Preview. Clique em Next. PowerBuilder 9.0 Básico Capítulo 12 192 Criando Relatórios Na caixa de dialogo “Quick Select” selecione a tabela “employee” e as colunas; “salary” e “sex”. Clique em “Ok”, “Next” e “Finish”. Na caixa de dialogo “Define Graph Data” na propriedade “Category” selecione “sex” em “Values” selecione “salary”. Clique em “Next”. Na caixa de dialogo “Define graph Style” na propriedade “Title” escreva “Salário X Sexo” e em “Graph Type” selecione “Column”. Clique em “Next” e “Finish”. Então teremos : Agora falta descriminar as variáveis do nosso gráfico nesse exemplo não iremos exemplificar todas as propriedades do objeto gráfico, veremos isto mais adiante. Na propriedade à direita selecione “General” e em “Title” digite; “Sálario X Sexo”. Agora selecione a aba “Axis” e selecione na propriedade “Axis” o item “Category” em “Label” digite “Sexo”. Retorne na propriedade “Axis” e selecione “Value” e em “Label” digite “Salário”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 193 Criando Relatórios Então teremos: Clique em Save e salve a DataWindow como “d_relatorio_gr_3”. Feche o template de DataWindow. PowerBuilder 9.0 Básico Capítulo 12 194 Criando Relatórios Com os relatórios gerados iniciaremos a construção da DataWindow estilo composite. Clique em New selecione DataWindow e o estilo Composite. Na caixa de dialogo “Choose Nested DataWindows for Composite” selecione os relatórios “d_relatório_1”, “d_relatorio_2” e d_relatorio_gr_3”. Clique em Next e Finish. Então teremos: Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 12 195 Criando Relatórios A disposição física dos relatórios é as mesmas efetuadas durante a seleção, podemos modificar esta disposição para uma melhor visualização. O estilo Composite como todos os outros estilos também disponibiliza algumas propriedades que podem ser configuradas para uma melhor visualização. São: Em General : Name : Nome dado ao relatório e que define o acesso a este Nested. HideSnaked : Faz com que o controle só aparece uma vez por página quando você imprimir a DataWindow caso esta utilize o formato de colunas de jornal. Visible : Habilita ou inibe a visualização do relatório. Border : Define o tipo de contorno que o relatório deve exibir. PowerBuilder 9.0 Básico Capítulo 12 196 Criando Relatórios Report : Seleciona ou altera o relatório em foco. New Page (Nested). :Quebra a página antes da exibição do próximo relatório Trail Footer : Força a banda footer a aparecer depois da última linha de dados do relatório. Em Pointer : Pointer : Seleciona o tipo de ponteiro do mouse será exibido. Em Criteria : A condição de filtro da cláusula Where para o relatório. A propriedade de Critérios define a conexão entre o relatório e o DataWindow. Exemplo : emp_id=:id_emp Adquirido por : Fabrício Moreira da Silva Capítulo 13 Gráficos PowerBuilder 9.0 Básico Capítulo 13 197 Gráficos Um gráfico em linhas gerais é igual a qualquer outro objeto DataWindow. Exceto pelo fato de revelar os dados em forma de gráfico ao invés de apresentar os dados em forma de números. Para se criar um gráfico precisaremos entender alguns padrões. Em um gráfico existem as categorias, os valores e as séries. Onde : Categoria : Os dados independentes, tipo: meses, anos e bimestres. Valor : Os dados dependentes, esta informação normalmente sofre alteração por categoria, tipo : Vendas (por mês) , Vendas (por ano) e Vendas (por bimestre). Série : Os conjuntos de pontos de dados do gráfico. Para se criar um gráfico deve-se definir as categorias e os valores. As séries estarão presentes no gráfico de acordo com as categorias e os valores. Normalmente as categorias correspondem a uma coluna da tabela. Os valores também podem provir de uma coluna, mas normalmente provém de agregações, somatórias ou média de uma coluna. Criando um gráfico Clique em New selecione “DataWindow” e escolha o estilo “Graph” em “Choose Data Source for Graph DataWindow” selecione “Quick Select” e marque a caixa de seleção “Retrieve on Preview” e tecle “Next”. Na caixa de dialogo “Quick Select” selecione “employee”. No quadro “Columns” selecione “salary” e “sex” e clique em “Ok” Na caixa de dialogo “Define Graph Data” selecione para “Category”; “sex”. Para “Values”; “sum(salary for graph)” e para “Series”; “sex”. Clique em “Next”. Na caixa de dialogo “Define Graph Style” selecione “SolidBar” e clique em “Finish”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 13 198 Gráficos Então teremos: Com esta primeira visão podemos notar que praticamente o gráfico já está montado. Precisamos alterar algumas configurações para uma melhor precisão dos dados e compreensão do mesmo por qualquer pessoa que o analise. Para isto, existem as propriedades do objeto gráfico. São: Propriedade BackColor Border BorderStyle Tipo de dado Descrição Long Especifica o valor numérico da cor de fundo: -2 a 16,777,215 Border Especifica se o controle tem uma borda BorderStyle Especifica o estilo da borda do controle. (Descrita) Seus valores são: StyleBox! StyleLowered! StyleRaised! StyleShadowBox! PowerBuilder 9.0 Básico Capítulo 13 199 Gráficos Propriedade BringToTop Category CategorySort ClassDefinition Depth DragAuto DragIcon Elevation Enabled Tipo de dado Descrição Boolean Especifica se PowerBuilder 9.0 moverá o controle front-to-back na janela ou controle de DataWindow. grAxis Especifica as propriedades do eixo de categoria do gráfico. grSortType Especifica como as categorias são ordenadas. PowerObject Um objeto de tipo PowerObject que contém informação sobre a definição de classe do objeto ou controle. Integer Especifica o percentual de profundidade da largura do gráfico. Boolean Especifica se PowerBuilder porá o gráfico automaticamente em modo de arrastar e soltar. TRUE - Quando o controle é clicado ou, o controle está automaticamente dentro do modo arrastar e soltar. FALSE - Quando o controle é clicado, o controle não está automaticamente dentro do modo arrastar e solta. String Especifica o nome do ícone ou o arquivo que contêm o ícone que você quer exibir quando o usuário arrastar um controle . Integer Especifica o ângulo de elevação de frente para a parte de trás. Boolean Especifica se o controle é habilitado (pode ser selecionado).True : Habilitado / False : Não habilitado Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 13 200 Gráficos Propriedade GraphType Height Legend Legend DispAttr OverlapPercent Perspective PieDispAttr Pointer Tipo de dado Descrição grGraphType Especifica o tipo do gráfico, os valores são: (Decrita) Area3D! AreaGraph! Bar3DGraph! Bar3DObjGraph! BarGraph! BarStack3DObjGraph! BarStackGraph! Col3DGraph! Col3DObjGraph! ColGraph! ColStack3DObjGraph! ColStackGraph! Line3D!LineGraph! Pie3D! PieGraph! ScatterGraph! Integer Especifica a altura do controle, em unidades do PowerBuilder. grLegendType Especifica o alinhamento da legenda do (descrita) gráfico, os valores são: AtBottom! AtLeft! AtRight! AtTop!NoLegend! grDispAttr Especificam o estilo para o tipo de texto da legenda do gráfico, inclusive tamanho, cor, e rotação. Integer Especifica o percentual da largura dos marcadores de dados para séries diferentes em um gráfico. Integer Especifica a distância que o gráfico é da frente da janela. grDispAttr Especificam as propriedades do texto em gráfico de torta com label, inclusive tamanho, cor, e rotação. String Contém o nome do ponteiro ou o arquivo que contêm o ponteiro usado para o gráfico. PowerBuilder 9.0 Básico Capítulo 13 201 Gráficos Propriedade Rotation Series SeriesSort ShadeColor Spacing TabOrder Tag TextColor Title TitleDispAttr Values Visible Width X Y Tipo de dado Descrição Integer Especifica quanto girar o gráfico da esquerda para direita. grAxis Especifica as séries no gráfico. grSortType Especifica como as séries são ordenadas. Long Especifica a cor usada para o preenchimento no gráfico. Integer Especifica o espaço entre marcadores de dados no gráfico em percentual. Integer Especifica o valor do controle TAB na seqüência da tecla TAB. String Especifica o valor de etiqueta do controle. Long Especifica a cor a ser usada para o texto no controle. String Especifica o texto do título para o gráfico. grDispAttr Especificam o estilo para o texto na legenda do gráfico, inclusive estilo de texto, tamanho, cor e rotação. grAxis Especifica os valores do eixo de valor do gráfico. Boolean Especifica se o controle é visível. Se TRUE - Controle é visível. Se FALSE - Controle não é visível. Integer Especifica o modo de texto no controle; por exemplo, 400 para normal ou 700 para tipo negrito. Integer Especifica o posicionamento X (à distância da extremidade esquerda da janela principal), em unidades do PowerBuilder. Integer Especifica o posicionamento Y (à distância do topo da janela principal), em unidades do PowerBuilder. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 13 202 Gráficos Em todas as propriedades disponibilizadas pelo PowerBuilder 9.0, pode-se usar a notação por pontos através do PowerScript facilitando a interação com o usuário em tempo de execução. Exemplo: gr_1.BackColor = RGB(255, 255, 0) ou gr_1.Category.LabelDispAttr.BackColor = RGB(0, 128, 255) ou gr_1.Category.Label = "Tipos X Produtos" ou gr_1.Depth = 50 Alterando as propriedades do gráfico no painter DataWindow. No template “propriedade” à direita clique na aba “General”. Para saber cada propriedade consulte a tabela acima. Title : digite “Salário X Sexo”. Units : selecione PowerBuilder (0) Timer Interval : Selecione (0) Color : Selecione “Black” BackColor : Selecione “White” Name : o padrão sempre é gr_1. Depth : Não estará disponível. Elevation : Não estará disponível. PowerBuilder 9.0 Básico Capítulo 13 203 Gráficos No template “propriedade” à direita clique na aba “Axix”. Para saber cada propriedade consulte a tabela acima. Na propriedade “Axix” selecione “Category” em “Label”, digite “Sexo”. Na propriedade “Axix” selecione “Label” em “Label”, digite “Salário”. Na propriedade “Axix” selecione “Series” em “Label”, digite “Descrição”. Na propriedade “Scale” marque a caixa “AutoScale”. Então teremos : Clique em Save salve o modelo do gráfico como “d_grafico”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 13 204 Gráficos Explore as propriedades do objeto gráfico. Normalmente se aplica sua variação em tempo de execução. Os padrões 3D disponibilizam as propriedades “Perspective”, “Elevation” e “Rotation” que oferecem um bom recurso para visualização. Através das instruções de notação de ponto se pode disponibilizar suas definições para o usuário. Até aqui conceituamos funções, objetos e aplicamos suas funcionalidades. O mesmo será feito para o objeto gráfico. Para isto, utilizando o aprendizado até agora iremos alterar o projeto proposto. Adequando-o a novas inserções de objetos e funções. Edite a janela “w_000” altere a propriedade “Window Type” para “mdihelp!”. Salve a janela. Clique em New selecione “PB Object” e “Window”. O template para criação de um novo objeto Window aparecerá. Altere a propriedade “Window Type” para “child!”. Selecione a aba “Other” e altere a propriedade “Width” para o valor “3666” e “Height” para “2284”. Salve a janela como “w_003”. Clique em New selecione “PB Object” e “Menu”. O template para criação de um novo objeto menu se abrirá. Clique no item “untitle0” com o botão direito do mouse e selecione no menu-popup que se abrirá “Insert Submenu item”. Na propriedade “Text” digite “Gráfico”. Com um duplo clique no item “Gráfico” selecione o evento “Clicked” e escreva o código PowerScript: “OpenSheet(w_003, w_000, 2, Layered! )”. Salve como “m_menu02”. Edit a janela “w_000” no template propriedade substitua à propriedade “MenuName” pelo novo menu “m_menu02”. Salve a janela “w_000”. PowerBuilder 9.0 Básico Capítulo 13 205 Gráficos Incluindo o objeto gráfico na janela principal. Edite a janela “w_003” clique em “Select Control” e selecione “Create DataWindow control”. Clique na janela para incluir o objeto DataWindow. No template propriedade do controle DataWindow inclua na propriedade “DataObject” o objeto gráfico “d_gráfico”. Ajuste o controle DataWindow para que se visualize todo o objeto DataWindow. Então teremos: Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 13 206 Gráficos Habilitando a DataWindow. Clique em “Select Control” e selecione “Create CommandButton control”. Clique na janela para incluir o objeto CommandButton. No template propriedade na propriedade “Text” digite “Retrieve”. Dê um duplo clique no objeto CommandButton. Selecione o evento “Clicked” e digite: // Desconecta o DBMS Disconnect; // Aplica os parâmetros do DBMS de teste a transação SQLCA sqlca.dbms ="ODBC" sqlca.dbparm ="ConnectString='DSN=EAS Demo DB V9;UID=dba;PWD=sql'" // Conecta com o banco connect; //Testa a conexão If sqlca.sqlcode < 0 Then MessageBox ("Erro: Impossível conectar com o banco de dados", sqlca.sqlerrtext, Exclamation!) HALT End If dw_1.SetTransObject(SQLCA) dw_1.Retrieve() PowerBuilder 9.0 Básico Capítulo 13 207 Gráficos Clique em “Select Control” e selecione “Create CommandButton control”. Clique na janela para incluir o objeto CommandButton. No template propriedade na propriedade “Text” digite “Fechar”. Dê um duplo clique no objeto CommandButton selecione o evento “Clicked” e digite: // Desconecta do DBMS Disconnect; // Apaga todos os dados de um controle DataWindow dw_1.Reset() Clique em Save. Salve o modelo do gráfico. Então teremos : Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 13 208 Gráficos Em tempo de execução podemos alterar o modelo do gráfico. para tal usamos notação de pontos. Clique em DropDownListBox. Clique na janela para incluir o objeto DropDownListBox. No template propriedades à direita na propriedade “Text” digite; “4 Bar3Dobj”. Marque nas propriedades “VscrollBar”. “Visible”, “Enabled”, “AllowEdit” e No template propriedade selecione a aba “Items” e digite para cada linha da tabela disponibilizada as linhas abaixo: 1 — Area 2 — Bar 3 — Bar3D 4 — Bar3Dobj 5 — BarStacked 6 — BarStacked3Dobj 7 — Col 8 — Col3D 9 — Col3Dobj 10 — ColStacked 11 — ColStacked3Dobj 12 — Line 13 — Pie 14 — Scatter 15 — Area3D 16 — Line3D 17 — Pie3D Essa tabela, representa os tipos de gráficos disponíveis no PowerBuilder 9.0. Salve sua aplicação. Essa é uma forma de nunca perdermos um trabalho, a cada etapa ou de tempos em tempos no nosso trabalho, salve sua aplicação. PowerBuilder 9.0 Básico Capítulo 13 209 Gráficos Clique em HtrackBar e clique na janela para incluir o objeto HtrackBar. Inclua este objeto na parte superior do controle DataWindow. Repita a operação para a inclusão de mais um objeto HtrackBar. Posicione esse objeto na parte inferior do controle DataWindow. Clique em VtrackBar e clique na janela para incluir o objeto VtrackBar. Inclua este objeto na lateral direita do controle DataWindow. Então teremos: Agora para que os controles tenham sua funcionalidade iremos escrever através de notação de pontos, sua programação. OBS : Inclua quatro “StaticText”. No primeiro escreva; “Elevação”, no segundo; “Perspectiva” no terceiro; “Rotação” e no quarto; “Tipo do Gráfico” e distribua conforme a figura acima. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 13 210 Gráficos Selecione com um duplo clique o objeto “HtrackBar” definido como “htb_1” que será utilizado para “Elevação”. Selecione o evento “Moved” esse evento sempre será disparado se a barra do controle HtrackBar for movimentada. Escreva o código PowerScript : dw_1.Object.gr_1.Elevation = This.Position Selecione com um duplo clique o segundo objeto “HTrackBar” definido como “htb_2” que será utilizado para “Rotação”. Selecione o evento “Moved” esse evento sempre será disparado se a barra do controle HTrackBar for movimentada. Escreva o código PowerScript : dw_1.Object.gr_1.Rotation=This.Position Selecione com um duplo clique o terceiro objeto “VTrackBar” definido como “vtb_1” que será utilizado para “Perspectiva”. Selecione o evento “Moved” ess evento sempre será disparado se a barra do controle VTrackBar for movimentada. Escreva o código PowerScript : dw_1.Object.gr_1.Perspective = This.Position Selecione com um duplo clique a “DropDownListBox” definido como “ddlb_1”. Selecione o evento “selectionchanged” ess evento sempre será disparado quando o conteúdo da ddlb for alterado. Como resultado desta alteração a variável “index” será preenchida com a posição física da seleção formando assim um indexador. Como o texto na tabela segue uma numeração uniforme podemos utilizar o conteúdo da variável “index” como um parâmetro para seleção. Escreva o código PowerScript: integer l_index l_index = index dw_1.Object.gr_1.GraphType = l_index PowerBuilder 9.0 Básico Gráficos Salve a aplicação e execute. Então teremos: Adquirido por : Fabrício Moreira da Silva Capítulo 13 211 PowerBuilder 9.0 Básico Capítulo 13 212 Gráficos Para que as barras HtrackBar e VtrackBar tenham funcionalidade escolha na “DropDownListBox” um tipo de gráfico com padrão 3D. Tipo : Bar3D Agora movimente as barras e veja os efeitos que se pode proporcionar. Capítulo 14 XML Conceito Exportando DataWindow (DataWindow Export) Importando um padrão XML para a DataWindow Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 213 XML Conceito A XML (eXtensible Markup Language, ou Linguagem de Marcação Estendida) é um subconjunto da SGML (Standard Generalized Markup Language, ou Linguagem de Marcação Padrão Generalizada) que permite que uma marcação específica seja criada para especificar idéias e compartilhá-las na rede. Ela tem as virtudes da SGML e da HTML sem qualquer das limitações óbvias. Pontos fortes da XML Inteligência: a XML é inteligente para qualquer nível de complexidade. A marcação pode ser alterada de uma marcação mais geral como: <função> Desenvolvedor </função> para uma mais detalhista, como: <função> <Diretoria de Informática> <Informática> Desenvolvedor </Informática> </Diretoria de Informática> </função> As idéias são bem marcadas para que : <Informática> Desenvolvedor </Informática> e, <Jurídico> Adv. Junior </Jurídico> sejam sempre valores diferentes. A informação conhece a si mesma. Não é necessária mais nenhuma idéia indesejável; Manutenção: a XML é fácil de manutenção. Ela contém somente idéias e marcações. Folhas de estilos e links, vêm em separado, e não escondidas no documento. Cada um pode ser alterado separadamente quando preciso com fácil acesso e fáceis mudanças; PowerBuilder 9.0 Básico Capítulo 14 214 XML Ligação: a XML possui uma maneira de ligar que inclui todas as formas de ligação. Não só isso; ela liga de maneira que a HTML não pode. A HTML pode fazer de uma maneira simples, onde um objeto se liga a outro. A XML faz isso, mas também pode ligar dois ou mais pontos a uma idéia. Existem ainda links gêmeos que ligam todas as idéias dentro de uma mesma. Qualquer link entre uma idéia pode ser manipulado de uma única maneira; Portabilidade: a XML é de fácil portabilidade. A razão da sua existência é força e portabilidade. A SGML tem força. A HTML tem portabilidade. A XML têm ambas. A XML pode ser navegada com ou sem o seu DTD (Document Type Definition, ou Definição de Tipo de Documento - as normas que definem como as tags são estruturas nos documentos XML), tornando o download mais rápido. Tudo que um navegador precisa para ver XML é ter a noção que ela própria e a folha de estilos, controlam a aparência. Se uma validação restrita é necessária, o seu DTD pode acompanhá-lo e fornecer detalhes exatos da sua marcação. Como a XML é definida A XML é definida pelas seguintes especificações: Extensible Markup Language (XML) 1.0: define a sintaxe da XML; XML Pointer Language (XPointer) e XML Linking Language (XLink): define um padrão para representar os links entre os recursos. Além dos links simples, como a tag <A> da HTML, a XML possui mecanismos para ligar recursos múltiplos e diferentes. A XPointer descreve como endereçar um recurso, e a XLink descreve como associar dois ou mais recursos; Extensible Style Language (XSL): define a linguagem de folhas de estilos padrão para a XML. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 215 XML Uma DTD (Document Type Definition) pode ser definida como um conjunto de regras que define quais tipos de dados e entidades fará parte de um documento XML. Estas regras serão utilizadas para que o analisador sintático verifique se o documento está correto ou não. A DTD pode estar definida dentro do próprio arquivo XML ou em um arquivo à parte com extensão .dtd, que deve ser incluído no código XML. A DTD pode ser usada para padronizar um documento XML e torná-lo bastante coerente com as necessidades do desenvolvedor, porém sua criação não é obrigatória. DTDs Externas: Quando temos um documento XML muito extenso, é melhor utilizarmos um DTD externo, o que traz boa qualidade com super organização dos dados. DTDs Internas: A DTD interna é melhor trabalharmos quando usamos pequenos documentos XML. Como criar uma DTD Para criarmos um arquivo DTD devemos analisar vários aspectos como por exemplo: Tipos de dados que o arquivo XML irá conter etc. Criando uma DTD Interna. Abaixo esta uma pequena demonstração de dados de uma DTD interna. <?xml version='1.0' encoding="iso-8859-1" ?> <! DOCTYPE NOTA [ <! ELEMENT NOTA (PARA,DE,ASSUNTO) <! ELEMENT PARA (#PCDATA)> <! ELEMENT DE (#PCDATA)> <! ELEMENT ASSUNTO (#PCDATA)> <! ENTITY NOME "JOSÉ DA SILVA"> ]> <NOTA> <PARA>PEDRO XAVIER</PARA> <DE>&NOME;</DE> <ASSUNTO>HORARIO DA REUNIÃO</ASSUNTO> </NOTA> PowerBuilder 9.0 Básico Capítulo 14 216 XML Onde : <!DOCTYPE NOTA [ Esta linha diz que tudo o que estiver entre os colchetes será o DTD de um documento cujo elemento raiz é <NOTA>. Como mencionado anteriormente, o elemento raiz contém todos os outros. <! ELEMENT NOTA (PARA,DE,ASSUNTO) Isto define a tag <NOTA>. Os parênteses dizem que estes dois outros conjuntos de tags devem aparecer dentro das tags <NOTA>, naquela ordem específica. <! ELEMENT PARA (#PCDATA)> #PCDATA, significa Parsed Character Data ou dados de caractere analisados (isto é, qualquer coisa que não seja dados binários, como uma imagem). Neste caso, o #PCDATA será texto por exemplo, "PEDRO". Criando uma DTD Externa. O Código desta demonstração será o mesmo do que da DTD interna acima somente iremos dividir o DTD e XML em dois arquivos com as extensões .xml e .dtd. Abaixo o arquivo .xml <?xml version='1.0' encoding="iso-8859-1" ?> <! DOCTYPE NOTA SYSTEM "dtdexterna.dtd"> <NOTA> <PARA>PEDRO</PARA> <DE>&NOME;</DE> <ASSUNTO>CARTA DO USUARIO</ASSUNTO> </NOTA> Note que no arquivo .xml, adicionamos uma linha para chamar o arquivo .dtd Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 217 XML Agora abaixo o arquivo .dtd <?xml version='1.0' encoding="iso-8859-1" ?> <! ELEMENT NOTA (PARA,DE,ASSUNTO) <! ELEMENT PARA (#PCDATA)> <! ELEMENT DE (#PCDATA)> <! ELEMENT ASSUNTO (#PCDATA)> <! ENTITY NOME "JOSE DA SILVA"> Validação Existem duas categorias de documentos XML: bem formatados e válidos. Documentos Bem Formatados Um documento somente pode ser bem formatado se ele obedece à sintaxe da XML. Um documento que inclui seqüências de caracteres de marcação que não podem ser analisadas ou são inválidas não podem ser bem formatados. Além disso, o documento deve atender a todas as seguintes condições (subentendendo-se que algumas destas condições podem exigir experiência com SGML): !" A instância do documento deve estar conforme a gramática dos documentos XML. Em particular, algumas construções de marcações (referências a entidades parâmetro, por exemplo) são somente permitidas em locais específicos. O documento não é bem formatado se tais ocorrerem em outros locais, ainda que o documento esteja bem formatado nos outros casos. !" O texto de substituição para todas as entidades parâmetro referenciadas dentro de uma declaração de marcação consiste em zero ou mais declarações de marcações completas. (Nenhuma entidade usada no documento pode consistir de somente uma parte de uma declaração de marcação.) !" Nenhum atributo pode aparecer mais do que uma vez na mesma marca de início. !" Valores de atributos cadeias de caracteres não podem conter referências a entidades externas. !" Marcas não-vazias devem ser apropriadamente aninhadas. PowerBuilder 9.0 Básico Capítulo 14 218 XML !" Entidades parâmetro devem ser declaradas antes de serem usadas. !" Todas as entidades devem ser declaradas, exceto as seguintes: amp, lt, gt, apos e quot. !" Uma entidade binária não pode ser referenciada no fluxo do conteúdo; ela pode ser usada somente em um atributo declarado como ENTITY ou ENTITIES. Documentos Um documento bem formatado é válido somente se ele contém uma declaração de tipo de documento e se o documento obedece às restrições da declaração. Documentos com DTD Definição Na XML as regras que definem um documento são ditadas por DTDs (Document Type Definitions), as quais ajudam a validar os dados quando a aplicação que os recebe não possui internamente uma descrição do dado que está recebendo. Mas os DTDs são opcionais e os dados enviados com um DTD são conhecidos como dados XML válidos. Um analisador de documentos pode checar os dados que chegam analisando as regras contidas no DTD para ter certeza de que o dado foi estruturado corretamente. Os dados enviados sem DTD são conhecidos como dados bem formatados. Nesse caso, o documento pode ser usado para implicitamente se autodescrever. Com os dados XML válidos e com os bem-formatados, o documento XML se torna autodescritivo porque as tags dão idéia de conteúdo e estão misturadas com os dados. Devido ao formato do documento ser aberto e flexível, ele pode ser usado em qualquer lugar onde a troca ou transferência de informação é necessária. Desta forma, podemos usar o XML para descrever informações sobre páginas HTML, ou descrever dados contidos em objetos ou regras de negócios, ou transações eletrônicas comerciais. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 219 XML O XML pode ser inserido dentro de documentos HTML, o que foi definido pelo W3C como "data-islands". Esse recurso permite que um documento HTML possa ter múltiplas formas de visualização quando se faz uso da informação de semântica contida no XML. O que define formalmente quais elementos e quais combinações possíveis é permitida dentro de um documento XML é o "schema", ou seja, esquema. Existem novos esquemas propostos ao W3C, dentre eles estão o DCD (Document Content Description), que provêm à mesma funcionalidade dos DTDs, e que, pelo fato de linguagens esquema serem extensíveis, os desenvolvedores podem aumentá-los com informações adicionais, tais como regras de apresentação, tornando essas novas linguagens esquema mais poderosas que os DTDs. Resumo As DTDs são formas de se descrever classes de documentos XML (como gramáticas para outras linguagens). Problemas com DTDs: !" !" se muito simples não tem poder expressivo de descrição. se for muito complexa terá uma sintaxe horrível. A solução para as DTDs: usar linguagens de esquemas (schema languages) tais como DSD,XML Schema, etc… Os documentos, para serem validados, têm que ser bem formatados e também estarem em conformidade com a DTD dada. PowerBuilder 9.0 Básico Capítulo 14 220 XML XML é case sensitive. XML é case sensitive <MinhaTag> é diferente de </ Minhatag>, pertence a dois elementos diferentes. Nulo ou Branco. Colunas com branco ou nulo devem ser representadas, a XML não interpreta estes tipos de dados, se uma coluna não contém dados deve ser representada por; <dado></dado> ou <dado/>, onde a tag dado não disponibiliza um conteúdo. Após conceituarmos a XML, aplicaremos este conceito ao PowerBuilder 9.0, utilizando as novas propriedades de importação e exportação de dados de uma DataWindow para XML. As linhas de uma DataWindow podem ser exportadas e importadas utilizando eXtensible Markup Language (XML), neste capitulo vamos abordar a exportação e importação de dados utilizando XML. O exemplo abaixo, é um XML simplificado que contém a declaração do documento XML, seguida pela TAG que descreve o elemento denominado raiz, <d_dept_list>, a definição da linha <d_dept_list_row>, a definição da coluna <dept_id>, <dept_name> e <dept_head_id>, os dados e a tag de finalização de cada coluna </dept_id>, </dept_name> e </dept_head_id>. Finalizando o bloco </d_dept_list_row>. Teremos : <?xml version="1.0"> <d_dept_list> <d_dept_list_row> <dept_id>100</dept_id> <dept_name>R &D</dept_name> <dept_head_id>501</dept_head_id> </d_dept_list_row> ... </d_dept_list> Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico XML Modelo XML DOM em árvore. <?xml version=“1.0” encoding=“UTF-8”?> <!DOCTYPE menu SYSTEM menu.dtd> <menu> <refeição nome=“Café da manhã”> <descrição> Ovos mexidos </descrição> <descrição> Queijo quente </descrição> <bebidas> Suco de laranja </bebidas> </refeição> <refeição nome=“lanche”> <descrição> Frios fatiados </descrição> </refeição> </menu> Capítulo 14 221 PowerBuilder 9.0 Básico Capítulo 14 222 XML A partir da versão 9.0 do PowerBuilder, foram incorporadas novas características para XML, como exportação e importação de DataWindow / DataStores. A essas novas características se denominou “Serviços de XML Nativos” e “XML Parser interface”. Exportando DataWindow (DataWindow Export) DataWindow Export, é um componente novo da DataWindow, possibilita exportar linhas da DataWindow em uma estrutura de dados padrão XML. O modelo de exportação de uma DataWindow mapeia os elementos da DataWindow ao gerar o XML correspondente. Os seguintes objetos de uma DataWindow podem ser usados em modelos de exportação. • • • • • Column Computed Column Text Control Computed Field Nested Report Um template de exportação é uma parte da definição da DataWindow. Uma DataWindow pode conter vários template de exportação. São permitidos template em formato PBL e SRD de uma DataWindow. A propriedade DataWindow , “Export.XML.UseTemplate”, é usada para especificar um objeto (template) para uso em uma determinada operação de exportação. Esta propriedade pode ser fixada em runtime e designtime. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 XML Exemplo de um template de exportação XML. export.xml( usetemplate="t_lista01" metadatatype=2 savemetadata=1 template=( comment="Lista de funcionários saída DTD" name="t_lista01" publicid="c:\dwxml\lista01.dtd" xml="<?xml version=~"1.0~" encoding=~"UTF-8~" standalone=~"no~"?> <!DOCTYPE Lista> <Orders><!-- ....... --></Orders>" ) ) Exemplo de exportação utilizando a interface gráfica. 223 PowerBuilder 9.0 Básico Capítulo 14 224 XML Na painter DataWindow do PowerBuilder 9.0 foi incluído um novo template, onde se permite; definir, editar e exportar a DataWindow em um padrão XML. Este template, visualizado em modo default do layout do painter DataWindow, se localiza na parte inferior à esquerda e se intitula “ Export / Import Template XML ”. A visão deste novo template no painter DataWindow caracteriza-se por um controle TreeView representando a estrutura XML. Nesta estrutura fica explicito; as Entidades, os Marcadores e os Dados. Diferentes ícones e fontes diferem os tipos de dados e seus elementos. Apenas um modelo de exportação pode ser editado. Ícones usados no template de Export/Import. Ícone Descrição Declaração de XML ou declaração de tipo de documento. Raiz ou elemento descendente. Elemento do Group header. Referência da coluna da DataWindow. Referência de controle Static text. Referência Computed field. Referência de expressão DataWindow. Texto. Comentário Instrução de processamento Seção CDATA Nested report Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 225 XML Explorando o template “Export / Import Template - XML” Clique com o botão direito do mouse em qualquer área de fundo do template para ter acesso ao menu popup de edição do template. Item New New Default Open Save Save As Delete Descrição Cria um modelo novo de XML com a raiz e elementos de linha de detalhe vazio. Cria um modelo novo de XML com a raiz e elementos de linhas de detalhes para cada elemento mapeado, colunas e campos computados. Abre um modelo de XML previamente salvo Salva o modelo de XML atual atribuindo-lhe um nome. Se o modelo atual é um template novo, uma caixa de dialogo será exibida, solicitando um nome e comentários "opcional". Salva o modelo de XML atual como uma cópia debaixo de um novo nome, será aberta uma caixa de dialogo solicitando um nome e comentários "opcional". Apaga o modelo de XML atual. Uma caixa de dialogo solicitando confirmação será exibida antes desta ação, permitindo o usuário cancelar ou não. A seleção no menu popup do item “Delete” apaga o template atual, para apagar itens do template, simplesmente o marque e pressione a tecla “Del”. PowerBuilder 9.0 Básico Capítulo 14 226 XML Pressionando o botão direito do mouse em cima de qualquer elemento do template, disponibilizará o menu popup correspondente, por exemplo : Clicando-se na “Declaração de XML ou declaração de tipo de documento”, teremos : Item Edit Delete Descrição Exibe uma caixa de diálogo para edição da versão da XML, disponibiliza codificar se haverá remarcações externas no documento standalone = Yes, caso contrário standalone = No (default) Apaga a declaração de XML Pressionando o botão direito do mouse em cima da “Referência da coluna da DataWindow” disponibilizará o menu popup com as opções : Item Edit Insert Before Delete Descrição Exiba caixa de diálogo de edição do nome do DOCTYPE e seu identificador. abre o menu popup tipo cascata listando todos os modos disponíveis para construção do contexto da XML. Apaga a declaração contexto do Documento O menu popup para uma “Raiz ou elemento descendente”, exibe : Item Edit Edit/Add Attribute Add Child Descrição Permite adicionar um rótulo à raiz ou elemento descendente. Se a raiz ou elemento descendente tem um ou mais atributos, selecione Edit para habilitar a caixa de diálogo para editar o nome da raiz ou elemento descendente ou acrescentar um atributo. Abre a caixa de diálogo para editar o nome da raiz ou elemento descendente permitindo a definição de um atributo. abre o menu popup tipo cascata listando todos os modos disponíveis que podem ser adicionados a uma raiz ou elemento descendente de um XML. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 227 XML Insert Before Schema Option abre o menu popup tipo cascata listando todos os modos disponíveis que podem ser adicionados antes da definição de uma raiz ou elemento descendente. Abre uma caixa de diálogo para editar o nome da raiz do documento gerado no esquema da XML Template Export - Detalhes Descrição : Seção de detalhe : Esta seção é separada graficamente por uma barra cinza separando a seção de cabeçalho da seção de detalhe. Esta marcação poderá ser alterada pelo desenvolvedor através da opção “Starts Detail” no menu popup dos elementos da árvore de dados. Só um elemento pode ser marcado como elemento de “Inicio de detalhe” (Starts Detail). PowerBuilder 9.0 Básico Capítulo 14 228 XML Exportando uma DataWindow. Pode-se exportar uma DataWindow utilizando a mesma função utilizada para exportar para HTML ou PSR, a função “SaveAs” ; dw_1.SaveAs( "c:\minha_aplicação\d_lista01.xml", XML!, TRUE ) Assim como notação de pontos; dw_sua_datawindow.object.datawindow.data.xml Ou a função Describe; dw_sua_datawindow.Describe( "datawindow.data.xml" ) O PowerBuilder 9.0 disponibiliza em suas novas propriedades para exportação XML funções que permitem ajustes de seleção de modos, tanto em “Design Time” quanto em “RunTime”, São elas: Sintaxe : Export.XML.UseTemplate – Utilizada para informar o modelo que será usado para exportação. Esse modelo deverá estar criado. Onde: valor = Uma string que especifica o nome do template xml de exportação previamente criado no painter do objeto DataWindow. PowerScript; dw_sua_datawindow.Object.DataWindow.Export.XML.UseTemplate = "valor" Modify; dw_sua_datawindow.Modify( "DataWindow.Export.XML.UseTemplate {= ’ valor ’}" ) Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 229 XML Sintaxe: Export.XML.MetaDataType - É usado para especificar que “metadato” será associado ao XML gerado na exportação da DataWindow. Essa propriedade pode ser utilizada em “DesignTime” ou em “RunTime”. valor = Uma string que especifica um valor para Onde: Export.XML.MetaDataType, dado descrito ou codificado.(veja a tabela abaixo para os valores possíveis para a utilização da sintaxe de exportação). dw_sua_datawindow.Object.DataWindow.Export.XML.MetaDataType = "valor" Modify; dw_sua_datawindow.Modify( "DataWindow.Export.XML.MetaDataType {= ’ valor’}" ) Sintaxe : Export.XML.SaveMetaData - É usado para especificar o “metadado” que será gerado em tempo de execução (RunTime) ou em tempo de desenho (Design Time). Onde valor = Uma string que especifica um valor para Export.XML. SaveMetaData, dado descrito ou codificado. PowerScript; dw_sua_datawindow.Object.DataWindow.Export.XML.SaveMetaData = " valor " Modify; dw_sua_datawindow.Modify( "DataWindow.Export.XML.SaveMetaData {= ’ valor}" ) PowerBuilder 9.0 Básico Capítulo 14 230 XML Sintaxe : Export.XML.HeadGroups - É usado para especificar como serão geradas as linhas de cabeçalho do XML, em tempo de desenho (DisignTime), selecione na tabela de propriedades (Data Export) o item “Interate Header for Group”, aplicando-se expressões condicionais. Em tempo de execução (RunTime) usa-se a sintaxe : Onde: valor = Pode assumir, “Yes”, “No”, “TRUE”, “FALSE”, “O” ou “1” dw_sua_datawindow.Object.DataWindow.Export.XML.HeadGroups = "valor" Modify; dw_sua_datawindow.Modify( "DataWindow.Export.XML.HeadGroups {= ’valor’}" ) Sintaxe : Export.XML.IncludeWhiteSpace - É usada para especificar se espaço em branco deve ser preservado no XML gerado. Essa propriedade pode ser selecionada em Tempo de desenho (DesignTime) selecionando na tabela de propriedades (Data Export) o item “Include WhiteSpace” aplicandose expressões condicionais. Ou em Tempo de execução (RunTime) usa-se a sintaxe : Onde: valor = Pode assumir, “Yes”, “No”, “TRUE”, “FALSE”, “O” ou “1” PowerScript; dw_sua_datawindow.Object.DataWindow.Export.XML.IncludeWhiteSp ace = "valor" Modify; dw_sua_datawindow.Modify( "DataWindow.Export.XML.IncludeWhiteSpace {= ’valor’}" ) Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 231 XML Os valores possíveis para a utilização da sintaxe de exportação são : Valor descrito XMLNone! Valor numérico 0 XMLSchema! 1 XMLDTD! 2 MetaDataInternal! 0 MetaDataExternal! 1 Descrição O esquema do XML ou DTD, não serão gerados na exportação do documento XML . O esquema do XML será gerado junto com a produção documento de XML. DTD será gerado junto com a produção documento de XML. O metadato será gerado na seção de DOCTYPE no momento da geração do XML. O metadado será salvo como um arquivo externo com o mesmo nome do documento de XML, com a extensão ". dtd" (para XMLDTD! ). A produção do documento XML incluirá um DOCTYPE se referenciando para o arquivo de metadata. PowerBuilder 9.0 Básico Capítulo 14 232 XML Visão da propriedade de exportação do template DataWindow XML. Modificando e testando cada propriedade. Veja a seguir os resultados obtidos. Adquirido por : Fabrício Moreira da Silva Capítulo 14 PowerBuilder 9.0 Básico XML Exemplo 1. Template Meta Data Type Save Meta Data Type Include White Space Head Group Resultado exemplo 1: : : : : : t_lista01 XMLNone! MetaDataInternal! Marcado Não marcado 233 Capítulo 14 PowerBuilder 9.0 Básico XML Exemplo 2: Template Meta Data Type Save Meta Data Type Include White Space Head Group : : : : : t_lista01 XMLDTD! MetaDataInternal! Marcado Não marcado Resultado exemplo 2: Adquirido por : Fabrício Moreira da Silva 234 Capítulo 14 PowerBuilder 9.0 Básico XML Exemplo 3: Template Meta Data Type Save Meta Data Type Include White Space Head Group : : : : : t_lista01 XMLSchema! MetaDataExternal! Marcado Não marcado Resultado exemplo 3: Conteúdo do arquivo exportado exemplo3.xml 235 PowerBuilder 9.0 Básico XML Conteúdo do arquivo exportado exemplo3.xsd Adquirido por : Fabrício Moreira da Silva Capítulo 14 236 Capítulo 14 PowerBuilder 9.0 Básico XML Exemplo 4: Template Meta Data Type Save Meta Data Type Include White Space Head Group Resultado exemplo 4: : : : : : t_lista01 XMLSchema! MetaDataExternal! Marcado Não marcado 237 PowerBuilder 9.0 Básico XML Conteúdo do arquivo exportado exemplo4.xsd Adquirido por : Fabrício Moreira da Silva Capítulo 14 238 PowerBuilder 9.0 Básico Capítulo 14 239 XML Importando um padrão XML para a DataWindow. Você pode importar o conteúdo de um documento XML para uma DataWindow ou DataStore usando técnicas semelhantes usadas para importar outros formatos de dados estruturados. !" !" !" !" Para isto o template XML deverá existir. modelo do template deve ser bem formatado. Composite, Gráfico, objetos OLE DataWindow Composite, Gráfico e OLE não podem ser importados usando um template. Você tem que usar o formato default. As declarações abaixo são equivalentes. Ambas importarão os conteúdos do arquivo padrão XML de nome exemplo1.xml. dw_1.ImportFile(exemplo1.xml) dw_1.ImportFile(XML!, exemplo1) Visão da propriedade de importação do template DataWindow XML. PowerBuilder 9.0 Básico Capítulo 14 240 XML Quando você importa dados de um arquivo XML com ou sem um modelo, você pode criar um arquivo de “log” para verificar se o processo de importação executou a contento. O conteúdo deste arquivo mostra o que foi importado; como o modelo, os elementos e as linhas. Para criar esta “log”, basta selecionar a opção do template de importação “Trace XML Import” e em “Trace File Name” definir o caminho e o nome do arquivo que receberá as informações. Tipo: C:\LOGS\TRACE01.LOG. Modelo de um arquivo “Tracer log”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 241 XML Nesse capítulo, mudou-se a forma de apresentação, devido a aparente complexidade desta nova funcionalidade, a de Exportação e Importação de dados em padrão XML do PowerBuilder 9.0, mas como foi visto, o PowerBuilder 9.0, minimiza em muito desenvolvimento desta tarefa. Aplicações clientes bem como aplicações com componentes de servidor ganharam características mais robustas que permitem uma melhor inteligibilidade com outras aplicações e componentes. Para uma melhor fixação dos conceitos até agora vistos, realizaremos um pequeno modelo demonstrando os conceitos vistos. Em nossa aplicação exemplo denominada exemplo1. Edite a DataWindow d_lista01. Então teremos: PowerBuilder 9.0 Básico Capítulo 14 242 XML No template “Export / Import Template - XML” clique na área em branco com o botão direito do mouse e selecione no menu popup que surgirá, a opção Save. Na caixa de dialogo que se abrirá. Digite um nome para este template XML. Digite t_lista01 clique em “Ok”. O template XML denominado “t_lista01” foi criado. Agora edite o objeto menu denominado “m_menu02”. Clique com o botão direito do mouse no item “m_menu02” do template de edição do menu e selecione no menu popup que se abrirá “Insert Submenu Item”. No novo item que se disponibilizará. Digite “XML” e tecle “Enter”. Selecione com um duplo clique o item “XML” disponibilizando assim o template de eventos para este item do “m_menu02”. Selecione o evento “Clicked”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 243 XML Digite no evento “Clicked”: OpenSheet(w_004,w_000, 2, Layered! ) Clique em New e selecione “PB Object” e “Window”. No painter de edição da Window no template "Propriedades" à direita. Selecione “Other”. Na propriedade “Width” escreva “3666” e em “Height” escreva “2284”. Clique em “Select Control” e selecione o objeto DataWindow. Clique na janela que acabou de criar e inclua o objeto DataWindow. No template propriedade do objeto DataWindow que acabou de incluir defina: Name DataObject Title : dw_1 : d_lista01 : Janela 04 – XML PowerBuilder 9.0 Básico Capítulo 14 244 XML Selecione a aba “Other” e defina: Salve a nova janela como w_004. Volte ao painter de edição do menu e salve o menu “m_menu02”. Até este ponto; criamos um novo item para o menu(m_menu02) e uma nova janela com um novo objeto DataWindow associado ao controle DataWindow d_lista01. Agora vamos montar a Exportação e a Importação dos dados da DataWindow para o padrão XML. Clique em “Select Control” e selecione o objeto CommandButton. Clique na janela que acabou de criar e inclua o objeto CommandButton. Com o mouse em cima do botão clique com o botão direito do mouse e no menu popup que aparecerá selecione “Duplicate”. Repita esta operação 3 vezes. Assim teremos 4 Objetos CommandButton na janela w_004. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 245 XML Com um duplo clique no primeiro botão selecione o evento “Clicked”. Digite : dw_1.Object.DataWindow.Export.XML.HeadGroups = "No" dw_1.Object.DataWindow.Export.XML.IncludeWhitespace = "Yes" dw_1.SaveAs( "c:\exemplo1.xml", XML!, TRUE ) Com um duplo clique no segundo botão selecione o evento “ Clicked”. Digite : dw_1.Object.DataWindow.Export.XML.HeadGroups = "No" dw_1.Object.DataWindow.Export.XML.IncludeWhitespace = "Yes" dw_1.Modify("DataWindow.Export.XML.UseTemplate = 't_schema'") dw_1.Modify("DataWindow.Export.XML.MetaDataType = 2") dw_1.Modify("DataWindow.Export.XML.SaveMetaData = 2") dw_1.SaveAs( "c:\exemplo2.xml", XML!, FALSE ) PowerBuilder 9.0 Básico Capítulo 14 246 XML Com um duplo clique no terceiro botão selecione o evento “Clicked”. Digite : dw_1.Object.DataWindow.Export.XML.HeadGroups = "No" dw_1.Object.DataWindow.Export.XML.IncludeWhitespace = "Yes" dw_1.Modify("DataWindow.Export.XML.UseTemplate = 't_schema'") dw_1.Modify("DataWindow.Export.XML.MetaDataType = 1") dw_1.Modify("DataWindow.Export.XML.SaveMetaData = 1") dw_1.SaveAs( "c:\exemplo3.xml", XML!, FALSE ) Com um duplo clique no quarto botão selecione o evento “Clicked”. Digite : dw_1.Object.DataWindow.Export.XML.HeadGroups = "Yes" dw_1.Object.DataWindow.Export.XML.IncludeWhitespace = "Yes" dw_1.Modify("DataWindow.Export.XML.UseTemplate = 't_schema'") dw_1.Modify("DataWindow.Export.XML.MetaDataType = 1") dw_1.Modify("DataWindow.Export.XML.SaveMetaData = 1") dw_1.Modify("Export.XML.SaveMetaData = MetaDataExternal!") dw_1.SaveAs( "c:\exemplo4.xml", XML!, FALSE ) Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 14 247 XML Clique na janela w_004 e selecione o evento “OPEN”. Digite : // Desconecta o DBMS Disconnect; // Aplica os parametros do DBMS de teste à transação SQLCA sqlca.dbms ="ODBC" sqlca.dbparm ="ConnectString='DSN=EASDemoDB V9;UID=dba;PWD=sql'" // Conecta com o banco connect; //Testa a conexão If sqlca.sqlcode < 0 Then MessageBox ("Erro: Impossivel conectar com o banco de dados", sqlca.sqlerrtext, Exclamation!) HALT End If dw_1.SetTransObject(SQLCA) dw_1.Retrieve() PowerBuilder 9.0 Básico Capítulo 14 248 XML Salve a janela w_004. Teremos: Execute a aplicação. Clique nos botões para gerar os arquivos. Edite os arquivos gerados e analise. Adquirido por : Fabrício Moreira da Silva Capítulo 15 Preparando sua aplicação final Criando o objeto “Project” Criando o arquivo executável PowerBuilder 9.0 Básico Capítulo 15 249 Criando o objeto “Project” O PowerBuilder 9.0 disponibiliza um “Wizard” para criação do executável da sua aplicação. Você pode gerar dois tipos de executável: PseudoCódigo ou Código de máquina. (só na versão Enterprise) Código de máquina (machine code) : Esta opção poderá ser selecionada no template de geração do executável. Se em sua aplicação, você utilizou a expressão Try-Catch não utilize como opção o código de máquina. Essa seleção lhe retornará um erro de compilação. Se a sua aplicação precisa de velocidade de processamento o código de máquina é uma boa opção embora o tempo de compilação seja muito maior. Se sua aplicação não necessita de uma grande velocidade de processamento o mais aconselhável é a compilação em Pcode, é mais rápida a compilação e consome menos memória em tempo de execução pôs os objetos não estarão todos na memória e sim só os objetos necessários para o processamento naquele momento. Bibliotecas dinâmicas: Você pode criar também bibliotecas dinâmicas para sua aplicação. Podem ser usadas bibliotecas dinâmicas para armazenar os objetos da aplicação. Usando bibliotecas dinâmicas você pode quebrar a aplicação em unidades menores que são mais fácil de administrar e também reduzir o tamanho do arquivo executável. Para aplicações de pequeno porte você não precisa utilizar bibliotecas dinâmicas. Para se criar um objeto “Project” clique em “New” e selecione “Project”. Na caixa de dialogo que aparecerá selecione “Application Wizard” e clique em “Ok”. Na caixa de dialogo “About Application Wizard” clique em “Next”. Na caixa de dialogo “Specify Destination Library” selecione a biblioteca a qual o objeto “Project” será incluído. No nosso caso selecione “exemplo1.pbl”. Na caixa de dialogo “Specify Project Object” dê um nome ao seu objeto ou assuma o que o PowerBuilder gerar. Clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 15 250 Criando o objeto “Project” Na caixa de dialogo “Specify Executable and Resurce Files” especifique o caminho a qual será gravado o arquivo “.exe” e o seu nome, no caso do exemplo seria : C:\Manual PB\exemplo1.exe Neste caso o arquivo de recursos “.pbr” não existe. Então deixe em branco e clique em “Next”. Na caixa de dialogo “Specify Build Option” serão disponibilizados quatro opções: “Prompt for Overwrite” – Abre uma tela de dialogo perguntando se regrava o arquivo se este já existir. “New Visual Style Controls” – Ativa o estilo de exibição para o modelo Windows XP. Só terá funcionalidade se você utiliza o MS Windows XP. PowerBuilder 9.0 Básico Capítulo 15 251 Criando o objeto “Project” “Full Build” – Verifica e pré-compila toda a aplicação “Incremental Build” – Verifica e pré-compila só as pbl´s que sofreram alteração. Para o nosso exemplo marque as opções conforme a figura acima. Clique em “Next”. Na caixa de dialogo “Generate Machine Code” você poderá escolher que tipo de compilação deseja realizar. Para o nossa exemplo selecione a primeira opção conforme a figura abaixo. Clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 15 252 Criando o objeto “Project” Na caixa de dialogo “Specify Dynamic Options” selecione a opção disponibilizada se você deseja criar bibliotecas dinamicas ou deixe desmarcado se você só quiser gerar um arquivo do tipo “.exe”. Para o nosso exemplo marque a opção. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 15 253 Criando o objeto “Project” Na caixa de dialogo “Specify Version Information” os campos disponibilizados já estarão previamente preenchidos, mas você poderá alterar estas informações para melhor compor o seu projeto. Clique em “Next”. Na caixa de dialogo “Ready to Create Application” clique em “Finish”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 15 254 Criando o objeto “Project” Então teremos: O seu objeto “Project” já esta configurado e pronto para compilar a sua aplicação. Clique em Deploy para compilar. Note que ao final, foram gerados os arquivos exemplo1.exe e o arquivo exemplo1.pbd. Faça um teste gerando seu executável em código de máquina. Assinale “Machine Code” e clique em Deploy. Compare os arquivos. PowerBuilder 9.0 Básico Capítulo 15 255 Criando o objeto “Project” Os arquivos da primeira compilação têm um “.exe” reduzido e uma biblioteca “.pbd” maior. Já o arquivo gerado na segunda compilação (machine code) tem um tamanho maior para o “.exe” e para a “.dll” gerada. Além de a compilação demorar um pouco mais. Adquirido por : Fabrício Moreira da Silva Capítulo 16 Criando uma aplicação WEB Criando um sítio WEB com PowerDynamo PowerBuilder 9.0 Básico Capítulo 16 256 Criando um sítio WEB com PowerDynamo Os capítulos a seguir descrevem as funcionalidades do PowerBuilder 9.0 voltado para a WEB. Para estas funcionalidades alguns softwares da Sybase deverão estar instalados. São : !" PowerDynamo 3.6 ou maior !" Internet Explorer 6.0 ou maior Embora você possa executar o PowerDynamo em baixo do EAServer esse e-book estará se referenciando ao PowerDynamo Personal Web Server. Um sítio Web com PowerDynamo são arquivos ou repositórios de banco de dados onde você pode; criar, armazenar e administrar o acesso de documentos HTML e de dados. O PowerDynamo permite embutir instruções de server-side em uma página Web. Possibilitando o processamento destas instruções quando uma chamada cliente é efetuada na página. O PowerDynamo é um servidor de aplicação que gera conteúdo de Web dinâmico. Possibilita recuperar informações de seus bancos de dados retornando os resultados para o servidor Web. O PowerDynamo também disponibiliza um servidor da Web Pessoal (PowerDynamo Personal Web Server) para uso durante o desenvolvimento. Para se desenvolver em PowerDynamo deve-se como em todo servidor de aplicação definir suas configurações. O PowerBuilder 9.0 disponibiliza um Wizard bem simples para esse processo onde automaticamente se poderá mapear todos os objetos utilizados em sua aplicação WEB. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 16 257 Criando um sítio WEB com PowerDynamo Utilizando passo a passo o Wizard do PowerBuilder 9.0 criaremos um sítio WEB com PowerDynamo. Clique em New e selecione “Target”. Selecione “PowerDynamo Web Site” e clique em “Next”. Na caixa de dialogo “Why PowerDynamo?” clique em “Next”. Na caixa de dialogo “Select Target Location and Folder” no item “Web Target” digite o nome da “Target” onde será organizada toda a sua aplicação WEB. Para o nosso exemplo digite conforme a figura abaixo. Não é necessário digitar todos os campos apenas na linha “Web Target” digite ex1.pbt os demais campos serão automaticamente preenchidos. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 16 258 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Create Url Prefix Mapping” no item “URL Prefix Mapping” confirme “/exemplo” e clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 16 259 Criando um sítio WEB com PowerDynamo Na caixa de dialogo, “Create or Select ODBC Data Source” escreva ou confirme “exemplo” e clique em “Next”. PowerBuilder 9.0 Básico Capítulo 16 260 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Specify Database File” digite ou confirme o local onde será acondicionado o banco de dados. Clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 16 261 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Specify Login Information” informe a identificação de usuário. Por default é dba e a senha de acesso que por default é sql. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 16 262 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Load Help Files And Samples” deixe desmarcado. Clique em “Next”. Na caixa de dialogo “Name New Deployment Configuration” dê o nome para esta nova configuração ou assuma o default. Clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 16 263 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Specify HTTP Server Information” informe para “HTTP Server Name”, localhost e como “HTTP Port” o default, 80. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 16 264 Criando um sítio WEB com PowerDynamo Na caixa dialogo “Select Object Model” assuma “default Object Model” clique em “Next”. Adquirido por : Fabrício Moreira da Silva e PowerBuilder 9.0 Básico Capítulo 16 265 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Choose File Deployment Options” assuma o default e clique em “Next”. PowerBuilder 9.0 Básico Capítulo 16 266 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Specify Local Copy Folder” assuma o default e clique em “Next”. E em seguida em “Finish” para criar o PowerDynamo Web Site. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 16 267 Criando um sítio WEB com PowerDynamo Na caixa de dialogo “Specify Local Copy Folder” assuma o default e clique em “Next”. Então teremos em “Ready to Create PowerDynamo Web Site” todas as especificações para criação. Clique em “Finish”. PowerBuilder 9.0 Básico Capítulo 16 268 Criando um sítio WEB com PowerDynamo Em nossa aplicação: Após a criação do ambiente agora podemos criar nossa primeira página no sítio “ex_1”. Adquirido por : Fabrício Moreira da Silva Capítulo 17 Criando a primeira página Web Utilizando 4GL Web/JSP Page wizard PowerBuilder 9.0 Básico Capítulo 17 269 Criando a primeira página Web. Utilizando o Wizard 4GL Web / JSP page você cria páginas no seu ambiente PowerDynamo muito facilmente. Nesse capítulo vamos criar uma página de abertura e adicionar no ambiente ex_1. No template TreeView clique com o mouse direito em cima de ex_1 e selecione “New”. Clique em “Web” e selecione “4GL Web / JSP Page” e clique em “Ok”. Na tela acima clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 270 Utilizando o Wizard 4GL Web / JSP Page Na caixa de dialogo, “Specify New HTML File” digite o título para a abertura da página que será criada. Para o nosso exemplo digite “Bem-vindo”, em “File Name”. Automaticamente será assumido o nome do titulo como nome do arquivo “.htm”. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 17 271 Utilizando o Wizard 4GL Web / JSP Page Se a sua aplicação Web utilizará estilos de apresentação padronizados tipo arquivos “.css”, nessa caixa de dialogo você poderá identifica-los. Caso contrário deixe em branco a opção “Style Sheet” e clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 272 Utilizando o Wizard 4GL Web / JSP Page Na caixa de dialogo “Specify Background Characteristics” você pode especificar uma imagem de fundo. Para o nosso exemplo deixe em branco e em “Background Color” escolha uma cor de fundo. Em nosso exemplo utilizaremos o defaul “White”. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 17 273 Utilizando o Wizard 4GL Web / JSP Page Na caixa de dialogo “Specify Page Context” pode-se definir um cabeçalho e um rodapé para a página em construção. Nesse caso o cabeçalho será preenchido pelo título da página e o rodapé com a data atual. Ambos os dados poderão ser alterados posteriormente. Marque as duas caixas e clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 274 Utilizando o Wizard 4GL Web / JSP Page Na caixa de dialogo “Specify Error e Tracing Options” marque os itens conforme a figura abaixo. Assim os erros que por ventura surgirem serão apresentados no rodapé da página. Para desenvolvimento é uma boa opção, mas não muito apresentável quando em produção. Portanto ao selecionar este modo lembre-se que essa opção pode ser alterada para se inibir a exibição das mensagens de erro. O “Trace” é uma boa opção se deixar ativado. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 17 275 Utilizando o Wizard 4GL Web / JSP Page Na caixa de dialogo “Define Page Parameters” você pode definir variáveis e atribuir-lhes escopo se for necessário. Automaticamente estas variáveis serão adicionadas a variáveis globais para serem usadas do lado servidor de sua aplicação. No nosso exemplo defina em “Parameter Name”, “ID” e em “Default Value”, deixe em branco. Clique em “Next”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 276 Utilizando o Wizard 4GL Web / JSP Page Na caixa de dialogo “Choose EAServer Profile” marque a caixa “Skip EAServer Components” e clique em “Next”. Caso existisse algum componente do EAServer definido e este fizesse parte da sua aplicação. poderia ser selecionado aqui, mas no caso do exemplo que estamos desenvolvendo ainda não criamos nenhum componente. PowerBuilder 9.0 Básico Capítulo 17 277 Utilizando o Wizard 4GL Web / JSP Page Então teremos a caixa de dialogo final do 4GL Web / JSP Page. Clique em “Finish” para gerar a primeira página da aplicação ex_1. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 278 Utilizando o Wizard 4GL Web / JSP Page Visão da página gerada. Nesse ponto já estamos com a primeira página html criada através do 4GL Web / JSP Page para o ambiente PowerDynamo “ex_1”. O PowerBuilder 9.0 ainda disponibiliza o painter de edição e visualização html possibilitando a manutenção e melhoramento da página html gerada. PowerBuilder 9.0 Básico Capítulo 17 279 Conhecendo o painter de edição html No painter de edição html do PowerBuilder 9.0 esta disponibilizada uma nova barra de ferramentas. Alguns objetos do PowerBuilder estão disponíveis para inclusão em seu projeto Web. Não entraremos nestes detalhes considerados avançados. Alguns desses controles precisam de configurações mais detalhadas para o EAServer. O que não é o propósito deste livro. Descrevendo a barra de ferramenta PainterBar3. Inserir Inserir Inserir Inserir Inserir Inserir Inserir Inserir Inserir Inserir Inserir linha Horizontal fim de linha(Line Break) tabela figura HiperLink Ancora Caixa de marcação botão de rádio campo de linha simples área de texto ListBox Inserir Inserir Inserir Inserir Inserir Inserir Inserir botão botão com imagem texto estático DataWindow objeto Applet plug-in Após estar familiarizado com a barra de ferramenta procederemos à familiarização do painter de edição. Para isto modificaremos a página Bem-vindo.htm. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 280 Alterando a página Bem-vindo.htm Com a página editada coloque o cursor no final do texto “Bem-vindo” e tecle “Enter”. Marque o texto “Bem-vindo” e clique com o botão esquerdo do mouse no menu popup que aparecerá. Selecione “Header Properties”. Na caixa de dialogo que surgirá selecione a tabela “Inline Style” e clique na caixa de rádio “Inline” e no botão “Edit”. Esta opção disponibiliza as opções de edição de texto como fontes, fundo, margens e etc. PowerBuilder 9.0 Básico Capítulo 17 281 Alterando a página “Bem-vindo.htm” Selecione a fonte “Arial Black” clique no botão com a seta para direita para transferir a fonte. No grupo “Font Size” clique no botão de rádio marcado como “Specific” para o tipo digite “20” e selecione “pt”. Selecione “Nave” para “Color”. Varrendo a dropdownlistbox de cores. Clique na “aba” “Backgrond” e marque o botão de rádio “Relative” e selecione “center” para horizontal e vertical. Selecione “White” para “BackGround” Color. Clique em “Ok”. E teremos : Clique em “Ok” para aceitar a seleção dos dados e permitir ao PowerBuilder 9.0 alterar a página Bem-vindo.htm. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 Alterando a página “Bem-vindo.htm” A figura abaixo representa a alteração realizada na página Bem-vindo.htm. Clique em “Save” para guardar as alterações. 282 PowerBuilder 9.0 Básico Capítulo 17 283 Incluindo uma imagem na página “Bem-vindo.htm” Clique como o botão do mouse direito no item “ex_1”. No menu popup que surgirá selecione “New Folder” e digite “Imagens” para o nome da nova pasta e tecle “Enter”. Clique com o botão do mouse direito sobre a nova pasta e selecione no menu popup “Import File”. Selecione em “Tipo de arquivo”, “All Files”. Navegue na pasta onde o PowerBuilder 9.0 esta instalado e no diretório “PowerBuilder 9\Tutorial” selecione a imagem “tshirtw.jpg”. A imagens será copiada para a pasta “Imagens”. Clique na página Bem-vindo.htm. Coloque o cursor no final da linha “Bemvindo”. Tecle “Enter” para incluir uma nova linha. Coloque o cursor nesta nova linha e clique no menu (PowerBar3) em Incluir figura. Clique no botão (...) para procurar a figura a ser inserida. Abra a pasta Imagens e selecione a imagem “tshirtw.jpg”. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 Incluindo uma imagem na página “Bem-vindo.htm” Teremos : Clique em “OK”. E Em “OK” outra vez. 284 PowerBuilder 9.0 Básico Capítulo 17 285 Incluindo uma imagem na página “Bem-vindo.htm” Teremos : Melhorando : Clique na imagem como botão direito do mouse e selecione “Position” e “Use Absolute Positioning”. Mova a imagem conforme sua preferência. Clique em “Save” para guardar as alterações. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 286 Criando uma página Inicial Para o projeto ficar um pouco mais profissional e treinarmos um pouco mais, criaremos uma página inicial utilizando o mesmo processo da criação da página Bem-vindo.htm. No template TreeView clique com o botão do mouse direito em cima de ex_1 e selecione “New”. Clique em “Web” e selecione “4GL Web / JSP Page”. Clique em “Ok”. Clique em “Next”. Na caixa de dialogo “Specify New HTML File” digite o título para a abertura da página que será criada. Para o nosso segundo exemplo “Abertura”, em “File Name” automaticamente será assumido o nome do titulo como nome do arquivo “.htm”. Clique em “Next”. Deixe em branco a opção “Style Sheet” e clique em “Next”. Na caixa de dialogo “Specify Background Characteristics” você pode especificar uma imagem de fundo. Para o nosso segundo exemplo deixe em branco e em “Background Color” escolha uma cor de fundo. Em nosso segundo exemplo utilizaremos o default “White”. Clique em “Next”. Na caixa de dialogo “Specify Page Context” pode-se definir um cabeçalho e um rodapé para a página em construção. Nesse caso o cabeçalho será preenchido pelo título da página e o rodapé com a data atual. Ambos os dados poderão ser alterados posteriormente. Marque as duas caixas e clique em “Next”. Na caixa de dialogo “Specify Error e Tracing Options” deixe em branco. Clique em “Next”. PowerBuilder 9.0 Básico Capítulo 17 287 Criando uma página Inicial Na caixa de dialogo “Define Page Parameters” você pode definir variáveis e atribuir-lhes escopo se for necessário. Automaticamente estas variáveis serão adicionadas a variáveis globais para serem usadas do lado servidor de sua aplicação. No nosso segundo exemplo deixe em branco. Clique em “Next”. Na caixa de dialogo “Choose EAServer Profile” marque a caixa “Skip EAServer Components” e clique em “Next”. Então teremos a caixa de dialogo final do 4GL Web / JSP Page clique em “Finish” para gerar a segunda página da aplicação ex_1. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 288 Criando uma página Inicial Então teremos: Marque o texto “Put your data here” e troque o texto por : “Clique para entrar”. Clique em “Save” para guardar as alterações. Então teremos: PowerBuilder 9.0 Básico Capítulo 17 289 Criando uma página Inicial Agora marque o texto “Clique para entrar” no menu principal e selecione “Format” e “Hyperlink”. E preencha os campos conforme a figura abaixo. Clique em “OK”. Teremos: Clique em “Save” para guardar as alterações. Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Capítulo 17 290 Depurando e executando sua aplicação Web. Coloque o mouse sobre a aplicação Web “ex_1” clique no botão direito do mouse e selecione “Deploy”. Acompanhe no template “Output” a depuração da aplicação Web “ex_1”. Ao final, se tudo estiver correto a mensagem “Finished Deploy of Target ex_1” será exibida. Para executar a sua aplicação você precisa estar com o “PowerDynamo Personal Web Server” ativo. Clique em “Iniciar” e procure no seu diretório do PowerBuilder 9.0 a chamada para o atalho “PowerDynamo 3.6” e selecione “Personal Web Server”. Quando o “Personal Web Server” estiver ativo o ícone na Taskbar do MS Windows!. Então selecione no menu principal “Run” e “Select and Run”. Selecione ex_1. E clique em “OK”. será visualizado PowerBuilder 9.0 Básico Capítulo 17 Depurando e executando sua aplicação Web. Então teremos: Adquirido por : Fabrício Moreira da Silva 291 PowerBuilder 9.0 Básico Capítulo 17 292 Finalizando Seu projeto agora já possui uma ligação Web. O PowerBuilder 9.0 pode disponibilizar dados via DataWindow direto pelo browser, possibilitando uma interação ambiente cliente/servidor e Web, mas para que isto seja possível é necessária à utilização EAServer. Este livro, conforme nos referenciamos no inicio é uma literatura básica, cujo objetivo é possibilitar aos iniciantes ter uma referência, um ponto de partida. Para cada vez mais desbravar as possibilidades oferecidas por esta ferramenta de desenvolvimento. O Sybase PowerBuilder 9.0. Em breve e com o pensamento positivo de todos, estarei escrevendo um modulo sobre as técnicas avançadas do Sybase PowerBuilder 9.0. Até Breve. Paz e prosperidade a todos. PowerBuilder 9.0 Básico Guia de Referência : Nomenclaturas Guia de Referência Nomenclaturas Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Nomenclaturas Nomenclatura dos Tipos de Objetos Nome do Objeto Objeto de DataWindow Função (global) Menu Estrutura Consulta Convenção d_ f_ m_ s_ q_ Objeto do usuário Janela u_ w_ Exemplo d_cliente f_exibir _ erro m_cliente s_empregado q_ clientes_para_agentes u _ pedido w_ ancestral Nomenclatura dos Controles da Janelas Nome do Controle ChekBox CommandButton DataWindowControle DropDowListBox EditMask WindowsFunction Graph GrupBox HscrollBar Line ListBox MultiLineEdit Oval Picture PictureButton RadioButton Rectangle RoundRectangle SingleLineEdit StatleText UserObject VscrollBar Convenção cbx_ cb_ dw_ ddlb_ em_ wf_ gr_ gb_ hsb_ ln_ lb_ mle_ oval_ p_ pb_ rb_ r_ rr_ sle_ st_ uo_ vsb_ Exemplo cbx_rascunho cb_ok dw_dados ddlb_agentes em_telefone wf_errosql gr_chegadas_por_agentes gb_opção_de_saida hsb_vermelho ln_linhacurta lb_agentes mle_comentários oval_equipe p_empregado pb_atualizar rb_construção r_ret rr_tela sle_nome_do_cliente st_prompt_do_cliente uo_pedido vsb_percentual_feito 293 PowerBuilder 9.0 Básico Guia de Referência : Nomenclaturas Nomenclatura por Espaço Escopo da Variável Local Global Instância Compartilhada Argumento Convenção lx_ ou nada (o prefixo é opcional nas variáveis locais) gx_ ix_ sx_ ax_ Nomenclatura por Tipo de Dados Tipo de Dados Janela (Window) Item de Menu (MenuItem) Controle de DataWindow Estrutura(structure) Objeto do usuário (User Object) Inteiro (Integer) Inteiro sem Sinal (Unsigned Integer) Longo (Long) Longo sem Sinal (Unsigned Long) Booleano (Boolean) String (String) Duplo (Double) Real (Real) Decimal (Decimal) Data (Date) Hora (Time) DataHora (DateTime) Convenção w m dw str uo i ui l ul b s db r dc d t dt ou st (TtimeStamp) 294 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Nomenclaturas Exemplos de Nomenclaturas de Variáveis Nome da Variável sstr_pontos_de_dados [] Descrição do Tipo de Dados Array de Shared Structure (estrutura compartilhada) Instância de um Unsigned Long (inteiro longo sem sinal) Shared String (string compartilhada) Instância de um inteiro Variável Local (prefixo não obrigatório) Inteiro Local (prefixo opcional acrescentado) Instância Local de uma variável de janela String de argumento (passado|) iul_id_do_cliente ss_nome ii_contagem contagem_de_loops li_contagem_de_loops lw_inst_de_janela as_erro Nomenclatura das Funções de Objetos. Tipo de Objeto da Função Função Global Função de Menu Função de Objeto do Usuário Função de Janela Convenção f_ mf_ uf_ Exemplo f_erro_sql mf_sair uf_pedido wf_ wf_atualizar 295 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Guia de Referência Atributos e Eventos Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Aplicações Atributos AppName DDETimeOut Valores String Integer DwMessageTitle String MicroHelpDefault String ToolbarText Boolean ToolbarFrameTitle String ToolbarSheefTitle String Descrição Uma string contendo o nome da aplicação Um inteiro especificando, em segundo, o intervalo de tempo reservado para uma conversação DDE Uma string contendo o título das caixas de mensagens de datawindow exibidas durante a execução Uma string contendo o texto básico para o MicroHelp Um valor TRUE ou FALSE indicando se o texto da barra de ferramentas deve ou não ser exibido: Este atributo só tem efeito em uma janela de quadro MDI Uma string indicando o título da barra de ferramentas do quadro, quando ela é uma barra de ferramentas flutuante. Este atributo só tem efeito em uma janela de quadro MDI Uma string indicando o título da barra de ferramentas da folha, quando ela é uma barra de ferramentas flutuante. Este atributo só tem efeito em uma janela de quadro MDI Eventos de Aplicações Evento Close Idle Open SystemError Descrição Executado no fechamento da execução Executado quando ocorre o número especificado de segundos sem qualquer atividade durante a execução da aplicação Executado na abertura da aplicação Executado durante um erro do sistema em qualquer local da aplicação 296 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Janelas Atributos BackColor Border Valores Long Boolean BringToTop Boolean ColumnsPerPage Integer Controle [] Array de objetos ControlMenu Boslean Enabled Boolean Height HscrollBar Integer Boolean Icon String LinesPer|Page Integer Descrição Um indicador da cor de fundo Um valor TRUE ou FALSE indicando se a janela possui ou não uma borda Um valor TRUE ou FALSE indicando a suposição de que a janela deve estar no primeiro plano Um inteiro indicando o número de unidades a rolar quando há um clique sobre a barra de rolagem Um array relacionando os controles. Você não pode alterar os valores desta variável Um valor TRUE ou FALSE indicando a presença da caixa de controle e do menu da caixa de controle O valor TRUE permite à janela transmitir e receber mensagens Indica à altura da janela Um valor TRUE ou FALSE indicando a presença de uma barra de rolagem horizontal O ícone associado com uma janela quando a janela se encontra minimizada Um inteiro indicando o número de unidades a rolar quando há um clique sobre a barra de rolagem para baixo 297 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Janelas Atributos MaxBox MenuID MenuName MinBox Pointer Resizable Tag Title TitleBar ToolbarAlignment ToolbarHeight ToolbarVisible Valores Boolean Descrição Um valor TRUE ou FALSE indicando a presença de uma caixa de maximizar na barra de titulo da janela String O item do menu associado a janela String O nome do menu associado com a identificação de menu Boolean Um valor TRUE ou FALSE indicando a presença de uma caixa de minimizar na barra de titulo da janela String Uma string contendo o nome do arquivo que guarda o ponteiro para o objeto ou controle Boolean Um valor TRUE ou FALSE indicando se a janela é ou não redimensionável String Uma string contendo o valor da tag da janela String Uma string contendo o título da janela Boolean Um valor TRUE ou FALSE indicando a presença de uma barra de titulo na sua janela. A modificação deste atributo em um script pode provocar um erro durante a execução Enumerated Controla-se uma barra de ferramentas, está na parte superior, inferior, esquerda ou direita, da janela, ou se é uma barra de ferramentas flutuante. Este atributo só terá efeito em quadros MDI e folhas Integer Estabelece a altura da barra de ferramentas. Este atributo só tem efeito em quadros MDI e folhas Boolean Torna a barra de ferramentas visível ou invisível (TRUE ou FALSE). Este atributo só tem efeito em quadros MDI e folhas 298 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Janelas Atributos ToolbarWidth ToolbarX ToolbarY UnitsPercolumn UnitsPerLine Visible VscrollBar Width Valores Descrição Integer Especifica a largura de uma barra de ferramentas flutuante. Este atributo só tem efeito em quadros MDI e folhas Integer A coordenada X de uma barra de ferramentas flutuante. Este atributo só tem efeito em quadros MDI folhas Integer A coordenada Y de uma barra de ferramentas flutuante. Este atributo só tem efeito em quadros MDI e folhas Integer Indica o número de unidades de rolagem do PowerBuilder quando o usuário efetua a rolagem através de um clique á esquerda ou á direita da caixa de rolagem Integer Indica o número de unidades de rolagem do PowerBuilder quando o usuário efetua a rolagem através de um clique acima ou abaixo da caixa de rolagem Boolean Torna a janela visível ou invisível Boolean Um valor TRUE ou FALSE indicando a presença de uma barra de rolagem Integer Indica a largura da janela 299 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Janelas Atributos WindowState Valores Enumerated WindowType Enumerated X Integer Y Integer Descrição Indica o estado (maximizada, minimizada ou normal) em que a janela esta sendo exibida no momento. Indica o tipo de janela (principal, instantânea, MDI< Frame, etc). Indica a coordenada X do canto superior esquerdo da janela Indica a coordenada Y do canto esquerdo da janela Eventos de Janelas Eventos Activate Clicked Close CloseQuery Deactivate DoubleClicked DragDrop DragEnter DragLeave DragWithin Hide HotLinkAlarm Key Mouse Down MouseMove Descrição A janela recebeu o foco O usuário deu clique na janela A janela esta sendo fechada A janela esta sendo fechada através da caixa de controle A janela esta perdendo o foco O usuário de um clique duplo na janela Um objeto arrastado foi solto na janela Um objeto arrastado entrou na janela Um objeto arrastado deixou a janela Um objeto esta sendo arrastado no interior da janela A janela se torna oculta Uma aplicação servidora transmitiu novos dados (ou dados alterados) através de DDE Uma tecla foi pressionada (exceto alt) Um botão do mouse foi pressionado em uma área vazia da janela O mouse esta sendo movimentado 300 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Eventos de Janelas Eventos MouseUp Open Other RbuttonDown RemoteExec RemoteHotLinkStar RemoteHotLinkStop RemoteSend Resize Show SystemKey Timer Descrição O botão do mouse foi liberado em uma área vazia da janela. A janela se abre. Ocorreu um evento do Windows que não foi definido pelo PowerBuilder. O usuário está mantendo pressionado o botão direito do mouse na janela Uma aplicação, cliente transmitiu uma solicitação através da DDE Uma aplicação, cliente quer iniciar um vinculo ativo através da DDE. Uma aplicação, cliente quer encerrar um vinculo ativo através da DDE. Uma aplicação, cliente transmitiu dados através da DDE. O usuário esta redimensionando a janela. A janela estava oculta e agora esta sendo exibida. A tecla Alt ou Alt+outra foi pressionada. O evento foi disparado pela função Timer em algum intervalo de tempo determinado. Atributos de Itens de Menus Atributos Checked Valores Boolean Enabled Boolean Item[] MicroHelp Array de menus String ParentWindow Window Descrição Um valor TRUE ou FALSE indicando se item de menu esta assinalado. Um valor de TRUE ou FALSE indicando se o item de menu é capaz de transmitir é receber mensagens. Uma lista de itens de menu A Microhelp associada a esse menu. A janela que contém o menu. 301 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Itens de Menus Atributos Tag Valores String Text ToolbarItemDown String Boolean ToolbarItemDownName String ToolbarItemName String ToolbarItemOrder Integer ToolbaritemVisible Boolean Visible Boolean Descrição Uma string contendo o valor da tag do item de menu. O texto associado a esse item de menu Um valor TRUE ou FALSE indicando se o item da barra de ferramentas esta embaixo como padrão. O nome da figura exibida quando há um clique sobre um item de uma barra de ferramentas. O nome da figura exibida no item correspondente da barra de ferramentas. Um inteiro especificando a ordem dos itens na barra de ferramentas. Um valor TRUE ou FALSE indicando se o item da barra de ferramentas esta ou não visível. Um Valor TRUE ou FALSE indicando se o item do menu esta ou não visível. 302 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos Accelerator Valores Integer Alignment Enumerated AutoHScroll Boolean AutoSkip Boolean AutoVScroll Boolean AllowEdit Boolean Automatic Boolean BackColor Long BeginX Integer Descrição Um inteiro contendo o valor ASC II que indica a tecla que você quer atribuir como aceleradora para um controle Um tipo de dados enumerados, especificando o alinhamento do texto em um controle MultiLineEdit, StaticText ou PictureButton. Os valores válidos são; Center!, Left! ou Right!. Um valor TRUE ou FALSE indicando se você quer que a rolagem de um campo no sentido horizontal seja automática. Um atributo da máscara Edit indicando se você quer ou não saltar automaticamente esse campo e passar para o campo seguinte na ordem de tabulação. Um valor TRUE ou FALSE indicando se você quer que a rolagem de um campo no sentido vertical seja automática. Um valor TRUE ou FALSE permitindo ou não a entrada de um valor na tabela de código em uma DrogDownListBox. Um valor TRUE ou FALSE indicando se o controle CheckBox ou RadioButton deve ser assinalado ou desmarcado automaticamente por um clique do mouse. Um recurso que utiliza a função RGB para determinar a cor do segundo plano de um controle de janelas, por exemplo: para definir a cor do fundo de uma edição em várias linhas como púrpura você digitaria, mle_field.backcolor = RGB(255,0,255) . O ponto X inicial de um controle de linha em uma janela em relação ao canto superior esquerdo. 303 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos BeginY Valores Integer Descrição O ponto Y inicial de um controle de linha em uma janela em relação ao canto superior esquerdo. Border Boolean Um valor TRUE ou FALSE indicando se o controle da janela tem ou não uma borda BorderStyle Enumerated Uma variável enumerada descrevendo o estilo da borda. BringToTop Boolean Um valor TRUE ou FALSE indicando se o controle da janela deve ser levado ou não para frente dos outros controles. Cancel Boolean Um valor TRUE ou FALSE indicando se este CommandButton ou PictureButton deve ou não ser usado como um botão de cancelamento. Category ObjetogrAxis Define os atributos do eixo das categorias em um controle gráfico. Checked Boolean Um valor TRUE ou FALSE indicando se uma CheckBox (caixa de verificação, esta selecionada com um X ou se um RadioButton (Botão de rádio) esta preenchida). ClassName String Uma string contendo o nome do controle da janela. Columns PerPage Integer Um inteiro indicando o número de unidades a serem roladas quando houver um clique acima da caixa de rolagem. Controle[] WindowObject Um array relacionando os controles. Você não pode alterar os valores pela variável. ControMenu Boolean Um valor TRUE ou FALSE indicando a presença de uma caixa de controle de m menu de caixa de controle no controle da janela. CornerHeight Integer A altura do canto arredondado em um RoundRectangle. 304 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos CornerWidth Valores Integer DateObject String Default Boolean Depth Integer Disabledname String DisplayDate String DisplayOnly Boolean DragAuto Boolean DragLcon Dtring Elevation Integer Enabled Boolean Descrição A largura do canto arredondado em um RoundRectangle. Uma string indicando o objeto de DataWindow associado com o controle de DataWindow. Um valor TRUE ou FALSE denotando se esta CommandButton ou PictureButton deve ou não ser usado como botão padrão. Um inteiro indicando a porcentagem da profundidade em relação a largura do gráfico, por exemplo, se o valor da profundidade é 75, a profundidade do gráfico corresponde a 75% da sua largura. O nome da figura a ser exibida quando um PictureButton estiver inativo. Uma string contendo os dados que aparecem inicialmente em uma EditMask. Um valor TRUE ou FALSE indicando se este campo pode ou não ser alterado pelo usuário. Um valor TRUE ou FALSE indicando se um clique coloca automaticamente o controle de janela no modo Drag (Quando DragAuto e não um evento Clicked). O icone aparece quando o usuário arrasta o controle da janela. Um inteiro especificando o ângulo de alteração da parte frontal para a posterior em um gráfico Um valor TRUE ou FALSE indicando se o controle de janela pode ou não transmitir e receber mensagens. 305 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos EndX Valores Integer FaceName String FiLLColor Long FillPatt5ern Enumerated FocusRectangle Boolean FontCharSet Enumerated (CharSet) FontFamily Enumareted (Family!) FontPitch Enumerated (Pitch!) GraphType Enumerated Height Integer Descrição O ponto X final de um controle de linha em uma janela em relação ao canto superior esquerdo. Uma string contendo o nome da face de tipo (por exemplo, Arial) para o texto de um controle de janela. A cor de preenchimento em um controle oval retângulo ou retângulo arredondado O padrão para preenchimento em um controle de texto estático, oval, retângulo ou retângulo arredondado. Um valor TRUE ou FALSE indicando se deve ou não ser exibido um retângulo em torno do controle Especifica o conjunto de caracteres da fonte. Os valores validos são: ANSI!, ChineseBigA!, DefaultCharSet!, HangEul!, Shiftjis!, OEM e Symbol Especifica um grupo de faces de tipos com caracteristicas semelhantes para o texto. Os valores válidos são: AnyFont!, Decorative!, Modern!, Roman!, Scripte Swiss. Especifica o esoaçamento horizontal (pitch) do texto. Os valores válidos são: Default! – utiliza o espaçamento padrão correspondente a fonte (fixo ou variável ); Fixed – usa espaçamento fixo; Variable – usa espaçamento variável. Um tipo de dados enumerado grGraphType especificando o tipo de um gráfico. Um número indicando a altura do controle da janela. 306 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos HscrollBar HscrollBar HsplitScrol HtextAlign Icon Increment Invert Italic Item[] LeftText Valores Boolean Descrição Um valor TRUE ou FALSE indicando se o controle de janela tem ou não uma barra de rolagem horizontal. Boolean Um valor TRUE ou FALSE indicando se o controle de janela tem ou não uma barra de rolagem horizontal. Boolean Um valor TRUE ou FALSE indicando se o controle de janela permite ou não dividir a rolagem. Enumerated Um recurso que especifica o alinhamento do texto em um controle PictureButton. Os valores válidos são Center, Left e Right. String Uma string indicando o icone (arquivo ICON) exibido se o controle de janela estiver minimizado. Double Um recurso que especifica um incremento usado em uma máscara Edit numérica com controle de rotação. Boolean Um valor TRUE ou FALSE indicando se um controle de figura esta ou não invertido Boolean Um valor TRUE ou FALSE especificando e o texto em um controle esta ou não itálico. Array de Um array de strings de exibição em uma String tabela de código de ListBox ou DropDownListBox. Boolean Um valor TRUE ou FALSE indicando se o texto deve ser exibido no lado esquerdo (TRUE) ou no lado direito (FALSE) de uma caixa de verificação ou de um botão de rádio. 307 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos Limit Valores Integer Legend Enumerated ( gr Legend Type ) LegenDispAttr LibraryName Gráfico de objeto grDispAttr String LineColor Integer LinesPerPage Integer LineStyle Enumerated (Style) LineTrickness Integer LiveScroll Boolean Mask String Descrição Um inteiro contendo o número máximo de caracteres (de 0 até 32767) que o usuário pode digitar em um controle. O valor 0 indica um número ilimitado de caracteres. Um número indicando a localização da legenda de um gráfico. Os valores válidos são: 0 – None, 1 – Left, 2 – Right, 3 – Top, 4 – Botton. Define como você deseja que a legenda apareça. O nome da biblioteca de vínculos dinâmicos (DLL) que contém uma classe de objetos personalizados do usuário. A cor para desenho de linhas em um controle Line, Oval, Rectangle ou RoundRectangle. Um inteiro indicando o número de unidades a serem roladas quando houver um clique na parte inferior da barra de rolagem. Um tipo de dados enumerados Style! Especificando o estilo da linha de um controle, Line Oval, Rectangle ou RoundRectangle. Um inteiro determinando a espessura da linha em um controle Line, Oval, Rectangle ou RoundRectangle. Um valor TRUE ou FALSE indicando se o acionamento das barras de rolagem possibilita a rolagem DataWindow. Uma string contendo um formato de um controle de máscara de edição. 308 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos MaskdataType MaxBox MaxPosition MicroHelpHeight MinBox MinPosition MinMax MultiSelect Valores Descrição Enumerated Uma variável enumerada atribuindo um formato predefinido a um controle de máscara de edição. Boolean Um valor TRUE ou FALSE indicando a presença de uma caixa de maximizar na DataWindow. Integer Um inteiro contendo o valor do atributo da posição quando uma barra de rolagem horizontal esta na extremidade direita ou uma barra de rolagem vertical se encontra na extremidade inferior. Somente para uso em controle HscrollBar e VscrollBar. Integer Um inteiro no controle MDIClient (MDI_1) determinando a altura da MicroHelp Boolean Um valor TRUE ou FALSE indicando a presença de uma caixa de minimizar na DataWindow. Integer Um inteiro contendo o valor do atributo de posição quando uma barra de rolagem horizontal esta na extremidade esquerda ou uma barra de rolagem vertical se encontra na extremidade superior. String Uma string contando os valores mínimo e máximo para um controle de rtotação em uma máscara de edição. Os valores mínimo e máximo são separados por uma tabulação (por exemplo, em_campo.minmax= “1000 5000”). Boolean Um valor TRUE ou FALSE indicando se o usuário pode ou não selecionar diversos valores em uma ListBox. 309 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos ObjectType Valores Enumerated OriginalSize Boolean OverlapPerce Integer nt Password Boolean Perspective Integer PictureName String Pointer String Position Integer Resizable Boolena Rotation Integer Descrição Um tipo de dados enumerado especificando o tipo de objeto do usuário. Um valor TRUE ou FALSE indicando se devem ou não ser ignorados os atributos Height e Midth em um controle PictureButton sendo exibida em seu tamanho original a figura associada com o controle. Um inteiro especificando a porcentagem da largura dos indicadores de dados (por exemplo) barras ou colunas de diferentes séries que se sobreoõem em um gráfico. Um valor TRUE ou FALSE indicando se uma Single Line Edit deve ser criada como campo de senha. Um valor inteiro (de 1 a 100), indicando a distância do gráfico até a parte frontal da janela. Quanto maior o número maior a distância e menor o tamanho do gráfico. Uma string contendo o nome do mapa de bits em um controle Pictyre ou PictureButton. Uma string contendo o ponteiro do mouse para este objeto. A posição atual de uma barra de rolagem. Somente para uso nos atributos HscrollBar e VscrollBar. Um valor TRUE ou FALSE indicando se o DataWindow é ou não redimensionável. Um valor inteiro indicando o quanto você deseja girar um gráfico da esquerda para a direita. 310 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos Series Valores Objeto GrAxis ShadeColor Integer ShowList Boolean Sorted Boolean Spacing Integer Spin Boolean StdHeight Boolean StdWicth Boolean Style TabOrder Long Integer TabStop [] Array de inteiros Descrição Define os atributos do eixo das séries em um controle de gráfico. Um inteiro determinando a cor do sombreado de um gráfico. Um valor TRUE ou FALSE indicando se a lista de uma DroDowmListBox deixa ou não ser sempre exibida. Um valor TRUE ou FALSE indicando se os elementos em uma ListBox ou DropDowmListBox devem ou não ser classificados de acordo com seu valor de exibição. Um inteiro determinando o espaço entre as categorias. Um valor TRUE ou FALSE indicando se uma máscara de edição tem ou não controle de rotação. Um valor TRUE ou FALSE indicando deve ser usado a altura da barra de rolagem horizontal padrão (TRUE) ou a altura da barra de rolagem horizontal do sistema (FALSE). Um valor TRUE ou FALSE indicando se deve ser usada a largura da barra de rolagem vertical padrão (TRUE ou a largura da barra de rolagem vertical do sistema (FALSE)). Controla a aparência do objeto do usuário. Um inteiro que descreve a ordem de tabulação do controle de janela em relação a outros controles. Um array de inteiros com sinais, contendo a posição das paredes de tabulação em uma máscara Edit, ListBox ou Line Edit. 311 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos Tag Valores String Text TextCase TextColor String Enumerated (case) Long TextSize Integer ThirdState Boolean ThreeState Boolean Title String TitleBar Boolean TitleDispAttr Objeto gr DispAttr Boolean Underline UnitsPerColu mn Integer Descrição Uma string contendo o valor da tag do controle de janela. O texto associado a um controle de janela Uma variável enumerada Case! Denotando a altura dos caracteres em um campo texto. Um inteiro longo indicando a cor do texto em um campo. Um inteiro indicando o tamanho do texto em um campo texto. Um valor TRUE ou FALSE indicando se uma caixa de verificação encontra-se ou não no seu terceiro estado. Um valor TRUE ou FALSE indicando se uma caixa de verificação tem três estados, (TRUE) ou somente dois estados (FALSE). Uma string contendo o título da DataWindow ou do gráfico. Um valor TRUE ou FALSE indicando se a DataWindow tem ou não uma barra de titulo. Um objeto DispAttr definindo o estilo de um titulo em um gráfico. Um valor TRUE ou FALSE especificando se o texto em um controle deve ou não estar sublinhado. Um recurso que indica o número de unidades do PowerBuilder na rolagem efetuada pelo usuário ao dar um clique no lado esquerdo ou direito da barra de rolagem. 312 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Atributos de Controles de Janelas Atributos UnitsPerLine Valores Integer UseCodeTable Boolean Values Objeto gr Axis Visible Boolean VscrollBar Boolean VtextAlign Enumerated Weight Integer Width Integer X Integer Y Integer Descrição Um recurso que indica o número de unidades do PowerBuilder na rolagem efetuada pelo usuário ao dar um clique na parte superior ou inferior da barra de rolagem. Um valor TRUE ou FALSE indicando se uma máscara Edit irá utilizar tabelas de códigos. Esse atributo útil em controles de rotação de campos não-numéricos. Um recurso que estabelece os atributos dos valores em um controle de gráfico. Um valor TRUE ou FALSE indicando se controle de janela esta ou não visível. Um valor TRUE ou FALSE indicando se controle de janela possui ou não uma barra de rolagem vertical. Um tipo de dados enumerado especificando o alinhamento do texto em um controle PictureButton. Os valores válidos são: Bottom, MultiLine, Top! E Vcenter! . Um inteiro contendo o peso (espessura das linhas) do texto. O peso é medido em pontos. O PowerBuilder sugere o valor “400” para o texto normal ou “700” para o texto em negrito. Um número indicando a largura do controle de janela. A coordenada X do controle de janela em relação à janela. A coordenada Y do controle de janela em relação à janela. 313 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Eventos de Controles de DataWindows Eventos Clicked Constructor Descrição O usuário deu um clique sobre um controle de janela. A janela foi aberta e o controle da janela esta sendo construído. DBError Ocorreu um erro do banco de dados no controle de dataWindow. Destructor A janela superior esta sendo fechada e o controle esta se fechando sendo destruído com ela. DoubleClicked O usuário de um clique duplo sobre o controle. DragDrop O usuário soltou um objeto sobre o controle de janela. DragEnter Um objeto arrastado entrou na área do controle de janela. DragLeave Um objeto arrastado esta deixando a área do controle de janela. DragWithin O usuário esta arrastando um objeto no interior da área do controle de janela. EditChanged O usuário esta digitando em um controle de edição. GetFocus O controle de janela recebeu o foco. ItemChanged Um item mudou de valor no controle DataWindow. ItemError Um item não passou em seu teste de validação. ItemFocusChanged O foco no interior do controle DataWindow foi modificado. LineLeft Uma HscrollBar acabou de se deslocar uma linha para a esquerda. LineRight Uma HscrollBar acabou de ser deslocar uma linha para a direita. LineUp Uma VscrollBar acabou de se deslocar uma linha para cima. Line Dow Uma VscrollBar acabou de se deslocar uma linha para baixo. 314 PowerBuilder 9.0 Básico Guia de Referência: Atributos e Eventos Eventos de Controles de DataWindows Eventos LoseFocus Modifed Descrição O controle de janela esta a ponto de perder o foco. Um controle de edição em várias linhas de edição em uma única linha, caixa de listagem ou caixa de listagem DropDowm perdeu o foco e foi alterado (modificado). Other Ocorreu um evento do Windows 3x que não é especifico do PowerBuilder . PageLeft Uma HscrollBar acabou de se deslocar uma página para a esquerda. PageRight Uma HscrollBar acabou de se deslocar uma página para a direita. PageUp Uma VScrollBar acabou de se deslocar uma página para cima. PageDown Uma VScrollBar acabou de se deslocar uma página para baixo. PrintEnd O controle de DataWindow terminou sua impressão. PrintPage Uma nova página esta a ponto de iniciar sua impressão. PrintStart O controle de DataWindow esta a ponto de ser impresso. RbuttonDown O botão direito do mouse é acionado sobre o controle de janela. Resize O controle de DataWindow esta sendo redimensionado. RetrieveEnd Uma recuperação acabou de ser completada. RetrieveRow Uma linha foi recuperada. RetrieveStart Uma recuperação esta a ponto de se iniciar. RowFocusChanged Uma nova linha recebeu o foco. ScrollHorizontal O controle de DataWindow esta sendo rolado no sentido horizontal. ScrollVertical O controle de DataWindow esta sendo rolado no sentido vertical. SelectionChanged A seleção foi alterada em uma caixa de listagem ou caixa de listagem DropDown. SQLPreview Acabou de ser emitida uma chamada a função Retrieve, UpDate, ou ReselectRow, mais a função ainda não foi executada. UpDateEnd Uma atualização acaba de ser completada. UpdateStart Uma atualização esta a ponto de se iniciar. 315 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Guia de Referência Dados Enumerados PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias ArrangeOpen ArrangeType Border BorderStyle Button ConvertType DragModes DwBuffer Valores Casacaded! Layered! Original! Cascade! Icons! Layer! Tile! TileHorizontal! Box! Lowered! BoBorder! Raised! ResizeBorder! ShadowBorder! Underline! StyleBox! StyleLowered! StyleRaised! StyleShadowBox! OK! OKCancel! RetryCancel! YesNo! YesNoCancel! XpixelsToUnits! XunitsToPixels! YpixelsToUnits! YunitsToPixels! Begin! Cancel! End! Delete! Fitter! Primary! Comentários Como as folhas MDI estão organizadas quando são abertas. Como as folhas MDI abertas são organizadas. O tipo da borda. O estilo da borda. Message Box Button. De que maneira você quer converter unidades ou pixels nas funções PixelsToUnit e UnitsToPixels. O modo Drag para um objeto. O buffer da DataWindow. 316 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias Dwltemstatus FileAcess FileLock FileMode FillPatern FontCharSet FontFamily FontPitch Valores DataModifed! New! NewModifed! NotModifed! Read! Write! LockReady! LockReadyWrite! LockWrite! Shared! LineModel! StreamModel! Bdiagonal! Diamond! FDiagonal! Horizontal! Solid! Square! Vertical! Ans! ChineseBigS! DefaultCharSet! HangEu!Shiftjis! OEM! Symbol! AnyFont! Decorative! Modern! Roman! Script! Swiss! Default! Fixed! Variable! Comentários O status de um item DataWindow. O acesso permitido ao arquivo. O bloqueio do arquivo para outro usuário. O modo File para leitura e gravação. O padrão de preenchimento usado para preencher um desenho ou um objeto gráfico. O conjunto de caracteres da fonte. A família das fontes. O pitch da fonte. 317 PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias GrColorType GrDataType GrGraphType GrLegend Type Valores Background! Foreground! LineColor! Shade! Xvalue! Yvalue! Area3d! AreaGraph! Bar3dGraph! Bar3dObjGraph! BarGraph! BarStack3dObjGraph ! BarStackGraph! Col3dGraph! Col3dObjGraph! ColGraph! Colstack3dObjGraph! ColStackGraph! Line3d! LineGraph! Pie3d! PieGrapha! ScatterGraph! Comentários Um tipo de cor em um gráfico. AtBottom! AtLeft! AtRight! AtTop! NoLegend! A localização da legenda do gráfico. O valor de um ponto de dados em um gráfico. O tipo de Gráfico. 318 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias GrObjectType GrResetType GrScaleType GrScaleValue Valores TypeCategory! TypeCategoryAxis! TypeCategoryLabel! TypeData! TypeGraph! TypeLegend! TypeSeries! TypeSeriesAxis! TypeSeriesLabel! TypeTitle! TypeValueAxis! TypeValueLabel! All! Category! Data! Series! Linear! Log10! LogE! Actual! Cumulative! CumulativePercent! Percentage! Comentários O tipo de objeto do gráfico. Os dados que você deseja reinicializar em um gráfico. O tipo de escala em um gráfico. O valor da escala em um gráfico. 319 PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias GrSimbolType GrTicType HelpCommand Icon Valores NoSymbol! SymbolHollowBox! SymbolHollowCircle! SymbolHolloWDiamo nd! SymbolHollowDownA rrow! SymbolHollowUpArro w! SymbolPlus! SymbolSolidBox! SymbolSolidCircle! SymbolSolidDiamond ! SymbolSolidDownArr ow! SybolSolidArrow! SymbolStar! SymbolX! Inside! NoTic! Outside! Straddle! Index! Keyword! Topic! Exclamation! Informações! None! Question! StopSign! Comentários O símbolo que você deseja usar para uma série em um gráfico. O tipo de marcas de escala de um gráfico. O tipo de comando da função Showl Help. O ícone de Message Box (Caixa de Mensagem). 320 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias KeyCode Valores Key0! Key1! Key2! Key3! Key4! Key5! Key6! Key7! Key9! KeyA! KeyAdd! KeyAlt! KeyB! KeyBack! KeyBackQuote! KeyBackSlash! KeyC! KeyCapsLook! KeyComma! KeyControl! KeyD! KeyDash! Keydecimal! KeyDelete! KeyDivide!numérico! KeyDowmArrow! KeyE! KeyEnd! KeyEnter! KeyEqual! KeyEscape! KeyF1! KeyF10! KeyF11! KeyF12! KeyF2! KeyF3! Comentários O argumento do código de tecla(KeyCode) na função(KeyDowm). Tecla + no teclado numérico. TeclaBackspace Teclas e – Teclas(e) Teclas < Teclas – e Tecla . no teclado numérico quando NumLock esta ativa No teclado Teclas = e + 321 PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias KeyCode Valores KeyF4! KeyF5! KeyF6! KeyF7! KeyF8! KeyF9! Key|G! KeyH! KeyHome! KeyI! KeyInsert! KeyJ! KeyK! KeyL! KeyLeftArrow! KeyLeftBracket! KeyM! KeyMultiply! KeyN! KeyNumLock! KeyNumPad0! KeyNumPad1! KeyNumPad2! KeyNumPad3! KeyNumPad4! KeyNumPad5! KeyNumPad6! KeyNumPad7! KeyNumPad8! KeyNumPad9! KeyO! KeyP! KeyPageDowm! KeyPageUp! KeyPause! KeyPeriod! Comentários 322 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias KeyCode Valores KeyPrintscreen! KeyQ! KeyQuote! KeyR! KeyRightArrow! KeyRightBracket! KeyS KeyscrollLock! KeySemiColon! KeyShift! KeySlash! KeySpaceBar! KeySubtract! KeyT! KeyTab! KeyU! KeyUpArrow! KeyV! KeyW! KeyX! KeyY! KeyZ! Comentários 323 PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias LibDirType LibExportType LibImportType LineStyle mailFileType mailLogonOption Valores DirAll! DirApplication! DirdataWindow! DirFunctin! DirMenu! DirStructure! DirUserObject! DirWindow! ExportAplicattion! ExportDataWindow! ExportFunction! ExportMenu! ExportStructure! ExportUserObjet! ExportWindow! ImpotDataWindow Continuous! Dash! DashDot! DashDotDot! Dot! Transparent! mailAttach! mailOLE! mailOLEStatic! mailDownLoad! mailNewSession! mailNewSessionWith DowmLoad! mailReadOption! mailBodyAsFile! mailEntireMessage! mailEnvelopeOnly! mailSuppressAttach! Comentários O tipo dos objetos a serem incluídos na lista de diretórios. O tipo de objeto a ser exportado. O tipo de objeto a ser importado. O estilo da linha. Tipos de arquivos de correio. Opções de logon de correio. Opções de leitura de correio. 324 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias Valores mailRecipeientType mailBCC! mailCC! mailOriginator! mailTo! mailReturnCode mailReturnAccessDe nied! mailReturnAttachme nt! NotFound! OpenFailmailReturnA ttachmentWrite! Failure! mailReturnDiskFull! mailReturnFailure! mailReturnInsufficien tMemory! mailReturnLoginFailu re! mailReturnMessageln Use! mailReturnNoMessag e! mailReturnSucess! mailReturnTextTooLa rge! mailReturnTooManyF iles! mailReturnTooManyR ecipients! mailReturnTooManyS essions! mailReturnUserAbort ! Comentários Tipos de destinatários de correio. Código de retorno das funções de correio. 325 PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias MaskdataType MajorTic MinorTic Valores DataMask! DataTimeMask! DecimalMask! NumericMask! StringMask! TimeMask! Inside! NoTic! Outside Stradde! Inside! Notic! Outside! Stadde! Comentários O tipo de dados de EditMask. O tipo das marcas de escalas principais na escala do gráfico. O tipo de das marcas da escala secundárias na escala de gráficos. 326 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias Object ParmType Valores Checkbox! Commandbutton! DataWindow! Dropdownlistbox! Editmask! Graph! Groupbox! Hscrolibaqr! Line! Listbox! Mdiclient! Menu! Multilineedit! Nonvisualobject! Oval! Picture! Picturebutton! Radiobutton! Rectangle! Roundectangle! Singlelineedit! Stalictext! Userobject! Vscrollbar! Window! TypeBoolean! TypeDate! TypeDataTime! TypeDecimal! TypeDouble! TypeInterger! TypeLong! TypeReal! TypeString! TypeTime! TypeUlnt! TypeULong! Unknown!. Comentários O tipo do objeto. O tipo de dados do parâmetro. 327 PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias Pointer RowFocuslnd SaveAsType SeekType SetPosType TextCase Valores Arrow! Beam! Cross! HourGlass! SizeNESW! SizeNS! SizeNWSE! SizeWE! UpArrow! FocusRect! Hand! Off! Csv! ClipBoard! DBase2! DBase3! Dif! Excel! SQLInsert! Sylk! Text! Wk1! Wks! FromBeginning! FromCurrent! FromEnd! Behind! NoTopMost! TopBottom! TopMost! ToTop! AnyCase! Lower! Upper! Comentários A forma do ponteiro correspondente a função SetPointer O método que será usado para indicar que uma determinada linha de uma DataWindow detém o foco. O tipo de arquivo a ser criado quando forem gravadas as linhas de uma DataWindow. A posição na qual você quer iniciar uma busca em FileSeek. Define a ordem de exibição em controle de janela. A altura dos caracteres do texto. 328 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias ToolbarAlignment! TrigEvent Valores AlignAtBottom! AlignAtLeft! AlignAtRight! AlignAtTop! Roating! Activate! Cliked! Close! CloseQuery! DBError! Deactivate! DoubleCliked! DragDrop! DragEnter! DragLeave! DragWithin! EditChanged! GetFocus! Hide! HotLinkAlarm! Idle! ItemChanged! ItemError! ItemFocusChanged! Key! LineDow! LineLeft! LineRight! LineUp! LoseFocus! Modifed! MouseDown! MouseMove! MouseUp! Moved! Open! Other! PageDown! Comentários O alinhamento da barra de ferramentas. O tipo de evento a ser disparado pela função TriggerEvent. 329 PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias Valores Comentários PageLeft! PageRight! PageUp! PrintEnd! Printpage! PrintStart! RemoteExec! RemoteHotLinkStart! RemotHotLinkStop! Remoterequest! Remotesend! Resize! RetrieveEnd! RetrieveRow! Retrievestart! RowFocuschanged! ScrollHorizontal! ScrollVertical! Selected! SekectionChanged! Show! SQLPrewiem! SystemError! Timer! UpDateEnd! UpDatestart! 330 Adquirido por : Fabrício Moreira da Silva PowerBuilder 9.0 Básico Guia de Referência : Dados Enumerados Tipos de dados Enumerados Categorias VtextAlign UserObjects! WindowState WindowType WriteMode Valores Bottom! MultiLine! Top! VCEnter! CustomVisual! ExternaVisual! Maximized! Minimized! Normal! Child! Main! MD! MDHelp! Popud! Response! Aqppend! Replace! Comentários O alinhamento do texto. O tipo de objeto do usuário. O estado no qual a janela ou o programa estará em execução. Tipo da janela. O modo correspondente a função FileOpen. 331 Adquirido por : Fabrício Moreira da Silva