Você está na página 1de 56

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:
<programa> 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 <nome-variavel> AS <DataType> NO-UNDO.
DEFINE VARIABLE <nome-variavel> LIKE <Field> 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 <nome-buffer> FOR <nome-tabela>.

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.

<corpo da procedure>
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).

<corpo da funo>

RETURN <expresso que resulte decimal>.
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 <variavel> = <expressao>.
Atribui a <variavel> o resultado de <expressao>.


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 <condicao> then <bloco/comando> else <bloco/comando>
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 <buffer>.
Cria um novo registro na tabela associada ao buffer.

19
Delete <buffer>.
Exclui um registro da tabela associada ao buffer.

Find <first/last/next/prev> <buffer> where <selecao> <lock>.
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: {<nome-do-include> [<parametro-1>
<parametro-n>]}
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(<arg1>, ,<argn>) >


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" ?
Executa
verso local
Existe
"adm-display-fields" ?
Executa
verso 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 target
object para este tipo de link ?
Run dispatch IN target-object ("base-procedure").
Fim
No
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)

Você também pode gostar