Você está na página 1de 79

Treinamento de Progress Desenvolvimento de Aplicaes

Introduo

Introduo
y Progress um ambiente de desenvolvimento de

aplicaes completo, pois composto por:


y Linguagem de Programao (4 Gerao); y Ferramenta de Programao.

y SGBD (Sistema de Gerenciamento de Banco de Dados);

Introduo
y flexvel, aberto e completo. y Flexvel, pois assegura portabilidade entre plataformas; y Aberto, pois suporta padro industrial; y Completo, pois permite a construo de grandes aplicaes e possui solues Client/Server.

omponentes da Linguagem
y Blocos; y Declaraes; y Funes; y Operadores; y Variveis; y Expresses; y Smbolos Especiais; y Elementos de Interface com o Usurio; y Eventos.

omponentes Lgicos
y Tabelas; y Registros; y Campos; y ndices.

omponentes Fsicos
y Database (Banco de Dados)

Contm os dados da

base. y Before-Image Contm imagem dos dados durante uma transao. Caso houver algum problema ou a transao for desfeita, os dados alterados sero desfeitos. y Log Contm as referncias de acesso base. y Lock Informa se a base est sendo acessada.

Tipo de Dados do Progress


Tipo CHARACTER INTEGER DECIMAL LOGICAL DATE ROWID RECID
>>>>>9

Formato
x(10) Alfanumrico A(10) Alfabtico !x(10) Letras Maisculas >>>,>>9 Nmero sem espaos zzz,zz9 Nmero com espaos 999,999 Preenche com 0 >>>,>>9.999

Exemplo
x(40) String alfanumrica AAA-9999 PRO-2012 !x(20) STRING MAISCULAS >>>,>>>,>>9 2.012 zz,zzz,zz9 10 99,999,999 00.000.034 >>,>>>.>>9 2.012,970 zz,zz9.9 10,9 99,999.99 00.034,05 Yes/No No True/False True Sim/No No 99/99/9999 12/31/2011 99/99/99 12/31/11

YES/NO TRUE/FALSE Sim/No 99/99/9999 (ms/dia/ano) 99/99/99 (ms/dia/ano)

Definio de Variveis
y DEFINE VARIABLE <nome da varivel> AS <tipo>

FORMAT <formato> INITIAL <valor inicial> NOUNDO.


y Exemplo: DEFINE VARIABLE c-nome AS CHARACTER FORMAT x(40) .

Definio de Variveis

Message (Mensagem)
y MESSAGE <mensagem>

UPDATE <varivel lgica>


VIEW-AS ALERT-BOX <tipo mensagem> BUTTONS <boto> TITLE <ttulo da mensagem>.
y UPDATE

Recebe os valores dos botes YES ou NO . y Tipo de Mensagem: INFO/WARNING/QUESTION/ERROR. y BUTTONS: OK/OK-CANCEL/YES-NO/YES-NOCANCEL/RENTRY-CANCEL. y TITLE Ttulo da caixa de mensagem.

Message (Mensagem)
y Exemplo:

MESSAGE Treinamento Progress VIEW-AS ALERT-BOX INFO BUTTONS OK. MESSAGE Deseja continuar? UPDATE l-resp VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE Pergunta . MESSAGE Cliente no encontrado! VIEW-AS ALERT-BOX ERROR BUTTONS RETRY-CANCEL.

Message (Mensagem)

Funo
y TODAY Retorna a data atual; y TIME y y y y

Retorna a hora atual, em segundos; DAY(<data>) Retorna o DIA da data fornecida; MONTH(<data>) Retorna o MS da data fornecida; YEAR(<data>) Retorna o ANO da data fornecida; WEEKDAY(<data>) Retorna o dia da semana, em nmeros.

Funo
y Exemplo: ASSIGN dt-compra = TODAY.
MESSAGE Data atual: STRING(TODAY, 99/99/9999 ) SKIP Hora atual: STRING(TIME, hh:mm:ss ) SKIP Dia: DAY(TODAY) SKIP Ms: MONTH(TODAY) SKIP Ano: YEAR(TODAY) SKIP Dia Semana: WEEKDAY(TODAY) VIEW-AS ALERT-BOX INFO BUTTONS OK TITLE Atual .

Localizao e Movimentao de Dados

Localizao dos Dados

Base de Dados

Buffer de Registro

Buffer de Tela

Movimentao de Dados

Base de Dados

Buffer de Registro

Buffer de Tela

Base de Dados

Buffer de Registro

Buffer de Tela

Entrada de Dados do Usurio

Movimentao de Dados
y Os dados da Base de Dados no sero manipulados at

que sejam movimentados para o Buffer de Registro; y Os dados do Buffer de Registro no sero manipulados pelo usurio at que movimentados para o Buffer de Tela; y Os dados manipulados pelo usurio no sero atualizados na Base de Dados at que sejam movimentados pelo Buffer de Tela e Buffer de Registro.

Manipulao de Dados

Manipulao de Dados
y CREATE

responsvel por criar um registro na Base de Dados, com valores padres inicializados e o registro ser disponibilizado no Buffer de Registro;
y Exemplo: CREATE cliente.

Manipulao de Dados
y DISPLAY

responsvel por mostrar os valores em tela, movendo os dados do Buffer de Registro para o Buffer de Tela, porm os dados devem estar disponveis no Buffer de Registro.
y Exemplo: DISPLAY cliente.nome.

Manipulao de Dados
y PROMPT-FOR

responsvel por solicitar a Entrada de Dados do Usurio disponvel no Buffer de Tela e o disponibiliza no mesmo.
y Exemplo: PROMPT-FOR cliente.nome.

Manipulao de Dados
y ASSIGN

responsvel por atualizar os dados no Buffer de Registro, movimentando os dados do Buffer de Tela para o Buffer de Registro.
y Exemplo: DEFINE VARIABLE c-nome AS CHARACTER.
CREATE cliente. PROMPT-FOR c-nome. ASSIGN cliente.nome = c-nome.

Manipulao de Dados
y SET

responsvel por solicitar a Entrada de Dados do Usurio disponvel no Buffer de Tela, disponibilizla no mesmo e atualizar os dados do Buffer de Tela para o Buffer de Registro. Este comando tem a funo do PROMPT-FOR e ASSIGN.
y Exemplo: CREATE cliente. SET cliente.nome.

Manipulao de Dados
y UPDATE - responsvel por solicitar a Entrada de

Dados do Usurio disponvel no Buffer de Tela, disponibiliz-la no mesmo, atualizar os dados do Buffer de Tela para o Buffer de Registro e atualizar os dados do Buffer de Registro para a Base de Dados. Este comando tem a funo do DISPLAY, PROMPT-FOR e ASSIGN.
y Exemplo: CREATE cliente. UPDATE cliente.nome

Manipulao de Dados
y INSERT

responsvel por criar um novo registro na Base de Dados, disponibiliza o registro no Buffer de Registro, depois no Buffer de Tela, solicita a Entrada de Dados do Usurio, movimenta os dados para o Buffer de Registro e depois para a Base de Dados. Este comando tem a funo do CREATE, DISPLAY, PROMPT-FOR e ASSIGN.
y Exemplo: CREATE cliente. INSERT cliente.

Manipulao de Dados
y DELETE

responsvel por eliminar o registro do Buffer de Registro e da Base de Dados, porm os dados devem estar disponveis no Buffer de Registro.
y Exemplo: DELETE cliente.

Manipulao de Dados
y RELEASE

Ele limpa o registro do Buffer de Registro e atualiza o registro que estava disponvel no Buffer de Registro na Base de Dados.
y Exemplo: CREATE cliente. UPDATE cliente.nome. RELEASE cliente.

Quadro de Comandos
INSERT UPDATE SET DELETE CREATE DISPLAY PROMPT-FOR ASSIGN FIND FOR EACH RELEASE

Operadores
y NOT IF NOT cliente.ativo THEN NEXT. y AND IF cliente.ativo AND

y y y y y y

cliente.limite = 0 THEN ASSIGN cliente.ativo = NO. OR IF cliente.limite > 0 OR cliente.ativo THEN ASSIGN cliente.limite = cliente.limite + 10. = Igual <> Diferente > Maior >= Maior ou igual < Menor <= Menor ou igual

Ateno!!
y No Progress, para finalizar as declaraes, utiliza-se

ponto (.), ao contrrio da maioria das linguagens de programao existente, onde usa-se pont0-e-vrgula (;).
y Exemplo:
CREATE cliente

ASSIGN cliente.nome.

Exerccios

Exerccio 1
y Construa um programa que permita a incluso de um

registro na tabela customer . Se possvel apresente vrias formas de incluso.

Blocos

Blocos
y FOR EACH

responsvel por localizar UM ou MAIS registros na Base de Dados e disponibiliz-los no Buffer de Registro.
y Exemplo: FOR EACH cliente: DISPLAY cliente. END.

Blocos
y REPEAT

responsvel pelo lao de repetio no Progress, sendo que o mesmo continua a interagir at que encontre uma condio de trmino ou o ENDERROR.
y Exemplo: REPEAT: PROMPT-FOR c-nome. CREATE cliente. ASSIGN cliente.nome = c-nome. END.

Blocos
y DO

responsvel por individualizar um conjunto de comandos dentro de um bloco.


y Exemplo: IF c-nome <> sair DO: CREATE cliente. ASSIGN cliente.nome = c-nome. END. ELSE RETURN NO-APPLY.

Desvio de Execuo do Bloco


y LEAVE
y

Permite a sada de um bloco.

Exemplo: REPEAT: PROMPT-FOR c-nome. IF c-nome = sair THEN NEXT. CREATE cliente. ASSIGN cliente.nome = c-nome. END.

Desvio de Execuo do Bloco


y NEXT

responsvel em ir para o final (END) de um bloco e iniciar uma novo interao do bloco.
y Exemplo: FOR EACH cliente: IF cliente.ativo = NO THEN NEXT. ASSIGN cliente.limite = 2000. END.

Exerccios

Exerccio 2
y Construa um programa que permita a incluso de

vrios registros na tabela customer .

Exerccio 3
y Construa um programa que permita alterar vrios

registros da tabela customer .

Localizando Registros

Localizando Registros
y FIND
y y y y

responsvel por localizar UM registro na Base de Dados e disponibiliz-lo no Buffer de Registro.


FIND FIRST FIND NEXT FIND PREV FIND LAST Busca pelo primeiro registro; Busca pelo prximo registro; Busca pelo registro anterior; Busca pelo ltimo registro. utilizado para no apresentar erro quando o registro no encontrado. utilizado para verificar se o registro de determinada tabela est disponvel.

y NO-ERROR y AVAILABLE

y Exemplo:

FIND FIRST cliente NO-ERROR. IF AVAILABLE cliente THEN UPDATE cliente.nome.

Localizando Registros
y WHERE

responsvel por limitar a busca por registros de uma tabela.


y Exemplo: FOR EACH cliente WHERE cliente.ativo = YES: DISPLAY cliente.nome. END.

Localizando Registros
y INPUT

referente a um valor de tela, onde o usurio realiza a entrada dos dados.


y Exemplo: PROMPT-FOR cliente.codigo. FIND FIRST cliente WHERE cliente.codigo = INPUT cliente.codigo NOERROR. IF AVAILABLE cliente THEN DISPLAY cliente.nome.

Localizando Registros
y USING

utilizado para substituir o comando WHERE e INPUT na localizao do registro.


y Exemplo: PROMPT-FOR cliente.nome. FIND FIRST cliente USING cliente.nome NO-ERROR.
IF AVAILABLE cliente THEN DISPLAY cliente.codigo.
WHERE cliente.nome = INPUT cliente.nome

Localizando Registros
y OF

utilizado para substituir o WHERE no relacionamento entre tabelas, utilizando o ndice da tabela.
y Exemplo: FIND FIRST cliente NO-ERROR.

IF AVAILABLE cliente THEN DO: FOR EACH pedido OF cliente: DISPLAY pedido.num-pedido pedido.dt-pedido. END. END.

WHERE pedido.codigo = cliente.codigo

Localizando Registros
y USE-INDEX

usado na busca de registros para ordenar pelo ndice da tabela.


y Exemplo: FOR EACH pedido USE-INDEX chCliente: DISPLAY pedido.num-pedido pedido.dt-pedido. END.

Localizando Registros
y BY

usado na busca de registros, ordenando por determinado campo. Se acompanhado pela clausula DESCENDING, a ordenao ser do maior para o menos.
y Exemplo: FOR EACH cliente BY cliente.dt-nasc: DISPLAY cliente.codigo cliente.nome. END.

Localizando Registros
y CONTAINS

responsvel pela busca de uma determinada palavra ou parte dela em atributos do tipo WORD-INDEX.
y Exemplo: FOR EACH cliente WHERE cliente.nome CONTAINS Oliveira : DISPLAY cliente.codigo cliente.nome. END.

Localizando Registros
y MATCHES utilizado para verificar se uma expresso contm parte da outra expresso.
y Se o asterisco for colocado no incio da segunda expresso, ser

comparado apenas com o final da primeira expresso. Se o asterisco for colocado no final da segunda expresso, ser comparado com o incio da primeira expresso. Se o asterisco for colocado no incio e no final da segunda expresso, ser comparado com a primeira expresso inteira. y Neste caso, no ser utilizado ndice.
y Exemplo: FOR EACH cliente WHERE cliente.nome MATCHES *Silva* : DISPLAY cliente.codigo cliente.nome. END.

Localizando Registros
y BEGINS

utilizado para verificar se uma expresso inicia com uma outra expresso. y Se houver um ndice para o campo, ele ser utilizado.
y Exemplo: FOR EACH cliente WHERE cliente.nome BEGINS Joo : DISPLAY cliente.codigo cliente.nome. END.

Localizando Registros
y BUFFER

utilizado para ser um espelho da tabela.

y Exemplo: DEFINE BUFFER bf-cliente FOR cliente. FIND FIRST cliente NO-ERROR. IF AVAILABLE cliente THEN DO: FIND FIRST bf-cliente WHERE bf-cliente.nome = cliente.conjuge NO-ERROR. IF NOT AVAILABLE bf-cliente THEN DO: CREATE bf-cliente. ASSIGN bf-cliente.nome = cliente.conjuge. UPDATE bf-cliente. END. END.

Localizando Registros
y QUERY

Realiza buscas agrupadas nos registros das

tabelas.

y Exemplo: DEFINE QUERY qr-cliente FOR cliente SCROLLING. OPEN QUERY qr-cliente FOR EACH cliente NO-LOCK WHERE cliente.ativo = YES.

Localizando Registros
y GET utilizado para buscar registros de uma query previamente aberta. Este comando utilizado juntamente com FIRST, NEXT, PREV e LAST.
y Exemplo: DEFINE QUERY qr-cliente FOR cliente SCROLLING. OPEN QUERY qr-cliente FOR EACH cliente NO-LOCK WHERE cliente.ativo = YES. GET FIRST qr-cliente. REPEAT: DISPLAY cliente. GET NEXT qr-cliente. IF NOT AVAILABLE cliente THEN NEXT. END.

Exerccios

Exerccio 4
y Busque todos os registros da tabela customer ,

mostrando os campos custnum , name , salesrep e mostre o campo repname da tabela referncia do campo salesrep (tabela salesrep ), usando a chave como referncia.

Exerccio 5
y Construa um programa que busque o ultimo registro

da tabela customer , campo creditlimit menor que 10000.

Exerccio 6
y Construa um programa que utilize QUERY, que mostre

todos os registros da tabela customer , onde o campo name comesse com a letra L .

Exerccio 7
y Construa um programa que solicite o cdigo do cliente

(campo custnum da tabela customer ), localize o registro pelo cdigo solicitado e disponibilize o mesmo para alterao do limite (campo creditlimit da tabela customer ).

Exerccio 8
y Construa um programa que mostre todos os clientes

(tabela customer ) ordenado pelo pas (campo country da tabela customer ), mostrando apenas os campos custnum , name , creditlimit e country .

Exerccio 9
y Construa um programa que solicite o representante do

cliente (campo salesrep da tabela customer ), busque e mostre todos os clientes (tabela customer ) com este representante ( salesrep ).

Processamento Condicional

Processamento Condicional
y IF <condicao> THEN y ELSE
y Exemplo: IF customer.creditlimit < 10000 THEN MESSAGE Crdito menor de 10.000,00 VIEW-AS ALERT-BOX INFO BUTTONS OK. ELSE MESSAGE Crdito maior que 10.000,00 VIEW-AS ALERT-BOX WARNING BUTTONS OK.

Processamento Condicional
y CASE <expresso>:

WHEN <valor> THEN WHEN <valor> THEN DO: END. OTHERWISE DO: END. END CASE.

Exerccios

Exerccio 10
y Construa um programa que busque o primeiro registro

da tabela customer , se o pas (campo country ) for igual a USA , mostrar a mensagem Estados Unidos , seno, motrar a mensagem Outro pas .

Exerccio 11
y Construa um programa que busque o primeiro cliente

com o nome (campo name ) iniciado pela letra T . Caso o representante (campo salesrep ) seja igual a BBB , exiba a mensagem Bubba B. Brawn , caso seja igual a DKP , exiba a mensagem Dirk K. Pitt , caso seja igual a DOS , exiba a mensagem Donna Swindall e se for outro, exiba a mensagem Outro Representante .

Frames

Conceito
y Frame a rea retangular dentro do Progress usada

para apresentar as informaes em tela.


y A tela padro composta por:
y y y

21 linha na frame; 2 linhas de mensagem; 1 linha de status

Exemplo de Uso
FOR EACH cliente: DISPLAY cliente.codigo cliente.nome WITH FRAME f-abc DOWN CENTERED. END.
y DOWN

Apresenta em uma s tela mltiplas interaes, caso contrrio, apresentar somente uma. y CENTERED Centraliza as informaes na tela

Definio de Frame
y A definio de uma frame serve para apresentar uma forma de como a informao ser apresentada dentro de um ou mais procedimentos, podendo definir com ou sem label, posicionamento, linha em que a informao ser apresentada e at mesmo o formato do campo.
y Exemplo: DEFINE FRAME f-abc cliente.codigo NO-LABEL SKIP(2) cliente.nome AT 10 SKIP cliente.dt-nasc COLON 20 SKIP cliente.ativo COLON 20 SKIP WITH SIDE-LABELS OVERLAY.

Form
y A Form serve para definir como a informao ser

apresentada dentro de uma Frame, podendo a Frame ter VRIAS Forms, porm caso no seja definida uma Frame para a Form, o Progress define automaticamente.
y Exemplo:
FORM cliente.codigo NO-LABEL SKIP(2) cliente.nome AT 10 SKIP WITH FRAME f-pagina.

Posicionamento
y AT Alinhamento pela direita; y TO Alinhamento pela esquerda; y COLON Alinhamento pelos dois pontos (:).
y Exemplo: y AT:
y

TO: COLON:

Cdigo: 100 Nome: Joo Cdigo: 101 Nome: Maria Cdigo: 102 Nome: Pedro

Manipulao de Frame
y y y y

VIEW Apresenta uma frame; HIDE Apaga uma frame; CLEAR Apaga o contedo de uma frame; PAUSE Suspende a execuo at um certo tempo passar ou at que uma tecla seja pressionada.
y Exemplo: VIEW FRAME f-pagina. HIDE FRAME f-123 NO-PAUSE. CLEAR FRAME f-abc ALL NO-PAUSE. PAUSE. PAUSE 5.

Exerccios

Exerccio 12
y Construa um programa que mostre os dados de um

cliente (tabela customer ), os dados de seu representante (tabela salesrep ) e os seus pedidos (tabela order ).