Upload
doduong
View
217
Download
1
Embed Size (px)
Citation preview
2
Parte 1
Introdução ao Progress
Movimentação dos Dados
Manipulando os Dados
Blocos
Localizando Registros
Variáveis
Processamento Condicional
Parte 2
Frames
Includes
Relatórios
Programação Orientada a Eventos
Agenda
3
Widgets
Tipos de Widgets
Menus
Tabelas Temporárias (TEMP-TABLE)
Parte 3
Procedures
Compartilhamento de Dados
Importação e Exportação de Dados
Tratamento de Erros
Transações
Bloqueio de Registro
Funções
Agenda
5
Completo ambiente de desenvolvimento de aplicações.
É composto por:Sistema Gerenciador de Banco de Dados Relacional.
Linguagem de 4a. Geração.
Ferramentas de Programação.
Introdução ao Progress
7
FlexívelAssegura portabilidade das aplicações em outras plataformas.
AbertoSuporta o padrão industrial.
Assegura opções de desenvolvimento heterogêneo.
CompletoPermite construção de grandes aplicações.
Produz soluções Client/Server.
Benefícios
12
.DB
BEFORE-IMAGE: Contém a imagem dos dados de uma transação.BI
DATABASE: Contém os dados atuais e descrições da base
Componentes Físicos
13
.LG
LOCK: Informa se a base está sendo acessada..LK
LOG: Contém as referências dos usuários, hora de entrada, saída e programas acessados (histórico).
Componentes Físicos
14
Componentes da Linguagem
Blocos
Declarações
Funções
Operadores
Variáveis
Expressões
Símbolos especiais
Elementos da interface com o usuário (atributos e métodos
Eventos
15
Tipos de Dados do Progress
Tipo Formato Exemplo
Character x(8)Aceita: A – Alfabetico ! – Maiusculas
“x(40)” –> string alfanumérica“AAA-9999” –> MCZ-9283“!x(10)” –> STRING ALFANUMÉRICA
Integer >>>,>>9Aceita: z – espaço 9 – mostra “0”
“>>>,>>9” –> 1.500“999,999” –> 001.500“zzz,zz9” –> 1.500
Decimal >>>,>>9.99 “>>>,>>9.99” –> 1.500,45“999,999.99” –> 001.500,45“zzz,zz9.99” –> 1.500,45
Logical Yes/NoAceita: True/False
YesNo
Date MM/DD/AAAA 12/31/9999
Rowid ----
Recid >>>>>9
19
BASE DE DADOS
BUFFER REGISTRO
BUFFER TELA
ENTRADA USUÁRIO
Movimentando Dados
TELA → BASE DE DADOS
20
Regras para Movimentação de Dados
Os programas não podem manipular os dados da base de dados até que eles sejam copiados para o buffer de registro.
O usuário não pode interagir com os dados até que eles sejam copiados do buffer de registro para o buffer de tela.
As alterações que são feitas no buffer de tela ou buffer de registro não são atualizadas automaticamente em outro buffer. Deve-se programar o controle de movimentação entre os buffers.
21
UPDATE
UsuárioBuffer de TelaBuffer de RegistroBanco de DadosComando
ASSIGN
CREATE
DELETE
DISPLAY
ENABLE
FIND
FOR EACH
GET
INSERT
PROMPT-FOR
RELEASE
SET
Comandos de Movimentação de Dados
23
Insert
Cria um novo registro no banco, permite que o usuário faça alterações e atualiza as informações no banco.
Executa as ações de CREATE, DISPLAY, PROMPT-FOR e ASSIGN.
Ex.: INSERT customer.
24
Create
Cria um novo registro no banco, inicializa com os valores defaults(padrãos) e deixa uma cópia do registro no buffer de registro.
Ex.: CREATE customer.
25
Update
Mostra os valores, permite ao usuário alterar e atualiza os dados no banco.
Executa as ações de DISPLAY, PROMPT-FOR e ASSIGN.
Ex.: UPDATE customer.UPDATE customer EXCEPT cust-num.
26
Display
Mostra os valores na Tela.
Move os dados do Buffer de Registro para o Buffer de Tela.
Os dados devem sempre ter sido previamente movidos para o Buffer de Registro.
Ex.: DISPLAY customer.DISP customer.cust-num.
27
Set
Permite que o usuário altere as informações e atualiza o banco de dados.Executa as ações de PROMPT-FOR e ASSIGN.
Ex.: SET customer.SET customer.name.
28
Prompt-For
Solicita uma entrada de dados ao usuário e disponibiliza no buffer de tela.
Ex.: PROMPT-FOR customer.cust-num.FIND customer WHERE
customer.cust-num = INPUT customer.cust-num NO-ERROR.
IF AVAILABLE customer THENDISPLAY customer
EXCEPT customer.commentsWITH 1 COLUMN.
29
Assign
Atualiza a informação no Banco de Dados.
Copia os dados do buffer de tela para seus respectivos campos e/ou variáveis no buffer de registro.
Ex.: DEF VAR i-cust-num AS integer NO-UNDO.PROMPT-FOR i-cust-num.FIND FIRST customer EXCLUSIVE-LOCK.ASSIGN customer.cust-num = i-cust-num.
30
Delete
Elimina um registro do buffer de registro e do banco de dados.
Os dados devem sempre ter sido previamente movidos para o Bufferde Registro.
Ex.: REPEAT:PROMPT-FOR customer.cust-num.FIND customer USING customer.cust-num.DELETE customer.
END.
32
insert customer.
create customer.update customer.
create customer.display customer.prompt-for customer.assign customer.
Observe a Movimentação
33
SET
ASSIGNDISPLAY
UPDATE
CREATE
INSERT
DELETE PROMPT-FOR FIND FOR EACH RELEASE
Quadro de Comandos
37
Repeat
Laço (repetição) automático. Continua a interagir até encontrar um END-ERROR ou outra condição de término definida pelo usuário.
Ex: REPEAT WITH 1 COLUMN:
CREATE customer.UPDATE customer.
END.
38
For Each
Lê um registro a cada interação do bloco e copia os dados do banco para o buffer de registro.
Ex:
FOR EACH customer:
DISPLAY customer.cust-numcustomer.name.
END.
39
Do
Individualiza um grupo de comandos dentro de um bloco simples.
Ex:
FOR EACH customer:
DISPLAY customer.cust-num.IF credit-limit > 15000 THEN DO:
UPDATE customer.namecustomer.address.
MESSAGE "Registro Alterado".END.
END.
40
Desvio de Execução de Blocos
Forma de desviar a seqüência de execução de determinado bloco.
Comandos:– NEXT– LEAVE
Ex: FOR EACH customer:DISPLAY customer.cust-num.IF credit-limit > 15000 THEN
NEXT.IF credit-limit = 10000 THEN
LEAVE.UPDATE customer.name
customer.address.END.
43
Find
Busca apenas um registro em uma tabela.
– FIRST (primeiro)
– LAST (último)
– NEXT (próximo)
– PREV (anterior)
Ex.: FIND FIRST customerWHERE customer.credit-limit > 15000NO-ERROR.IF AVAILABLE customer THEN
DISPLAY customer WITH 1 COLUMN.
44
Where
Limita os registros a serem mostrados em uma leitura de uma determinada tabela.
Ex: FOR EACH customerWHERE customer.credit-limit > 15000:DISPLAY customer.cust-num
customer.credit-limit.END.
OPERADORES:NOT > <AND >= <=OR <>
45
Substitui o WHERE, utilizando o dado informado no buffer de tela.
Ex: REPEAT WITH 1 COLUMN:PROMPT-FOR customer.cust-num.FIND customer
USING customer.cust-num.DISPLAY customer.
END.
WHERE customer.cust-num = INPUT customer.cust-num
Using
46
Substitui o WHERE, utilizando o índice para fazer o relacionamento entre tabelas.
Ex: FIND FIRST customer.FOR EACH order OF customer:
DISPLAY order.order-numEND.
WHERE order.cust-num = customer.cust-num
Of
47
By
Usa-se a opção BY para classificação de registros por um campo não indexado.
Ex: FOR EACH customerBY balance DESCENDING: DISPLAY customer.balance
customer.namecustomer.phone.
END.
Default: ordenação ascendente
48
Use-Index
A opção USE-INDEX permite que você escolha qualquer índice definido para selecionar registros.
Ex: FOR EACH customer USE-INDEX name:DISPLAY customer.balance
customer.namecustomer.phone.
END.
49
Begins
Verifica se a 1ª expressão inicia com a 2ª expressão.
Utiliza um índice caso exista.
Ex: FOR EACH customerWHERE customer.name BEGINS “S”:DISPLAY customer.cust-num
customer.namecustomer.phone.
END.
50
Matches
Compara uma expressão do tipo caracter com um padrão e retorna o valor verdadeiro se a expressão for atendida.Não utiliza índice.
Ex: FOR EACH customerWHERE customer.address MATCHES “*st”:DISPLAY customer.cust-num
customer.namecustomer.address.
END.
51
Contains
Faz a busca por determinada palavra ou combinação delas, em atributos do tipo word-index.
Ex: FOR EACH itemWHERE item.item-name CONTAINS “ball”:DISPLAY item.item-num
item.item-nameitem.price.
END.
52
Buffer
Funciona como um espelho da tabela.
Ex: DEFINE BUFFER bf-cliente FOR customer.
FIND FIRST customer.UPDATE customer.cust-num
customer.name.FIND bf-clienteWHERE bf-cliente.cust-num = customer.cust-num.DISPLAY bf-cliente.name
bf-cliente.phone.UPDATE customer.address.
53
Query
Pesquisa agrupada de registro do banco de dados.
Exemplos:
Definir a query:
DEFINE QUERY nome-da-query
FOR tabela SCROLLING.
Abrir a query:
OPEN QUERY nome-da-query FOR EACH tabela.
Acessar os registros:
GET FIRST nome-da-query.
54
Get
Retorna um registro de uma query previamente aberta.
Ex: – GET FIRST nome-da-query.– GET NEXT nome-da-query.– GET PREV nome-da-query.– GET LAST nome-da-query.
55
Exemplo: Query + Get
DEFINE QUERY qr-custFOR customer SCROLLING.
OPEN QUERY qr-cust FOR EACH customer.
GET FIRST qr-cust.REPEAT:
DISP customer.GET NEXT qr-cust.
END.
58
Variáveis
Ex.: DEFINE VARIABLE nome-variavelAS Tipo de dadoLIKE Tabela.atributo INITIAL “ABC” NO-UNDO.
Ex.: DEFINE VARIABLE c-customerAS char NO-UNDO.
DEF VAR i-cust-numLIKE customer.cust-num NO-UNDO.
59
Message
Envia uma mensagem para a tela.
Sintaxe:
MESSAGE “texto”
[ UPDATE variavel ][ VIEW-AS ALERT-BOX
[ QUESTION | INFORMATION | WARNING | ERROR ]][ BUTTONS YES-NO | YES-NO-CANCEL |
OK | OK-CANCEL | RETRY-CANCEL ][ TITLE “título” ].
60
Exemplo: Message
DEF VAR l-resp AS logical
INITIAL noNO-UNDO.
MESSAGE “Confirma Atualização?”UPDATE l-respVIEW-AS ALERT-BOX QUESTIONBUTTONS YES-NO TITLE “Atualização de Dados”.
63
Processamento Condicional
SOLICITA NUM. CLIENTE
BUSCA REGISTRO NO BANCO DE DADOS
ENCONTROU?
ALTERA INFORMAÇÕES ADICIONA NOVO
SIM NÃO
64
Processamento Condicional: IF
IF expression THENcomando.
ELSE DO:comando.comando.comando.
END.
BLOCO
65
Processamento Condicional: Case
CASE expression:WHEN value THEN
comando.WHEN value THEN DO:
bloco.END.WHEN value THEN
comando.OTHERWISE DO:
bloco.END.
END CASE.
67
Este material é de propriedade da DATASUL S.A., sendo proibida a sua reprodução em qualquer meio, total ou parcial, sem aprovação por escrito. Todos os direitos estão reservados. A informação contida aqui é confidencial
e não pode ser utilizada fora da empresa ou das franquias que fazem parte da nossa rede, não podendo ser divulgada para clientes, parceiros ou outra empresa ou indivíduo sem o prévio consentimento de um diretor da
DATASUL S.A. As opiniões expressas aqui estão sujeitas a modificação sem aviso prévio.
http://universidade.datasul.com.br
http://universidade.datasul.com.br
Obrigada!
Agradecimento