+ All Categories
Home > Documents > Programando Em Progress V8.2A

Programando Em Progress V8.2A

Date post: 15-Oct-2015
Category:
Upload: felipecomps
View: 145 times
Download: 8 times
Share this document with a friend

of 56

Transcript
  • Progress V8.2A

    Enviado por: CLAUDIUS EDELSBRUNNER

  • 2

    Progress V8.2A

    Por Sandro Matos Fbio Victor Pfeiff Claudius Edelsbrunner

  • 3

    Porto Alegre, agosto de 1998. Sumrio

    1 Conhecendo o Progress 1.1 O que Progress 1.2 Gerenciamento da Base de Dados Relacional Progress 1.3 DataServer para outros Sistemas de Gerenciamento 1.4 Client / Server Parameters: Arquivo .pf 1.5 Formas de Conexo a bancos Progress via sesses Progress 1.5.1 Mono-usurio 1.5.2 Multi-usurio 1.5.3 Exerccio: conectando a um banco Progress mono-usurio 1.6 Principais Extenses dos Arquivos Gerados pelo Progress 1.7 Variveis de Ambiente - Propath 1.8 Dump

    2 Procedure Editor 2.1 File operaes sobre arquivos 2.2 Edit 2.2.1 Desfazendo aes 2.2.2 Recortando, copiando e colando 2.2.3 Inserindo campos de tabelas 2.3 Search buscando/substituindo no programa corrente ocorrncias de texto 2.4 Buffers 2.4.1 Abrindo um novo buffer 2.4.2 Alternando entre buffers 2.5 Compile 2.5.1 Run 2.5.2 Check Sintax 2.6 O Menu de Contexto

    3 Conhecendo os Comandos do Progress 3.1 Comentrios em Progress 3.2 Tipo de Dados 3.3 Declarao de Estruturas Auxiliares 3.3.1 Variveis 3.3.2 Buffers Auxiliares 3.3.3 Tabelas Temporrias 3.3.4 Procedures e Funes 3.3.5 Parmetros 3.4 Exerccios 3.5 Comandos Bsicos 3.5.1 Atribuio 3.5.2 Entrada e Sada 3.5.3 Bloco e Repetio 3.5.4 Condicionais 3.5.5 Para manipulao de registros 3.5.6 Querys 3.5.7 Quebra de bloco 3.5.8 Execuo de programas externos

  • 4

    3.6 Funes mais Utilizadas 3.7 Exerccios (reservar um simples para a aula do dia seguinte) 3.8 Pr-processamento 3.8.1 Diretivas 3.8.2 Funes 3.9 Exerccio 3.10 Includes

    4 User Interface Builder 4.1 User Interface Builder 4.2 A Palette de Componentes

    5 Suporte a Interface Grfica embutida em Progress 4GL 5.1 Atributos Bsicos 5.2 Exerccios (utilizando screen-value, num-items, sensitive, ) 5.3 Mtodos Bsicos 5.4 Diretivas de Pr-processamento mais utilizadas 5.5 Exerccios

    6 Progress ACE 6.1 Apresentando o ACE 6.2 Apresentando o ADM 6.3 SmartObjects 6.4 Exerccios

    7 Links 7.1 Criando um Master Object a partir de um template 7.2 Tabelas Externas 7.2.1 O que so / para qu servem 7.2.2 Exerccio 7.3 Organizando Masters em Diretrios 7.4 O que um Link? 7.5 Exerccios 7.6 Tabela de Links possveis 7.7 Progress Advisor 7.8 Estratgias de Links para Mltiplos Record Targets 7.9 Definio de Links no UIB

    8 Paginando uma Aplicao 8.1 Paginando uma Aplicao 8.2 Links 8.3 Exerccios 8.4 Persistent Procedures

    9 Enviando Mensagens (Messaging) 9.1 Messaging 9.2 Messaging e Tipo de Links 9.3 ADM messaging para cada Tipo de Link 9.4 Event Procedure e Method Procedure 9.4.1 Event Procedure

  • 5

    9.4.2 Method Procedure 9.4.3 Comparao entere Event Procedure e Method Procedure 9.4.4 Como Trabalhar com Event Procedure 9.4.4.1 Dispatch 9.4.4.2 Notify 9.4.5 Como Alterar Event Procedures? 9.5 Mapa de Eventos

    10 SmartBrowse com Enable Column

    11 New-State Method

  • 6

    1 Conhecendo o Progress

    1.1 O que PROGRESS ?

    Progress um ambiente de desenvolvimento baseado na tecnologia cliente/servidor que visa oferecer solues informatizadas a problemas das inmeras reas de negcio existentes. Para atingir tal meta, o Ambiente de Desenvolvimento de Aplicaes Progress (ADE) oferece um completo e integrado conjunto de ferramentas de desenvolvimento grfico para produtivamente construir, testar, e manter aplicaes. No centro do ADE est a linguagem de 4 gerao Progress (4GL).

    A ferramenta apresenta recursos das modernas tcnicas de orientao a objetos, que busca reduzir custos de desenvolvimento e manuteno, aumento de produtividade, de qualidade, eliminao de redundncia de cdigo, entre outros. Como base temos o Data Dictionary (Dicionrio de Dados) que auxilia as definies de dados com armazenamento centralizado e suporte para anlise e projeto de ferramentas.

    1.2 Gerenciamento da Base de Dados Relacional Progress

    Para as demandas especiais de aplicaes Crticas, muitas empresas escolheram o Sistema de Gerenciamento de Base de Dados Relacional (RDBMS Relational Database Management System) Progress. O Progress RDBMS totalmente integrado arquitetura Progress DataServer. uma soluo de base de dados de alta performance para aplicaes do mundo real. Aplicaes Crticas exigem no somente a habilidade de suportar alto volume de processamento de transaes simples, mas tambm alto rendimento e baixo tempo de resposta para transaes mais complexas que integram vrias aplicaes de negcio.

    O Progress RDBMS possui um conjunto de recursos com o objetivo especfico de suportar tais ambientes onde a execuo de um alto volume de transaes, integridade de dados garantida e alta disponibilidade so necessrias. O mximo rendimento proporcionado por capacidades tais como:

    lock a nvel de registro, que minimiza a conteno de dados; estratgias de otimizao de consultas que melhoram o tempo para

    recuperao de dados; uma inteligente buferizao de registros que reduz o trfego da rede. A integridade dos dados assegurada atravs de caractersticas de recovery. O

    Progress RDBMS projetado com flexibilidade para tirar o mximo proveito das caractersticas nicas de desempenho de diferentes plataformas e sistemas operacionais. E, quando utilizado no ambiente cliente/servidor, com configurao baseada em rede, as aplicaes Progress podem comunicar-se com o RDBMS, utilizando qualquer protocolo padro de rede.

    1.3 DataServer Para Outros Sistemas de Gerenciamento

    Para quem deseje acessar dados ou executar aplicaes utilizando sistemas de gerenciamento de bases de dados no-Progress, existe o Progress DataServer, que

  • 7

    suporta a maioria das bases de dados e sistemas de arquivos de terceiros. Esta ferramenta possibilita gerenciamento e acesso de alta performance, portabilidade das aplicaes atravs de gerenciadores de dados e suporte a caractersticas especficas da base de dados.

    Alguns dos gerenciadores de dados suportados: Oracle, RMS, Sybase, RDB/VMS, OS/400, Object Store, DB2, Albase, ODBC, C-Isam, Informix. 1.4 Client Server Parameters: Arquivo .pf

    -E # European Numeric Format -d dmy # Date Format -yy 1920 # Century -cpinternal iso8859-1 # Internal Code Page -db u:\sports\sports.db # Database Name -1 # Single-user Mode -H meta1 # Host Name -S ssports # Service Name -N tcp # Protocol Name -T C:\TMP # Temporary Directory File -trig e:\trg\ # Trigger Directory -Mm 8192 # Message Buffer Size -s 40 # Stack Size -mmax 2048 # Maximum Memory -Mr 2048 # Record Buffer Size -TB 08 # Speed Sort -TM 10 # Merge Number -p _desk.p # Program Manager

    Obs.: Parmetros client-server so case-sensitive. O mesmo caracter (ou conjunto de caracteres ) pode especificar diferentes parmetros sesso Progress. Exemplo: -S (especifica o servio utilizado para conexo a um servidor de banco Progress) e -s (tamanho da pilha alocada no client).

    1.5 Formas de Conexo a bancos Progress via sesses Progress

    1.5.1 Mono-usurio

    Uma conexo mono-usurio permite a somente um nico usurio acessar a(s) base(s) conectada(s) desta forma. O usurio monopoliza o(s) banco(s) de dado(s).

    1.5.2 Multi-usurio

    Progress, no entanto, destinado ao desenvolvimento de aplicaes baseado na arquitetura client-server (um programa cliente faz uma solicitao a um programa servidor, que usualmente est executando em uma mquina remota).

    O acesso concorrente (ou seja, vrios usurios disputando um registro) gerenciado por um programa conhecido por servidor de banco de dados. Os usurios fazem solicitaes a esse programa, que as responde conforme a sua disponibilidade e a do registro.

  • 8

    1.6 Principais Extenses dos Arquivos Gerados pelo Progress

    .p Procedures e Triggers de Banco de Dados

    .i Includes

    .r Programas compilados

    .db Base de Dados

    .bi Before Image da Base de Dados

    .ai After image da Base de Dados

    .lk Lock da base da dados

    .lg Registro das todas as ocorrncias relativas a uma base de dados

    .w Smart Windows, Smart Dialog, Smart Frames, Smart Browsers, Smart Viewers, Smart Panels e Smart Querys .wx Templates

    .wbx Quando compilada um objeto contendo um componente VBX/OCX, gerado um arquivo de mesmo nome com esta estenso .uib Arquivo temporrio do User Interface Builder (UIB) .ped Arquivo temporrio do Procedure Editor .dbg Arquivo temporrio do Application Debugger .df Dump de definio da Base de Dados .d Dump dos dados .ds Dados ou definies que foram carregados para a Base de Dados atravs do comando Load .e Log de erro gerado na carga de dados ou definies

    1.7 Variveis de Ambiente - Propath

    Progress possui algumas variveis de ambiente. A mais importante para quem desenvolve software utilizando Progress o propath. Esta varivel contm os diretrios, separados por vrgulas, que a sesso Progress enxerga quando tem que procurar um programa para execuo. A importncia de conhec-la simples: se voc coloca um programa em um diretrio que no est presente no propath, e tenta execut-lo, o Progress lhe devolver uma mensagem de erro com o seguinte texto: not found..

    Seu valor pode ser alterado por um administrador de sistemas conforme a necessidade.

    1.8 Dump

  • 9

    ADD TABLE "CLIENTE" DESCRIPTION "Cadastro de Clientes" DUMP-NAME "cliente" LABEL "Cliente Geral"

    ADD FIELD "numcliente" OF "CLIENTE" AS INTEGER DESCRIPTION "Nmero do Cliente" FORMAT "999999999" LABEL "Nmero do Cliente" VALEXP "numcliente > 0" VALMSG "Nmero do Cliente invlida" HELP "Nmero do Cliente." ORDER 10 MANDATORY

    ADD FIELD "nomcliente" OF "CLIENTE" AS CHAR DESCRIPTION "Nome do Cliente" FORMAT "X(80)" LABEL "Nome do Cliente" VALEXP "nomcliente """"" VALMSG "Nome do Cliente invlida" HELP "Nome Completo do cliente" ORDER 30 MANDATORY

    ADD INDEX "XPKCLIENTE" ON "CLIENTE" UNIQUE INDEX-FIELD "numcliente" ASCENDING

    UPDATE PRIMARY INDEX "XPKCLIENTE" ON "CLIENTE"

    ADD INDEX "XAK1CLIENTE" ON "CLIENTE" UNIQUE INDEX-FIELD "nomabrev" ASCENDING

  • 10

    2 Procedure Editor

    O Procedure Editor uma Window Editor provida de funes auxiliares edio de cdigo Progress. O desenvolvedor pode fazer uso do Procedure Editor para criar, escrever, compilar e executar programas.

    O presente captulo dedica-se a conduz-lo pelas funcionalidades desta ferramenta mais utilizadas no dia-a-dia.

    2.1 File Operaes Sobre Arquivos (exemplo p-c02e01.p)

    2.2 Edit

  • 11

    2.2.1 Desfazendo Aes Este comando desfaz a ltima ao executada pelo usurio.

    2.2.2 Recortando, copiando e colando Semelhante a qualquer aplicao Windows que possua estas opes.

    2.2.3 Inserindo campos de tabelas Uma opo bastante interessante oferecida pelo Procedure Editor: se deseja-se

    incluir um ou mais campos de uma tabela no cdigo-fonte que se est construindo, seleciona-se esta opo.

    H trs listas de seleo: Databases apresenta todas as base de dados ao qual a sesso cliente Progress

    est conectada;

  • 12

    Tables mostra todas as tabelas contidas na base selecionada na lista Databases;

    Fields apresenta todos os campos definidos para a tabela selecionada na lista Tables.

    Note que s possvel seleo mltipla na lista Fields. O prefixo acrescido ao campo quando de sua insero no cdigo-fonte opo

    do construtor do cdigo.

    2.3 Search buscando/substituindo no programa corrente ocorrncias de texto

    2.4 Buffers

    Atalhos de teclado para os principais comandos: F7 Torna o prximo buffer o corrente (se o ltimo, retorna ao

    primeiro)

  • 13

    2.5 Compile

    O editor do Progress possui recursos para a execuo direta de comandos e programas, e para a checagem da sintaxe do cdigo que foi escrito ou alterado.

    Atalhos de teclado para os principais comandos: F2 Executa o programa/comando do buffer corrente do editor Shift-F2 Verifica a sintaxe

    2.6 O Menu de Contexto

    Contm atalhos para algumas das funes mais utilizadas dos itens de menu j abordados. Acessvel via boto direito do mouse.

  • 14

    3 Conhecendo os Comandos do Progress

    Dica Acesso ao Help Para conhecer a sintaxe de algum comando ou tirar alguma dvida, basta marcar o comando escrito no Procedure Editor e pressionar a tecla F1.

    3.1 Comentrios em Progress

    A linguagem 4GL Progress permite a insero de comentrios em um programa:

    /* Abre um comentrio */ Encerra um comentrio

    Tudo o que escrito entre estes dois tokens ignorado pelo compilador. Muito til para:

    identificar um programa; descrever determinada soluo dentro do programa (porqu foi fito de um

    jeito e no de outro). Podem existir comentrios aninhados.

    3.2 Tipo de Dados

    Os tipos de dados comumente utilizados na implementao de aplicaes Progress so:

    - integer - character - date - decimal - logical - handle - rowid

    3.3 Declarao de Estruturas Auxiliares

    3.3.1 Variveis

    DEFINE VARIABLE AS NO-UNDO. DEFINE VARIABLE LIKE NO-UNDO.

    Exemplos: DEFINE VARIABLE variavel AS integer NO-UNDO INITIAL 100. DEFINE VARIABLE variavel AS integer NO-UNDO. DEFINE VARIABLE variavel Like Table.Campo NO-UNDO. DEFINE NEW SHARED VARIABLE variavel AS logical INIT YES. DEFINE SHARED VARIABLE variavel AS logical INIT YES. DEFINE NEW GLOBAL SHARED VARIABLE variavel AS char NO-UNDO. DEFINE SHARED VARIABLE variavel AS char NO-UNDO. DEFINE VARIABLE variavel AS integer NO-UNDO EXTENT 03.

  • 15

    3.3.2 Declarao de Buffers Auxiliares

    Um buffer uma referncia a uma tabela pertencente a um banco de dados. Qualquer programa escrito em Progress sempre tem, por default, tantos buffers pr-definidos quantas so as tabelas pertencentes aos bancos aos quais est conectado o client Progress um para cada tabela. Se temos uma tabela de nome CLIENTE em um banco ao qual estamos conectados, ento temos o buffer CLIENTE pr-definido para uso. por meio de buffers de tabelas que acessamos estas e seus atributos (tambm conhecidos por campos).

    H situaes, contudo, que nos obrigam a definir buffers auxiliares. Pode-se, por exemplo, precisar de dois indicadores econmicos simultaneamente para compar-los. Problemas de hierarquias (auto-relacionamentos) exigem buffers auxiliares.

    Sintaxe resumida (maiores detalhes Help Progress): DEFINE BUFFER FOR .

    Exemplos: DEFINE BUFFER bf-cargo FOR cargo. DEFINE NEW SHARED BUFFER bf-funcao FOR funcao. DEFINE SHARED BUFFER bf-funcao FOR funcao.

    3.3.3 Tabelas Temporrias

    Pode-se definir uma tabela pelo tempo de vida de um programa, ou mesmo para trocar informaes entre programas. Para tal, deve-se definir a mesma.

    A sintaxe para definio de temp-tables bastante abrangente, permitindo que se defina tabelas auxiliares com todas as caractersticas encontradas em tabelas criadas via Dicionrio de Dados.

    Exemplos: DEFINE TEMP-TABLE tt-funcao LIKE FUNCAO.

    DEFINE NEW GLOBAL SHARED TEMP-TABLE tt-tarefa NO-UNDO FIELD tarefa-cod LIKE TAREFA.TAREFA-COD

    FIELD t-deno LIKE TAREFA.DENOMINA FIELD funcao-cod LIKE FUNCAO.FUNCAO-COD FIELD f-deno LIKE FUNCAO.DENOMINA FIELD status AS CHAR INDEX xpkindprim IS PRIMARY UNIQUE tarefa-cod.

    3.3.4 Procedures e Funes

    Muitas vezes, deseja-se executar a mesma poro de cdigo em mais de um lugar de nosso programa, ou mesmo em mais de um programa. Um exemplo tpico so as regras de negcio que regem uma aplicao. Soluo: abrir o programa, copiar a poro de interesse e colar no lugar onde a queremos, certo?

    Correto, se voc gosta de passar trabalho. Suponha que a regra de negcio mude. Voc s ter que abrir todos os programas que contm aquela poro de cdigo e alter-los

  • 16

    O melhor isolar esta lgica num nico lugar, executando-a de onde quiser. Se a Equipe Econmica resolve de um dia para o outro alterar algumas regras, e isso afeta um programa seu, basta alterar um lugar.

    Progress oferece dois mecanismos para auxiliar nesse processo: procedures e funes (h um terceiro mecanismo, que ser discutido posteriormente).

    Digite, no Procedure Editor, Procedure Statement. Selecione esta expresso e acompanhe a sintaxe.

    Agora apague a expresso anterior e digite, no Procedure Editor, Function Statement. Selecione esta expresso e acompanhe a sintaxe.

    3.3.5 Parmetros

    Procedures e funes podem receber parmetros (Input Parameters) e devolver resultados atravs dos mesmos parmetros pelos quais recebem (Output Parameters) ou por outros parmetros (Input-Output Parameters).

    Da mesma forma que variveis comuns, parmetros tem um tipo (que pode ser herdado de um campo de tabela ou definido a partir dos tipos bsicos). Procedures e funes diferem na sintaxe como so definidos os parmetros.

    Exemplo de definio de parmetros para procedures PROCEDURE EXEMPLO :

    DEFINE INPUT PARAMETER parametro AS integer NO-UNDO.

    DEFINE OUTPUT PARAMETER parametro LIKE Tabela.Campo NO-UNDO.

    DEFINE INPUT-OUTPUT PARAMETER parametro LIKE Tabela.Campo NO-UNDO.

    END PROCEDURE.

    Exemplo de definio de parmetros para funes FUNCTION EXEMPLO RETURNS decimal

    (INPUT vp-a as integer, OUTPUT vp-b as character,

    INPUT-OUTPUT vp-c as logical).

    RETURN . END FUNCTION.

    3.4 Exerccios

    1) Abra o procedure editor. Crie um cabecalho com as seguintes informaes, utilizando comentrios (cada informao deve iniciar nova linha):

    Autor; Data; Hora; Descrio (pode ocupar mais de uma linha); Verifique a sintaxe do programa; Salve no diretrio c:\prow82a\curso\exercicio com o nome p-c03x01.p. Feche o programa.

  • 17

    2) Sero necessrias, para o prximo programa: Trs variveis do tipo integer; Uma varivel do tipo decimal; Uma varivel do tipo logical; Uma procedure, de nome p-baskara; Uma funo, de nome f-baskara, que retorna um valor decimal. Defina-as. Ao concluir, verifique a

    sintaxe.

    3) Selecione e copie o que foi feito no exerccio anterior.

    4) Abra o programa feito no exerccio 1, e logo abaixo dos comentrios, cole o que foi copiado no exerccio anterior. Verifique a sintaxe. Salve as alteraes.

    5) Defina trs parmetros de entrada para a procedure p-baskara, todos do tipo inteiro, e um parmetro de sada, do tipo decimal, respectivamente com os seguintes nomes: vp-a, vp-b, vp-c e vp-raiz.

    6) Abra, em outro buffer, o arquivo baskara-p.p e copie seu contedo. Feche este buffer e retorne a seu programa. Cole o que foi copiado no corpo da procedure p-baskara (logo aps os parmetros da mesma). Verifique a sintaxe. Salve as alteraes.

    7) Defina trs parmetros de entrada para a funo f-baskara, todos do tipo inteiro, respectivamente com os seguintes nomes: vp-a, vp-b, vp-c.

    8) Abra, em outro buffer, o arquivo baskara-f.p e copie seu contedo. Feche este buffer e retorne a seu programa. Cole o que foi copiado no corpo da procedure f-baskara. Verifique a sintaxe. Salve as alteraes.

    9) Abra, em outro buffer, o arquivo baskara-exec.p e copie seu contedo. Feche este buffer e retorne a seu programa. Cole o que foi copiado duas linhas abaixo da funo. Verifique a sintaxe. Salve as alteraes. Execute o programa.

  • 18

    3.5 Comandos Bsicos

    3.5.1 Comandos de Atribuio

    Assign = . Atribui a o resultado de .

    3.5.2 Comandos de Entrada/Sada H varios comandos em Progress que podem ser utilizados para efetuar

    operaes de entrada/sada. Os principais: Display Update Put Message

    3.5.3 Comandos de bloco e de repetio

    End Indica o fim de um bloco iniciado com um PROCEDURE, FUNCTION, DO,

    REPEAT, CASE ou FOR EACH. No caso de procedures e funes, pode-se encerrar tambm com End Procedure. ou End Function..

    Do Basicamente, agrupa comandos em um nico bloco. O bloco aberto por este

    comando deve ser encerrado por um comando End. Exemplo: c:\Prow82a\Curso\Exemplos\p-c03e01.p

    Repeat Inicia um bloco de comandos que so processados repetidamente, at que uma

    condio de sada definida ocorra. Exemplo: c:\ Prow82a\Curso\Exemplos\p-c03e02.p

    3.5.4 Comandos Condicionais (ou de Controle de Fluxo)

    if then else A execuo de um bloco fica condicionada a uma expresso. Exemplo: c:\Prow82a\Curso\Exemplos\p-c03e01.p

    case

    Quando, a partir da avaliao de uma expresso, tem-se mltiplas possibilidades de execuo (e no somente duas, como no comando if), utiliza-se o comando case.

    Obs.: O comando suporta dois encerramentos de bloco: End. e End Case.. Exemplo: c:\Prow82a\Curso\Exemplos\p-c03e03.p

    3.5.5 Comandos para manipulao de registros

    Create . Cria um novo registro na tabela associada ao buffer.

  • 19

    Delete . Exclui um registro da tabela associada ao buffer.

    Find where . Busca um registro na tabela especificada com o filtro de seleo informado. Exemplo: c:\Prow82a\Curso\Exemplos\p-c03e04.p

    For Junto com o comando find, um dos comandos mais importantes e

    poderosos do Progress 4GL. uma instruo de bloco que permite percorrer uma tabela inteira. Se o registro atende seleo imposta, o bloco interno ao comando executado, estando o registro selecionado disponvel para consulta, excluso, alterao, etc.

    Exemplos c:\Prow82a\Curso\Exemplos\p-c03e05.p c:\Prow82a\Curso\Exemplos\p-c03e06.p

    3.5.6 Querys

    Querys so outra forma oferecida pelo Progress para se trabalhar com tabelas. As diferenas bsicas entre estas e o comando For so:

    querys no delimitam um bloco; a abertura e o fechamento de uma query so comandos independentes, que no delimitam uma transao;

    uma query aberta no significa um registro disponvel para manipulao. Deve ser especificado query que se deseja um registro (por exemplo, via comando Get).

    Define query Define uma query a ser utilizada.

    Open query Abre uma query. Esta pode ter sido previamente definida, ou sua definio pode fazer parte deste comando.

    Close query Fecha uma query previamente aberta. Exemplo: c:\Prow82a\Curso\Exemplos\p-c03e07.p

    3.5.7 Comandos de quebra de bloco

    So comandos utilizados quando se deseja evitar que um bloco execute at o fim.

    Next Todos os comandos at o fim do bloco so desprezados. Se faz parte de uma

    iterao, segue imediatamente para a prxima iterao.

    Leave Abandona o bloco, mesmo que se trate de um bloco iterativo. As iteraes

    seguintes no so efetuadas.

    Return Utilizado em procedures e funes. Quando encontrado, fora o fim da

    execuo da rotina. No caso de ser uma funo, uma expresso a acompanha.

  • 20

    Exemplos: Funo c:\Prow82a\Curso\Exercicio\p-c03x01.p

    c:\Prow82a\Curso\Exercicio\p-c03r01.p Procedure c:\Prow82a\Curso\Exemplos\p-c03e08.p

    Quit Encerra a execuo da aplicao, retornando ao programa chamador, ou ao

    sistema operacional (se o programa est executando diretamente sobre o client run-time).

    3.5.8 Comando para Execuo de Procedures e Programas Externos

    RUN Utilizado para executar internal procedures (que fazem parte do mesmo

    programa de onde a chamada feita), external procedures (procedures de programas externos) ou at outros programas.

    Exemplos: Internal Procedures c:\Prow82a\Curso\Exemplos\p-

    c03e08.p External Procedures c:\Prow82a\Curso\Exemplos\p-

    c03e09.p Programas Externos c:\Prow82a\Curso\Exemplos\p-

    c03e10.p

    3.6 Funes mais utilizadas

    3.6.1 Para converso de tipos c:\Prow82a\Curso\Exemplos\p-c03e14.p

    Date(string) Date(ms,dia,ano) Integer Decimal String Rowid

    3.6.2 Sobre registros c:\Prow82a\Curso\Exemplos\p-c03e15.p

    Available Can-find

    3.6.3 Sobre listas c:\Prow82a\Curso\Exemplos\p-c03e16.p

    Entry Num-entries Lookup Substring Index Replace

    3.6.4 Sobre strings Begins Matches Contains

    3.6.5 Funo Condicional If Then Else

  • 21

    3.7 Exerccios

    1) Exibir o contedo de todos os registros da tabela Customer.

    2) Exibir o contedo de todos os registros da tabela State.

    3) Executar as seguintes operaes sobre a tabela Customer: criar um novo registro, atribuindo valores a seus campos de forma consistente; exibir o contedo do registro criado; alterar o registro criado; exibir o contedo do registro alterado; achar o ltimo registro da tabela e apresentar uma mensagem ao usurio perguntando se ele deseja

    exclu-la ou no. Caso o usurio queira, proceder excluso do registro.

    4) Executar as seguintes operaes sobre a tabela Order: procurar um registro na tabela de tal forma que no seja encontrado; ao invs de retornar uma mensagem de erro do Progress, programar uma mensagem de erro para

    mandar ao usurio, indicando a inexistncia do registro.

  • 22

    3.8 Pr-processamento

    Exemplos: c:\Prow82a\Curso\Exemplos\p-c03e11.p c:\Prow82a\Curso\Exemplos\p-c03e12.p

    c:\Prow82a\Curso\Exemplos\p-c03e13.p

    3.8.1 Diretivas

    &GLOBAL-DEFINE &SCOPED-DEFINE &UNDEFINE &IF &THEN &ELSEIF &ELSE &ENDIF

    3.8.2 Funes

    DEFINED (preprocessor)

    3.9 Exerccio 1) A tabela Customer possui um campo que determina o limite de crdito que um cliente possui

    junto a nossa empresa Credit-Limit. Suas tarefas so: mostrar em tela os campos Cust-num, Name, Contact e Phone de todas as ocorrncias da

    tabela Customer que possuem limite de crdito maior que um valor qualquer, sendo que esse valor ser definido em um preprocessor (ou seja, no filtro a ser utilizado sobre a tabela, deve-se usar uma referncia ao preprocessor, e no o valor fixo). Inicialmente, fixe o valor em $40.000,00.

    3.10 Includes

    Pode-se agregar a um programa trechos de cdigo escritos pores espalhadas por vrios arquivos. Para tal, basta escrever o trecho de cdigo que se deseja incluir no programa, salv-lo e, no programa que em se deseja utiliz-lo, fazer referncia a ele usando a seguinte sintaxe: { [ ]}

    Os parmetros so opcionais (sua existncia determinada pelo programador e pelo progblema que se est resolvendo). Dentro do include, para fazer refencia a um parmetro, basta usar, entre chaves, o nmero de ordem do parmetro desejado ( {1}, {2} ).

    Se utilizado para bibliotecas de procedures, deve-se ter em mente as seguintes diferenas entre executar uma procedure externa e utilizar um include:

    o cdigo-objeto gerado pelo Progress incorpora todo o cdigo do include, em tempo de compilao (se o programa no foi previamente compilado - execuo);

    executar procedures e programas externos exige passagem de parmetros o programa ou a procedure externa no conhece as estruturas internas do programa chamador (o mesmo no vale para internal procedures).

    Exemplo: c:\Prow82a\Curso\Exemplos\p-c03e12.p c:\Prow82a\Curso\Exemplos\p-c03e13.p

  • 23

    4 UIB User Interface Builder

    O User Interface Builder a ferramenta de programao visual do ambiente de desenvolvimento Progress.

    O cdigo gerado pelo UIB apresenta as seguintes sees:

    Definitions Main Block Triggers Procedures Functions

    4.1 User Interface Builder

    Novo Objeto Executar um programa

    Edio de Cdigo para o Widget Ativo na Tela

    Propriedades do Objeto Selecionado

  • 24

    4.2 Palette de Componentes

    Pointer

    Frame Legenda

    Componentes de Acesso a Banco Widgets Componentes OCX Smarts

  • 25

    5 Suporte a Interface Grfica embutida em Progress 4GL

    Progress 4GL implementa um enfoque orientado a objetos em vrios pontos distintos de sua ferramenta. A comear por seus widgets. Cada widget possui um conjunto de atributos e mtodos de instncia comuns sua classe (um combo-box ou um toggle-box em nossa aplicao, nada mais so que instncias de suas respectivas classes, Combo-Box e Toggle-Box). O valor contido em um atributo pode diferir entre duas instncias de uma mesma classe, mas o acesso a este atributo feito da mesma maneira em ambos. A sintaxe utilizada para referncia a atributos e mtodos praticamente idntica. Atributos < widget >:< atributo > Mtodos < widget >:< mtodo(, ,) >

    5.1 Atributos Bsicos c:\Prow82a\Curso\Exemplos\w-c05e17.w

    Visible Controla se o widget est ou no visvel.

    Sensitive Controla se o widget est ou no habilitado.

    Screen-value Contm o valor em tela de um componente (contido no screen buffer). No

    necessariamente o valor real armazenado no widget.

    Checked O widget est ou no selecionado. Aplicvel a toggles e e itens de menu toggle.

    Read-only S aplicvel aos widgets Browse, coluna de Browse, Editor e Menu-item.

    List-items

    Num-items

    5.2 Exerccios

    5.3 Mtodos Bsicos

    add-first / add-last (Combo-box) delete

    5.4 Diretivas de Pr-processamento mais utilizadas

    {&SELF-NAME} {&FRAME-NAME} {&BROWSE-NAME}

  • 26

    {&OPEN-QUERY-{&BROWSE-NAME}} {&DISPLAYED-FIELDS} {&ENABLED-FIELDS}

    5.5 Exerccios

  • 27

    6 Usando Progress ACE

    6.1 Apresentando o ACE

    O ACE (Application Component Environment) a ferramenta que permite a construo de aplicaes na verso 8. Ela acrescenta ao UIB diversas caractersticas como o SMARTOBJECT palette, Wizards, Cue Cards, Progress Advisor e novos Include files.

    6.2 Apresentando o ADM

    O ADM (Application Development Model) um novo mtodo para desenhar e construir aplicaes. Ela possibilita a rpida construo de aplicaes a partir do reuso de objetos e da fcil manuteno de componentes e, consequentemente, de sistemas.

    6.3 SmartObjects

    SmartWindow (*) w-nomearq.w SmartFrame (*) f-nomearq.w SmartDialog (*) d-nomearq.w SmartFolder SmartPanel (navigation) p-nomearq.w SmartPanel (update) p-nomearq.w SmartQuery q-nomearq.w SmartBrowser b-nomearq.w SmartViewer v-nomearq.w

    (*) Object Containers

    Reuso de cdigo atravs de referncia

    Todos os SmartObjects so instncias run-time persistentes de programas Progress. desnecessrio copiar fisicamente o cdigo fonte 4GL do objeto para um SmartContainer. Um desenvolvedor pode dar manuteno a todas as instncias de um determinado SmartObject alterando um nico arquivo. Este ganho em manuteno possvel porque o SmartContainer apenas referencia os objetos que contm.

    6.4 Exerccios:

    1) Desenvolver um submdulo de pesquisa seguindo os passos abaixo: criar um SmartFrame; sem usar o recurso de SmartFolders, criar trs browser, colocando-os em trs pginas distintas; criar um radio-set com os valores Customer, Order e Salesrep; criar um fill-in;

  • 28

    criar um boto para pesquisa; programar a tela de pesquisa de tal forma que, ao selecionar um dos valores do radio-set, ativada

    a pgina disponibilizando o browse correspondente. Ao pressionar o boto de disparo da pesquisa, deve ser aberta a query de acordo com o valor informado no fill-in.

    2) Desenvolver um submdulo que compreenda os seguindes cadastros, seguindo os procedimentos correspondentes:

    Cadastro de Customer - crie um SmartViewer; - neste SmartViewer, crie um fill-in; - salve o SmartViewer; - crie uma SmartWindow, instanciando o SmartViewer anteriormente criado nesta; - nesta SmartWindow, crie botes para as operaes que voc imagina possveis sobre um

    cadastro; - programe a tela de cadastro de Customer de tal forma que seja efetuada validao para evitar

    duplicao de nomes na base de dados e seja ajustada a interface* de acordo com a operao que est sendo executada.

    Cadastro de Order - crie uma SmartViewer; - neste SmartViewer, crie um combo-box e um fill-in; - salve o SmartViewer; - crie uma SmartWindow, instanciando o SmartViewer anteriormente criado nesta; - nesta SmartWindow, crie botes para as operaes que voc imagina possveis sobre um

    cadastro; - programe a tela de cadastro de Order de tal forma que o combo-box traga para o usurio a lista

    de todos os Customers. Tal como o cadastro de Customer, deve ser feita validao quanto duplicao de nomes na base de dados, bem como o ajuste de interface* de acordo com a operao que est sendo executada.

    Cadastro de Invoice - crie um SmartViewer; - neste SmartViewer, crie um fill-in e um editor; - salve o SmartViewer; - crie uma SmartWindow, instanciando o SmartViewer anteriormente criado nesta; - programe a tela de tal forma que o usurio informe a Data (Invoice-Date) e o total pago

    (Total-Paid). Assim como nos dois cadastros anteriores, faz-se necessria a validao de nomes e o ajuste de interface* de acordo com a operao.

    * validao dinmica

    3) De acordo com os procedimentos, desenvolver um submdulo para atribuir as tarefas, anteriormente cadastradas, s suas funes.

    3.1 - crie uma SmartWindow; - crie um SmartBrowser; - crie um boto; - o primeiro browse deve trazer todos os cargos, enquanto o segundo deve trazer as funes do

    cargo selecionado anteriormente; - SmartBrowser deve ser carregado com todas as funes cadastradas no sistema.

    3.2 - Criar uma SmartDialog; - crie dois browsers; - crie dois botes; - crie um fill-in; - ao ser pressionado o boto da tela anterior chamada a SmartDialog; - o fill-in deve ser preenchido com a denominao da funo escolhida na SmartWindow; - o primeiro browse deve ser carregado com todas as tarefas cadastradas no sistema, enquanto

    que o segundo deve trazer todas as tarefas executadas por aquela funo; - os botes devem permitir alterar o domnio de tarefas por funo;

  • 29

    - devem ser programadas validaes para impedir atribuir tarefas j existentes.

  • 30

    7 Links

    Ao colocar SmartObjects em um Container voc deve interlig-los atravs de Links.

    7.1 Criando um Master Object a partir de um Template

    A criao de um Master Object pode ter diversas razes: tirar proveito da tecnologia SmartObjects; diminuir a complexidade de um programa, criando-se programas menores e

    integrando-os dividir para conquistar; a mesma lgica utilizada em tantos programas/aplicaes quanto se queira.

    Obs. A alterao de um Master Object afeta todos os Containers que o possuam encapsulado.

    7.2 Definindo Tabelas Externas

    7.2.1 O que so / para qu servem

    possvel, para SmartBrowsers e SmartQueries, definir uma ou mais tabelas externas. A utilidade vem do que segue:

    Consultas a vrias tabelas em uma mesma consulta so mais pesadas que consultas a uma tabela em uma consulta;

  • 31

    Com este mecanismo, pode-se encadear consultas. O registro lido de uma consulta pode ser utilizado para join em outra.

    Para definir tabelas externas, clique sobre a opo Procedure Properties e adicione o nome das tabelas externas sua query.

    Exemplo: p:\curso82a\Exemplos\f-c05e19.w

    7.2.2 Exerccio 1) Adicione ao exemplo um detalhe de pedidos de cliente (Order of Customer).

    7.3 Organizando Masters em Diretrios

    Existe um arquivo chamado Smart.cst (geralmente contido na pasta \dlc\src\template\) que contm as configuraes dos objetos contidos na palette. Para alterar o caminho de busca destes objetos altere a linha DIRECTORY-LIST .

    #SmartBrowser &Default UP-IMAGE-FILE adeicon/wp_up 28,196 DOWN-IMAGE-FILE adeicon/wp_down 28,196 LABEL SmartBro&wser DB-CONNECT NEW-TEMPLATE src/adm/template/browser.w DIRECTORY-LIST .,adm/samples FILTER b-*.*,b-*.w,b-*.r,*.* TITLE Choose SmartBrowser

    Atualize na palette, atravs da opo Menu Use Custom... , com o nome do novo arquivo padro a ser utilizado.

  • 32

    7.4 O que um link ?

    Um link uma conexo entre dois SmartObjects que define como eles interagem e quais os tipos de mensagens eles podem trocar.

    Tipo de Link O que ele envia Record RowId de um registro TableIO Mensagem para Incluso, Alterao e

    Excluso de registro Navigation Mensagem para ir para o prximo registro,

    anterior, primeiro ou ltimo registro

    7.5 Exerccios

    1) Coloque os links necessrios.

    |< < > >|

    1.1

    Clientes

    |< < > >| 1.2

    Clientes

    Detalhe de Clientes

    |< < > >| 1.3 Browse Clientes

  • 33

    7.6 Tabela de Links Possveis

    SOURCE Link Type Targets Possveis SmartPanel Navigation Navigation SmartQuery SmartPanel Update

    TableIO SmartViewer SmartBrowser

    SmartPanel Transaction

    TableIO SmartViewer SmartBrowser SmartQuery

    SmartBrowser

    Record SmartViewer SmartBrowser SmartQuery

    SmartViewer

    Record SmartViewer SmartBrowser SmartQuery

    SmartQuery

    Record SmartViewer SmartBrowser SmartQuery

    Qualquer SmartObject State Qualquer SmartObject

    Detalhe de Clientes

    |< < > >| 1.4

    Clientes

    Add Update Delete Reset

  • 34

    7.7 Progress Advisor

    7.8 Estratgias de links para mltiplos Record Targets

    Alternativa 1 Alternativa 2

    Observao: o que ocorre no exemplo abaixo?

    Q

    R

    R

    Q

    R

    R

    Q

    R

    R

  • 35

    7.9 Definio de links no UIB

    Advisor

    Link Editor

  • 36

    8 Paginando uma Aplicao

    8.1 Paginando uma Aplicao

    Para paginar uma window deve-se utilizar o seletor de pginas (ou o item Edit - Goto Page do menu).

    Caractersticas da paginao:

    Objetos colocados na pgina 0 so sempre visveis Procedure oferecida pelo ADM para mudana de pgina:

    RUN Select-Page(n).

    SmartFolders So widgets que controlam automaticamente as mudanas de pgina (quando linkadas ao seu container). possvel, com um pouco de programao, controlar a mudana de pgina utilizando outros widgets (por exemplo, radio-sets). O SmartFolder apenas oferece uma maneira simples, rpida e elegante de faz-lo.

    Duplo Click

  • 37

    Exemplo de utilizao de SmartFolder: 1. Crie uma Window 2. Insira os objetos desejados na pgina 0

    3. Crie um SmartFolder 4. Especifique os labels das pginas

    5. Instancie os objetos em suas pginas, conforme desejado.

  • 38

    8.2 Links

    8.3 Exerccios:

    1) Altere o programa-exemplo c:\Prow82a\Curso\Exemplos\w-c08e20.w, de modo que a mudana de pgina seja acionada por botes, e no mais por um SmartFolder (o qual deve ser excludo).

    2) Monte um mdulo de uma aplicao seguindo os seguintes procedimentos: crie uma SmartWindow; crie um SmartBrowser; instancie o SmartBrowser na pgina 0 da SmartWindow; crie, nesta SmartWindow, dois botes; crie um SmartViewer; instancie o SmartViewer na pgina 1 da SmartWindow; crie um segundo SmartBrowser; instancie o SmartBrowser na pgina 2 da Smart Window; ao ser executada a SmartWindow, o browse principal dever ser carregado com todas as funes

    do sistema, de tal forma que o SmartViewer traga os dados correspondentes dos atributos da funo selecionada e o SmartBrowser da pgina 2 seja carregado com todas as tarefas executadas por algum que exerce a funo.

    3) Desenvolver um mdulo semelhente ao solicitado no exerccio 1, usando, porm, folders ao invs de botes.

  • 39

    8.4 Persistent Procedures

    Embora executada de maneira diferente, uma persistent procedure semelhante a outra procedure qualquer. Quando uma persistent procedure executada, esta fica residente em memria at que seja explicitamente excluda.

    Exemplo: Suponha que seja preciso executar duas SmartWindows ao mesmo tempo. Ao selecionar um registro na primeira SmartWindow possvel visualizar, de maneira sincronizada, dados correspondentes na segunda SmartWindow.

  • 40

    9 Enviando Mensagens (Messaging)

    9.1 Messaging

    o mecanismo pelo qual SmartObjects executam internal procedures de outro SmartObject.

    Exemplo: Toda SmartQuery sabe como enviar um registro para um SmartViewer. Todo

    SmartViewer sabe como receber e exibir o registro informado pela SmartQuery.

    SmartViewer

    Internal Procedures

    adm-display-fields

    adm-row-available

    SmartQuery

    Internal Procedures

    adm-open-query

    send-records

    1

    2

  • 41

    9.2 Messaging e tipo de Links

    Uma maneira de identificar uma internal procedure do ADM considerar como cada SmartObject na comunicao atravs de links. O tipo de link determina quais mensagens o source e o target objects esperam para proceder troca de informaes e, posteriormente, executarem suas funes.

    A tabela a seguir apresenta os tipos de links que cada SmartObject suporta, e se este Smart pode ser source, target ou ambos para cada link.

    SmartObject Tipos de Links SmartContainer Container Source

    Container Target Page(n) Source Page Target

    SmartQuery Container Target Record Source Record Target Navigation Target

    SmartBrowser Container Target Record Source Record Target TableIO Target

    SmartViewer Container Target Record Target Record Source TableIO Target

    Navigation SmartPanel Container Target Navigation Source

    Update SmartPanel Container Target TableIO Source

    SmartFolder Container Target Page Source

  • 42

    9.3 ADM messaging para cada tipo de link

    Para um determinado tipo de link, um source object espera poder executar um conjunto especfico de internal procedures de um target object. Da mesma forma o target object tambm espera poder executar um conjunto de internal procedures do object source. Todo SmartObject possui um conjunto default de procedures que permite esta troca de mensagens.

    Exemplos:

    1) Um container pode criar e destruir os SmartObjects no Container, e instanciar os SmartObjects na sua devida posio. Container Source e Target Objects possuem as seguintes internal procedures:

    Container Source Container Target Adm-create-objects

    Init-objects

    Set-position Set-size

    Adm-destroy Adm-destroy Adm-exit

    2) Um Container capaz de gerenciar seu conjunto de pginas. SmartObjects em cada pgina so linkados ao Container com o link pgina(n).

    Container Source Container Target Select-Page

    Adm-change-page

    Adm-hide

    Adm-view

    Adm-create-objects

    9.4 Event Procedure e Method Procedure

    Cada SmartObject possui uma srie de include files. Alguns so responsveis pela comunicao (messaging), e esto localizados na diviso Internal Procedure do UIB.

    Existem dois tipos de Internal Procedures nos SmartObject include files: Event Procedures e Method Procedures.

    9.4.1 Event procedures

    Exemplo: o SmartQuery, atravs da procedure adm-row-available, pergunta ao SmartViewer sobre a existncia de um novo registro. Adm-row-available uma event procedure.

  • 43

    9.4.2 Method procedures

    Exemplo: o SmartViewer, atravs da method procedure do SmartQuery, pergunta quando preciso receber um novo registro. Send-records um method procedure.

    9.4.3 Comparao entre Event procedure e Method procedure

    Event Procedure Method Procedure Inicia sempre com adm No possui padro para nomes Pode ser alterada No pode ser alterada executada utilizando Dispatch ou Notify chamada utilizando o comando Run No pode ser definido nenhum parmetro

    Pode ser especificada uma lista de parmetros

  • 44

    9.4.4 Como trabalhar com Event Procedure

    Exitem duas formas de forcar a execuo de Event Procedures:

    RUN DISPATCH RUN NOTIFY

    9.4.4.1 Dispatch

    Sintaxe do comando:

    RUN dispatch [IN handle] (base-procedure-name).

    Onde: - Handle: nome do SmartObject. - Base-procedure-name: nome do evento sem o prefixo adm.

    Exemplo: RUN DISPATCH IN v-cli01 (display-fields).

    Incio

    RUN dispatch ("display-fields").

    Existe"local-display-fields" ?

    Executaverso local

    Existe"adm-display-fields" ?

    Executaverso adm

    Fim

    Sim

    No

    No

    Sim

  • 45

    9.4.4.2 Notify

    Sintaxe do comando:

    RUN dispatch [IN handle] (base-procedure-name [,link-types]).

    Onde: - Handle: o nome do SmartObject. - Base-procedure-name: o nome do evento sem o prefixo adm. - Link types: uma lista de tipos de links para os quais a mensagem

    enviada.

    Exemplo: RUN NOTIFY IN this-procedure (row-available).

    Incio

    RUN notify ("base-procedure,link-type").

    Existe outro targetobject para este tipo de link ?

    Run dispatch IN target-object ("base-procedure").

    FimNo

    Sim

  • 46

    9.4.5 Como Alterar Event Procedures ?

    no Section Editor, aps selecionar Procedures, clique no boto New;

    escolha Local ADM Event;

  • 47

    selecione o Event que voc precisa alterar;

    escreva seu cdigo.

  • 48

    Os exemplos a seguir baseiam-se em uma tela de cadastro para as tabelas Customer, Order e Invoice. medida que avanarmos nos exemplos, acresceremos o que aprendermos ao programa abaixo descrito. Salve todos os objetos criados em c:\Prow82a\Curso\exercicio.

    (a) crie uma SmartWindow. Salve-a com o nome w-c09e23.w; (b) crie um SmartFolder nesta janela, com os seguintes tab folders: Customer,

    Order e Invoice. Confirme a criao do link Container ao Advisor; (c) crie trs SmartQuerys, uma para cada tabela. Salve-as, respectivamente, com

    os seguintes nomes: q-c09e23cust.w, q-c09e23orde.w e q-c09e23invo.w;

    (d) crie dois SmartViewers, com os seguintes campos para cada tabela: Customer: Name, Address, City, State, Country, Postal-Code, Contact,

    Phone; Order: Cust-num, Ordered, Promised, Shipped, Instructions. Salve-os, respectivamente, com os seguintes nomes: v-c09e23cust.w e v-c09e23orde.w;

    (e) crie um SmartPanel Navigation e um SmartPanel Update na primeira e segunda pginas do SmartFolder. D a estes SmartPanels os seguintes nomes: Customer-Navico, Order-Navico, Customer-Updsav e Order-Updsav.

    1. Criao de uma alert-box para confirmar a excluso de um registro da tabela Customer. Defina a procedure local-delete-record, de modo que esta mostre uma mensagem

    perguntando ao usurio se ele realmente deseja excluir o registro antes de efetivamente exclu-lo (observe que h uma diviso em toda procedure do ADM qual deseje-se acrescer cdigo antes da execuo do procedimento default do ADM,

    e aps a execuo do mesmo).

    A seguir listado o que ocorre quando o usurio pressiona o boto Delete. (a) o trigger do boto Delete do SmartPanel Update executa NOTIFY (delete-

    record); (b) o viewer, estando linkado ao SmartPanel Update, executa DISPATCH

    delete-record; (c) DISPATCH encontra e executa a procedure local-delete-record. Nosso

    cdigo executado; (d) ao ser questionado quanto excluso do registro, se o usurio escolher Sim,

    a procedure adm-delete-record executada e exclui o registro. Se o usurio escolher No, a procedure abortada.

  • 49

    2. Cadastrar um novo Order (Pedido) para um Customer (Cliente). crie um SmartBrowser sobre a tabela Invoice, com as seguintes colunas: Cust-

    num, Name, Contact e Phone; salve este SmartBrowser com o nome b-c09e23orde.w.

    A seguir listado o que ocorre quando da operao desta tela: (a) o usurio pressiona o boto Add; (b) o ADM limpa os campos do SmartViewer; (c) o usurio entra com os dados do novo registro e pressiona Save; (d) o viewer, como est linkado ao SmartPanel Update, executa DISPATCH

    assign-record, o qual executa a procedure local-assign-record;

  • 50

    (e) a procedure local-assign-record primeiro chama adm-assign-record. O cdigo do programador executado a seguir;

    (f) o controle retorna tela.

    3. Ordenar registros de uma query de n maneiras. crie um SmartBrowser sobre a tabela Invoice, com as seguintes colunas: Cust-

    num, Invoice-num, Ship-Charge, Amount, Invoice-Date e Total-Paid; adicione um radio-set horizontal a este, com o label Ordenar por, e as seguintes

    opes: Customer e Invoice; salve este SmartBrowser com o nome b-c09e23invo.w; crie, no SmartBrowser, uma procedure local-open-query para reabrir a query de

    acordo com a seleo do usurio; crie, no SmartBrowser, uma procedure local-initialize para inicializar o valor do

    radio-set e, se preciso, inicializar outros valores e/ou procedimentos.

  • 51

    A seguir listado o que ocorre quando da operao desta tela:

    (a) a SmartWindow executa o SmartBrowser; (b) o SmartBrowser executa sua prpria local-initialize e, simultaneamente, o

    cdigo escrito nesta procedure executado; (c) o SmartBrowser executa sua prpria local-open-query e, simultaneamente, a

    query aberta de acordo com as condies especificadas nesta procedure; (d) o SmartBrowser executa a procedure display-fieldspara mostrar os dados no

    browse.

  • 52

    9.5 Mapa de eventos

    Os diagramas abaixo representam os principais eventos utilizados pelo ADM. Com o auxlio destes diagramas voc pode definir onde fazer as alteraes necessrias em sua aplicao. As linhas pontilhadas representam uma execuo condicional.

    1. O diagrama que segue representa diversas seqncias de eventos que ocorrem durante a inicializao de um SmartObject.

    adm-initialize

    adm-create-objects adm-enable adm -open-query adm-view adm-row-available

    Adm-initialize executado quando a aplicao executada. Ele chama:

    adm-create-objects para colocar e rodar os SmartObjects no Frame adm-enable para habilitar os objetos (se no estiverem DISABLE-ON-INIT) adm-view para mostrar os objetos (se no forem HIDE-ON-INIT) adm-open-query para abrir uma SmartQuery ou SmartBrowser adm-row-available para enviar o registro corrente para uma SmartQuery ou

    SmartBrowser, apenas se um registro estiver ativo.

    2. Este diagrama representa eventos que ocorrem quando a aplicao terminada.

    adm-exit in object local-exit in container 2.

    Adm-destroy in object 3.

    Adm-exit o evento utilizado por um container para requisitar o fim da aplicao. O container passa para cada objeto uma destroy message. Para cada objeto os seguintes passos so realizados:

    Apaga o objeto (apaga a procedure persistente da memria); Remove todos os links definidos para o objeto; Executa a procedure disable_ui para o objeto.

  • 53

    3. Os prximos dois diagramas representam a seqncia de eventos que ocorrem durante uma troca de pgina em uma Window. Note que a nica diferena entre adm-view-page e adm-select-page que adm-view-page no oculta os objetos.

    adm-view-page

    adm-change-page

    adm-create-objects adm-view

    Adm-view-page chama adm-change-page para mostrar a nova pgina (sem ocultar a anterior antes). Caso for a primeira vez que a pgina for mostrada, ele chamar o evento adm-create-objects. Em seguida chama adm-view e mostra os objetos.

    Neste caso utilizando adm-select-page os objetos da pgina anterior sero ocultados antes de ser mostrada a prxima pgina.

    adm-select-page

    adm-hide adm-change-page

    adm-create-objects adm-view

    4. Este diagrama representa a seqncia de eventos que ocorrem durante a navegao entre registros.

    adm-get-next adm-row-changed

    adm-get-first

    adm-get-prev adm-row-available adm-get-last

    adm-reposition-query adm-display-fields

    Os eventos get-next/first/prev/last e reposition-query chamam adm-row-changed que notifica (notify) todos os objetos de destino (record target) que o registro foi trocado.

  • 54

    5. Os prximos diagramas representam os eventos utilizados quando ocorre a atualizao de um registro

    adm-update-record

    adm-assign-record adm-end-update

    adm-current-changed adm-assign-statement adm-display-fields

    Adm-update-record chama os eventos na seguinte ordem:

    1. adm-assign-record que chama: 2. adm-current-changed para encontrar o registro (find) e ver se ele no est

    sendo alterado/bloqueado por outro usurio (lock); 3. adm-assign-statement faz a gravao (assign); 4. adm-display-record mostra o registro (se for um novo registro);

    5. adm-end-update reposiciona a query e notifica os outros objetos que o registro foi alterado.

    (continuao) Este diagrama representa mais seqncias de eventos que ocorrem durante a atualizao de um registro

    adm-copy-record

    adm-add-record

    adm-delete-record adm-apply-entry

    adm-reset-record

    adm-end-update

    Os eventos copy, delete,add e reset chamam adm-apply-entry para mover o ponteiro para o registro corrente, seguido do comando add, copy, delete ou reset.

    A troca do registro corrente, faz com que sejam notificados todos os object targets que um novo registro est disponvel para ser mostrado

    adm-row-changed

    adm-row-available

    adm-display-fields

  • 55

    10 SmartBrowser com Enable Column

    Para habilitarmos a edio de colunas em um browser, devemos alterar a opo enable da Column Editor (Propriedades da Query do Browser).

    Com o SmartBrowser possuindo Enable Columns podemos criar um link tipo TableIO entre um SmartBrowser e um SmartPanel de Update (p-updsav.r).

  • 56

    11 NEW-STATE METHOD

    O mtodo new-state chamado por meio de um comando RUN.

    Exemplo: Run new-state (param).

    Este comando envia uma mensagem para os Target Objects que possuem um link tipo State, com o nmero do handle e uma varivel.

    Os Target Objects recebem a mensagem e executam a procedure State-Changed recebendo o parmetro na varivel p-state.

    add del cancel T

    State

    Procedure state-changed case p-state: when

    Procedure add-record Run new-state (param)


Recommended